Hola compañeros, en primer lugar he tenido que poner el gbak en el directorio del ejecutable pero fuera de eso, me realiza bien las copias, creo que la diferencia de tamaño se debe a que debe eliminar los espacios en blanco, pero resulta que ahora estoy con la restauración de la copia de seguridad y este es el código que tengo
Código Delphi
[-]procedure TForm1.SpeedButton5Click(Sender: TObject);
function ProgressRoutine(TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred: LARGE_INTEGER; dwStreamNumber, dwCallbackReason: DWORD; hSourceFile, hDestinationFile: THandle; lpData: Pointer): DWORD; stdcall;
var
Value: integer;
begin
Application.ProcessMessages();
if(dwCallbackReason = CALLBACK_CHUNK_FINISHED) then
Form1.ProgressBar1.Position:= (int64(TotalBytesTransferred) * 100) div int64(TotalFileSize);
Result:= PROGRESS_CONTINUE;
end;
var
lpOperation, lpFile, lpParameters, lpDirectory: PChar;
varbPasado:Boolean;
begin
varbPasado:=False;
if (Edit3.Text<>'') and (Edit4.Text<>'') then
begin
if CheckBox1.Checked then begin
Cancel:= false;
CopyFileEx(Fuente, Destino, @ProgressRoutine, nil, @Cancel, 0);
ShowMessage(SysErrorMessage(GetLastError()));
end;
with TPanel.Create(nil) do
try
Caption:= 'Restaurando copia de seguridad, aguarde un momento por favor...';
Font.Size:= 14;
Font.Name:= 'Arial';
Width:= 600;
Height:= 70;
Left:= (Self.ClientWidth - Width) div 2;
Top:= (Self.ClientHeight - Height) div 2;
BevelInner:= bvNone;
BevelOuter:= bvNone;
BevelWidth:= 1;
BorderStyle:= bsSingle;
Ctl3D:= False;
Parent:= Self;
lpOperation:= 'open';
lpFile:= 'gbak.exe';
lpParameters:= PChar('-r -v -p 8192 -user SYSDBA -password "masterkey" "'+ Edit3.Text +'" "'+Edit4.Text+'"');
lpDirectory:=PChar(ExtractFilePath(Application.Name));
ShellExecute(Handle, lpOperation, lpFile, lpParameters, lpDirectory, SW_HIDE);
varbPasado:=true
finally
if varbPasado=true then ShowMessage('Proceso terminado')
else ShowMessage('El fichero ya existe');
Free;
end;
end;
end;
como podréis comprobar, lo primero que hago es una copia del fichero original, con una función de escafandra, luego restauro la base de datos, el problema es que quiero restaurar una base de datos de 126 Mb y al finalizar sigo teniendo una de 3,40 Mb, y el fichero backup (FBK) tiene un tamaño de 9,25 Mb.
Supongo que est mal , no he intentado abrir la BD ya que de momento lo que tengo es la B.D. del programa (126 Mb), la primera copia de esta (3,40 Mb), pero supongo que algo no va bien.
Como siempre gracias por vuestra ayuda.
Casimiro
Cita:
El problema de los espacios en blanco y que debes poner la ruta entre comillas... puedes verlo en mi código
|
Lo comprobé, al igual que he estado mirando tus constantes, probando tú código, pero no encuentro ningún botón para hacer el backup sobre la marcha, se que el nombre es backupsPlanificados, pero echo en falta esto y la posibilidad de restaurar las copias ya echas. Eso si el programa es bueno y muy bien terminado.
Un saludo y gracias por vuestra colaboración y ayuda.