Fórum Problemas com sistema de backup #598562

12/11/2018

0

Olá, amigos, tenho um sistema em delphi 7 com access.
Estou montando um sisteminha de backup do banco de dados, e gostaria de fazer isso com o programa aberto.

Fiz assim:

 procedure Tfrmcopia.EfetuaClick(Sender: TObject);
var
arquivo_original: string;
begin
 arquivo_original := 'C:\\SGE\\BDRIB.mdb';
 If Savedialog1.Execute then
 begin
   if Copyfile(Pchar(arquivo_original),Pchar('backup_'+formatdatetime('DD.MM.YYYY_HH.mm',now)+'.mdb'),True) then
   Showmessage('Backup do banco de dados realizado com sucesso.')
   else
   Showmessage('Erro ao efetuar o Backup. Tente novamente.')
 end;
end;


Dessa forma ele copia o banco de dados para o local que eu selecionei no savedialog, com o nome de "backup+data+hora.mdb". Funciona.

A questão é quando quero restaurar o backup.

Fiz assim:
procedure Tfrmcopia.RestauraClick(Sender: TObject);
begin
  If opendialog1.Execute then
  begin
     datamodule1.ADOConexao.Connected := false;
\\\\muda o nome do atual banco de dados
     RenameFile('C:\\SGE\\BDRIB.mdb','C:\\SGE\\BDRIB_old.mdb'); 
\\\\restaura o backup
     if copyfile(Pchar(Opendialog1.FileName),Pchar('C:\\SGE\\BDRIB.mdb'),True) then
     begin
\\\\se copiou corretamente, apaga o banco de dados original que tinha mudado o nome
     deletefile('C:\\SGE\\BDRIB_old.mdb');
     datamodule1.ADOConexao.Connected := true;
     Showmessage('Backup restaurado com sucesso.');
     end
     else
     begin
\\\\se deu algo errado, restaura o nome do banco de dados original
     RenameFile('C:\\SGE - Sistema de Gestão Eclesiástica\\BDRIB_old.mdb','C:\\SGE - Sistema de Gestão Eclesiástica\\BDRIB.mdb');
     datamodule1.ADOConexao.Connected := true;
     Showmessage('Erro ao efetuar o Backup. Tente novamente.');
     end;
end;
end;


Só que não dá certo. Ele não restaura o bakcup. Sempre retorna erro. Acredito que seja porque o programa está aberto, mas a conexão estava fechada.

Alguém pode ajudar?
Edilson Santiago

Edilson Santiago

Responder

Post mais votado

13/11/2018

Bom dia!
Testei aqui.


procedure TFrmcopia.EfetuaClick(Sender: TObject);
var
Origem  : string;
Destino : string;
begin
Origem := 'C:\\SGE\\BDRIB.mdb';

 SaveDialog1.FileName:='BK_'+formatdatetime('DD_MM_YYYY_HH_mm',now)+'.mdb';
 If Savedialog1.Execute then
 begin
 Destino :=ExtractFilePath(SaveDialog1.FileName)+'BK_'+formatdatetime('DD_MM_YYYY_HH_mm',now)+'.mdb'  ;
 CopyFile(PChar(Origem), PChar(Destino), true);
   if FileExists(Destino) then
   Showmessage('Backup do banco de dados realizado com sucesso.')
   else
   Showmessage('Erro ao efetuar o Backup. Tente novamente.')
   end;
end;

var Arquivo_Selecionado:string;
begin

  If opendialog1.Execute then
  begin
     // 0
     datamodule1.ADOConexao.Connected := false;
     Arquivo_Selecionado:=OpenDialog1.FileName;
     //1º Exclui OLD
     deletefile('C:\\SGE\\BDRIB_old.mdb');
     Sleep(500);

     //2º Renomea o Atual para OLD
     RenameFile('C:\\SGE\\BDRIB.mdb','C:\\SGE\\BDRIB_old.mdb');
     Sleep(500);

     //3º restaura o backup
     if copyfile(Pchar(Arquivo_Selecionado),Pchar('C:\\SGE\\BDRIB.mdb'),True) then
     begin
     Sleep(500);

     //se copiou corretamente, apaga o banco de dados original que tinha mudado o nome
     deletefile('C:\\SGE\\BDRIB_old.mdb');
     datamodule1.ADOConexao.Connected := true;
     Showmessage('Backup restaurado com sucesso.');
     end
     else
     begin
    //se deu algo errado, restaura o nome do banco de dados original
     RenameFile('C:\\SGE\\BDRIB_old.mdb','C:\\SGE\\BDRIB.mdb');
     datamodule1.ADOConexao.Connected := true;
     Showmessage('Erro ao efetuar o Backup. Tente novamente.');
     end;
end;
end;


Espero que ajude!

Raimundo Pereira

Raimundo Pereira
Responder

Gostei + 1

Mais Posts

12/11/2018

Edilson Santiago

Obs. onde eu digitei SGE\\ o correto é SGE - Sistema de Gestão Eclesiástica. Foi erro de digitação aqui no devmedia.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar