Ver Mensaje Individual
  #3  
Antiguo 02-01-2009
Avatar de Blaster
Blaster Blaster is offline
Miembro
 
Registrado: jun 2008
Ubicación: Miami, USA
Posts: 12
Reputación: 0
Blaster Va por buen camino
Thumbs up 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.
Responder Con Cita