Hola, estoy desarrollando una app con Delphi 5 y Firebird 1.5. Quiero que el usuario pueda realizar un back up desde la app para lo cual uso el gbak de Firebird. Esto es lo que hago, desde un menu contextual el usuario pide realizar una copia de seguridad:
Código:
procedure RealizarBackup (Base,Destino:string);
var RutaGbak,Params:String;
begin
if FileExists(ExtractFilePath(Application.ExeName) + 'gbak.exe') then begin
RutaGbak := ExtractFilePath(Application.ExeName)+ 'gbak.exe';
Params := ' -b ';
Params := Params + ' -user SYSDBA -password masterkey ';
Params := Params + AnsiQuotedStr(Base,'"');
Params := Params + ' ' + AnsiQuotedStr(Destino,'"');
ShellExecute(Application.Handle, nil,Pchar(RutaGbak), Pchar(Params),Pchar(ExtractFilePath(RutaGbak)), 0);
end;
end;
Donde Base=PathAplicacion+'BD.GDB' y Destino es el path donde guardo mi backup cone extensión 'hbkp'
Luego RutaGbak es el path donde está mi gbak.exe y además copié en la misma carpeta fbclient.dll
El archivo se genera sin problemas. Pero cuando lo restaura en realidad los cambios no se reflejan, o sea si modifico algo a propósito y luego restauro la copia anterior sigo viendo la modificación

no se restaura la copia realmente. Esto es lo que hago para restaurar:
Código:
procedure RestaurarBackup (Origen,BaseDestino:String);
var RutaGbak, Params: String;
begin
if FileExists(ExtractFilePath(Application.ExeName) + 'gBak.exe') then begin
RutaGbak:=ExtractFilePath(Application.ExeName) + 'gBak.exe';
Origen:=ExtractShortPathName(Origen);
Params := ' -r ';
Params := Params + ' -user SYSDBA -password masterkey ';
Params := Params + AnsiQuotedStr(Origen,'"');
Params := Params + ' ' + AnsiQuotedStr(BaseDestino,'"');
ShellExecute(Application.Handle, nil,Pchar(RutaGbak), Pchar(Params),Pchar(ExtractFilePath(RutaGbak)), 0);
end;
end;
Donde Origen es donde está el archivo '.hbkp' y BaseDestino es el nombre que debe tener la BD: PathAplicacion+'BD.gdb'
Este metodo RestaurarBackUp es llamado desde este:
Código:
procedure TFormPrincipal.RestaurarBasedeDatos1Click(Sender: TObject);
begin
if MessageDlg('Ud está por restaurar la Base de Datos. ¿Desea continuar?',mtWarning,[mbOk,mbNo],0)=mrOk then begin
FormPrincipal.BD.Close;
OpenDAbrir.InitialDir:=PathAplicacion;
if OpenDAbrir.Execute then begin
RestaurarBackup(OpenDAbrir.FileName,PathAplicacion+'BDHome.gdb');
FormPrincipal.BDHome.Open;
if FormPrincipal.BD.TestConnected then begin
FormPrincipal.BD.Open;
ShowMessage('La Base de Datos se restauró correctamente.');
end
else
ShowMessage('La Base de Datos no pudo restaurarse.');
end;
end;
end;
Donde cierro la base, y luego la vuelvo a abrir y testear la conexión.
¿Qué puede suceder que no restaure la copia? Si alguien me puede dar una mano estaré muy agradecida!!
Saludos!