Problemas com sistema de backup
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:
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:
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?
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
Curtidas 0
Melhor post
Raimundo Pereira
13/11/2018
Bom dia!
Testei aqui.
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!
GOSTEI 1
Mais Respostas
Edilson Santiago
12/11/2018
Obs. onde eu digitei SGE\\ o correto é SGE - Sistema de Gestão Eclesiástica. Foi erro de digitação aqui no devmedia.
GOSTEI 0