unit RestaurarCopiaSeguridad; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, cxMemo, cxControls, cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxButtonEdit, StdCtrls, RdxBotones, RdxBarras, ExtCtrls, RdxPaneles, Configuracion, RdxShape, RdxFrame, IBServices, Entidades, cxProgressBar; type TfrRestaurarCopiaSeguridad = class(TRdxFrame) Titulo: TRdxBarraSuperior; brInferior: TRdxBarraInferior; bCerrar: TRdxBoton; ArchivoCopiaSeguridad: TcxButtonEdit; Label3: TLabel; bRestore: TRdxBoton; eMensaje: TLabel; pnlAtencion: TRdxShape; Label1: TLabel; Label2: TLabel; IBRestoreService1: TIBRestoreService; OpenDialog1: TOpenDialog; cxProgressBar1: TcxProgressBar; procedure ArchivoCopiaSeguridadPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); procedure bCerrarClick(Sender: TObject); procedure bRestoreClick(Sender: TObject); procedure ArchivoCopiaSeguridadExit(Sender: TObject); private procedure RestaurarBackup; protected function CambiarEntidad(EntidadAnterior, Entidad : TRdxEntidad): Boolean; override; end; var frRestaurarCopiaSeguridad: TfrRestaurarCopiaSeguridad; implementation {$R *.dfm} uses DateUtils, Math, Mensajes, StrFunc, BaseDatos, IB; procedure TfrRestaurarCopiaSeguridad.ArchivoCopiaSeguridadPropertiesButtonClick( Sender: TObject; AButtonIndex: Integer); begin OpenDialog1.FileName := ArchivoCopiaSeguridad.Text; if OpenDialog1.Execute then begin ArchivoCopiaSeguridad.Text := OpenDialog1.FileName; bRestore.SetFocus; end; end; procedure TfrRestaurarCopiaSeguridad.bCerrarClick(Sender: TObject); begin CloseFrame; end; procedure TfrRestaurarCopiaSeguridad.bRestoreClick(Sender: TObject); begin if EsCadenaVacia(ArchivoCopiaSeguridad.Text) then begin VerMensaje('Debe indicar la ruta y el nombre del archivo de la copia de seguridad a restaurar.'); ArchivoCopiaSeguridad.SetFocus; Exit; end; if not FileExists(ArchivoCopiaSeguridad.Text) then begin VerMensaje('El archivo no se encuentra. Asegúrese de que ha escrito correctamente la ruta y el nombre.'); ArchivoCopiaSeguridad.SetFocus; Exit; end; RestaurarBackup; end; procedure TfrRestaurarCopiaSeguridad.ArchivoCopiaSeguridadExit( Sender: TObject); begin if not EsCadenaVacia(ArchivoCopiaSeguridad.Text) then begin if Pos('.gbk', ArchivoCopiaSeguridad.Text) = 0 then ArchivoCopiaSeguridad.Text := ArchivoCopiaSeguridad.Text + '.gbk'; end; end; procedure TfrRestaurarCopiaSeguridad.RestaurarBackup; begin with IBRestoreService1 do begin LoginPrompt := False; Params.Add('user_name=sysdba'); Params.Add('password=masterkey'); Options := [Replace, UseAllSpace]; PageBuffers := 3000; PageSize := 4096; Protocol := TCP; ServerName := dmBaseDatos.NombreServidor; DatabaseName.Clear; DatabaseName.Add(dmBaseDatos.RutaBD); BackupFile.Clear; BackupFile.Add(ArchivoCopiaSeguridad.Text); try Verbose := True; Active := True; dmBaseDatos.Desconectar; ServiceStart; eMensaje.Visible := True; cxProgressBar1.Visible := True; cxProgressBar1.Position := 0; eMensaje.Caption := 'Espere, por favor...'; eMensaje.Update; while not EOF do begin GetNextLine; cxProgressBar1.Position := cxProgressBar1.Position + 1; end; Active := False; dmBaseDatos.Conectar; cxProgressBar1.Position := cxProgressBar1.Properties.Max; eMensaje.Caption := 'Copia de seguridad restaurada correctamente.'; VerMensaje('Copia de seguridad restaurada correctamente.'); bCerrar.SetFocus; except on E : EIBError do begin Active := False; VerMensaje('Algún usuario está conectado a la base de datos. Para poder restaurar la copia de seguridad es necesario que no haya nadie más aparte de usted que esté utilizando FactuGES.'); dmBaseDatos.Conectar; end; end; end; end; function TfrRestaurarCopiaSeguridad.CambiarEntidad(EntidadAnterior, Entidad: TRdxEntidad): Boolean; begin inherited CambiarEntidad(EntidadAnterior, Entidad); ConfigurarFrame(Self, Self.Entidad); end; end.