Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   ¿Copia de seguridad de BD SQL 2000 desde la aplicación? (https://www.clubdelphi.com/foros/showthread.php?t=62527)

Blaster 30-12-2008 18:17:29

¿Copia de seguridad de BD SQL 2000 desde la aplicación?
 
Saludos a Todos.

Yo utilizo Delphi 7, con acceso a Microsoft SQL 2000, para un software de hospedaje y reservaciones. Lo que deseo es poder realizar, desde la propia aplicación, una salva íntegra de TODA la base de datos. O sea, que yo pueda obtener y/o generar un archivo, exactamente como cuando uno da click derecho encima de la base de datos (empleando el SQL Server Enterprise Manager), y entonces escoge las opciones:

"Todas las Tareas / Copia de Seguridad de la base de datos... / etc, etc"

Luego de esto se obtiene un fichero sin extensión, con el que posteriormente se podría generar la base de datos, através de:

"Todas las Tareas / Restaurar base de datos... / etc, etc"

En fin, deseo poder obtener un archivo desde mi aplicación, el cual yo pueda salvar en el disco duro de mi PC, o en cualquier medio de almacenamiento externo. Algo adicional es que mi base de datos está localizada en otra PC conectada por red Lan (Intranet). Les agradecería su ayuda.

Gracias por adelantado.
Reinier.

DANY 30-12-2008 18:35:21

Debes hacer una busqueda en el foro, el tema ya se ha tratado.
Código Delphi [-]
var Consulta: TADOQuery ;
begin
  inherited;
  try
    Consulta := TADOQuery.Create(nil);
    Consulta.Connection := fDatos.ADOConnection ;

    Consulta.SQL.Add(' BACKUP DATABASE '+ nombreBaseDeatos+' TO DISK = '+QuotedStr(RutaBaseDeDatos));
    Consulta.ExecSQL ;


    MessageDlg('El backup se ha realizado con exito', mtInformation  , [mbOK], 0);

  Finally

    FreeAndNil(Consulta );
    

  End;
Va de ejemplo con un adoQuery.
Saludos.

Blaster 02-01-2009 22:19:02

Gracias por la ayuda
 
Saludos.

Me ha servido de gran ayuda. He redondeado la idea y al final hice lo siguiente:

Primero, ya sea desde la opción del Menú Principal de la aplicación o su correspondiente BarButton:

Código Delphi [-]
procedure TfrmPrincipal.SubMenuSalvarBaseDeDatosClick(Sender: TObject);
begin
  //Ante todo verifico si aun hay conexion con la BD
  if (HostalWare.ExisteConexionConLaBD = True)
    then
      begin
        //Ejecuto el procedimiento de Salvar Base de Datos
        SalvarBaseDeDatosHostalWare;
      end
        else
          begin
            MessageDlg('Se ha perdido la conexión con la base de datos.' + #13 + 'Inténtelo en otra ocasión', mtError, [mbOk], 0);
          end;
end;


Segundo, el procedimiento de la Interfaz Principal invoca a la Clase Madre Controladora:

Código Delphi [-]
procedure TfrmPrincipal.SalvarBaseDeDatosHostalWare;
begin
  //Ante todo verifico si aun hay conexion con la BD
  if (HostalWare.ExisteConexionConLaBD = True)
    then
      begin
        if (SaveDialogHostalWare.Execute)
          then
            begin
              //Salvo la base de datos en forma de fichero
              //HostalWare.SalvarBaseDeDatosHostalWare(QuotedStr(   SaveDialogHostalWare.FileName + '.BAK'   ));
              HostalWare.SalvarBaseDeDatosHostalWare(SaveDialogHostalWare.FileName + '.HBK'   );
            end;
      end
        else
          begin
            MessageDlg('Se ha perdido la conexión con la base de datos.' + #13 + 'Inténtelo en otra ocasión', mtError, [mbOk], 0);
          end;
end;

Luego, el procedimiento de la Clase Madre Controladora delega responsabilidades en la Clase Controladora correspondiente:

Código Delphi [-]
procedure TGestionCursistasHospedados.SalvarBaseDeDatosHostalWare(aCamino: String);
begin
  //Se invoca al procedimiento del Módulo correspondiente
  ModuloControlDelSistema.SalvarBaseDeDatosHostalWare(aCamino);
end;

Y esta es la que trabaja directamente con el procedimiento almacenado de la base de datos:

Código Delphi [-]
procedure TModuloControlDelSistema.SalvarBaseDeDatosHostalWare(aCamino: String);
begin
  //Se realiza la conexión con la BD
  DataModuleConexionGeneral.ADOConnectionGeneral.Connected:= True;
  DataModuleControlDelSistema.spSalvarBaseDeDatosHostalWare.Active:= False;
  
  //Le pasamos los parámetros al StoredProc
  DataModuleControlDelSistema.spSalvarBaseDeDatosHostalWare.Parameters.ParamByName('@vCamino').Value:= aCamino;

  //Aquí se hace la Salva de la BD
  //DataModuleControlDelSistema.spSalvarBaseDeDatosHostalWare.Open;  //<- No genera datos de respuesta el StoredProc, por eso se omite esto.
  DataModuleControlDelSistema.spSalvarBaseDeDatosHostalWare.ExecProc;
end;

Y por último, el procedimiento almacenado ejecuta lo siguiente:

Código SQL [-]
CREATE PROCEDURE [dbo].[SalvarBaseDeDatosHostalWare] 
@vCamino varchar(1000)
AS

BACKUP DATABASE GCHWare TO DISK = @vCamino;

GO

Muchas gracias por la ayuda recibida.
Saludos.
Reinier.


La franja horaria es GMT +2. Ahora son las 10:23:57.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi