Ver Mensaje Individual
  #17  
Antiguo 06-07-2012
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Reputación: 23
José Luis Garcí Va camino a la fama
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);
//------------------------------------------------------------------------------
//*************************************************************[ Restaurar BD ]****
//------------------------------------------------------------------------------
function ProgressRoutine(TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred: LARGE_INTEGER; dwStreamNumber, dwCallbackReason: DWORD; hSourceFile, hDestinationFile: THandle; lpData: Pointer): DWORD; stdcall;
//------------------------------------------------------------------------------
//  Funcion del compañero escafandra bajado de
//  http://www.delphiaccess.com/forum/tr...eso-en-delphi/
//------------------------------------------------------------------------------
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  //Si deseamos hacer una copia del original
    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';
//        Edit3.Text:= '"'+Edit3.Text + '" ';
        lpParameters:= PChar('-r -v -p 8192 -user SYSDBA -password "masterkey" "'+ Edit3.Text +'" "'+Edit4.Text+'"');
//        if RadioGroup1.ItemIndex=0 then lpDirectory:= PChar(GetEnvironmentVariable('ProgramFiles')+'\Firebird\Firebird_2_1\bin')
//                                   else lpDirectory:= PChar(GetEnvironmentVariable('ProgramFiles')+'\Firebird\Firebird_2_5\bin');
         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.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita