Tutorial: Programa
para BackUp E Restore(Copiar e restaurar)
Ola a todos!
Esse é a minha
quarta postagem desse blog. E resolvi mostrar com construir um
aplicativo de back-up e Restore, para banco de dados Firebird e
Interbase.
Para iniciar nossa
aplicação, vamos precisar dos seguintes componentes. 1
TpageControl. Ajuste a propiedade align para alclient:
fig
01
Adicione três Tabsheet, para
isso clique com o botão direito do mouse sobre o Pagecontrol e
selecione New Page :
fig
02
Repita o processo
para cria as três que precisaremos. No final renomeie e deixe com a
tela abaixo. Salve com o nome que desejar:
fig
03
Adicione agora mais
3 Edits, 1 DriveComboBox, 1 DirectListbox, 1 PopupMenu, 1 OpenDialog,
2 botoes(Tanto faz um Tbutton, ou SpeedButton) e 1 campo memo. Agora
vamos para os componentes da paleta Intebase, seleciones os seguintes
componentes: IbBackUpService, 1 IbBackupRestore. Deixe como a imagem
abaixo:
fig
04
Agora que terminamos o a
janela de backup. Vamos da inicio a codificação.
1 Clique na propriedade
DirList do DriveComboBox1 e selecione
DirectoryListBox1.
2 No evento Onclick
do DirectoryListBox1 adicione o seguinte codigo:
Edit3.Text :=
DirectoryListBox1.Directory+'\'+Edit2.Text;
Explicando:
No edit 2 você
digita o nome do seu backup ou deixa o nome padrão que ira aparecer,
assim que nos avançarmos no codigo. Na edit3 aparece o local que
você escolheu para o backup
3. No evento onClick do
bitBtn1, insira o seguinte código:
if
OpenDialog1.Execute then
Edit1.Text :=
OpenDialog1.FileName;
Edit2.Text :=
'backup'+formatdatetime('ddmmyy', date)+'.gbk'; // adiciona a data
como nome padrão do backUo
BitBtn2.Enabled :=
true;
end;
fig
05
Explicando:
if
OpenDialog1.Execute then – Executa o Opendialog;
Edit1.Text :=
OpenDialog1.FileName; - Pega o caminho do arquivo e joga no
edit1;
Edit2.Text
:= 'backup'+formatdatetime('ddmmyy', date)+'.gbk'; -
Define o nome padrão do
backup como sendo a data atual do computador + a extensão gbk, que a
extensão padrão para backups. Dessa forma outros aplicativos de
backup de banco de dados também irão reconhecer o seu.
4. No evento onclick do botão
bitBtn2, adicione o seguinte código:
fig 06
procedure
TfrmBackUp.BitBtn2Click(Sender: TObject);
begin
if Edit1.Text = ''
then
begin
ShowMessage('Arquivo
de BackUp não informado. Por favor informe o aqruivo!!!');
end
else
try
Screen.Cursor :=
crHourGlass;// muda o cursos do mouse
with IBBackupService1
do // inicia o backup
begin
LoginPrompt :=
false;
Active := true;
Verbose :=
true;
DatabaseName :=
edit1.Text;
BackupFile.Add(DirectoryListBox1.Directory+'\'+edit2.Text);
ServiceStart;
//inicia o backup
while not Eof do
begin
memo1.Lines.Add(GetNextLine)
// mostra o andamento no memo1.text
end;
end;
finally
showMessage('BackUp
efetuado com sucesso');// infomra se o processo ocorreu com sucesso
Screen.Cursor :=
crDefault;
end;
Application.ProcessMessages;
end;
Agora que já temos nossa
codificação montada, é necessário configura os componestes da
paleta IBBackupService1 e IBRestore1.
1. Clique no IBBackupService1,
faças as seguintes alterações, como mostra a figura a seguinte:
Deixe a propriedade
active como FALSE;
ServeName como LOCALHOST;
Protocol como TCP;
ServerType com IBServer;
Login Prompt como FALSE;
fig 07
Pronto nossa tela de BACKUP
esta pronta, vamos dar inicio a tela de Restore.
Clique na opção restauração
no formulario.
Adicione 3 bitBtn, duas Edits
e 1 Memo.
Deixe a tela com a seguir:
fig 08
1. No evento onClick do
bitBtn3, insira o seguinte codigo:
procedure
TfrmBackUp.BitBtn3Click(Sender: TObject);
begin
if OpenDialog1.Execute
then
begin
Edit3.Text :=
OpenDialog1.FileName;
end;
BitBtn5.Enabled
:= true;
BitBtn4.Enabled
:= true;
end;
Nesse evento você deve
informa qual a origem do backup, ou seja, onde o arquivo de backup se
encontra.
Fig 09
2. No evento onClick do
bitBtn4, adicione o seguinte codigo:
procedure
TfrmBackUp.BitBtn5Click(Sender: TObject);
begin
OpenDialog1.InitialDir
:= ExtractFilePath(Application.ExeName); // extrai o camino do
aplicativo. Você tambem pode mudar essa opção.
if OpenDialog1.Execute
then
edit5.Text
:= OpenDialog1.FileName;
end;
3.
No evento do botão bitBtn4(Iniciar Restauração), digite o seguinte
código:
procedure
TfrmBackUp.BitBtn4Click(Sender: TObject);
begin
try
Screen.Cursor :=
crHourGlass;
with IBRestoreService1
do // inicia a restauração
begin
Attach;
DatabaseName.add(edit5Text);
// pego o caminho do bd
BackupFile.Add(edit4.Text);
Active :=
true;
Verbose :=
true; // serve para mostrar o andamento do processo no memo2.text
Options
:=[Replace];
ServiceStart;
//inicia a operação
while not Eof
do
begin
memo2.Lines.Add(GetNextLine)
// mostra o andamento
end;
end;
finally
showMessage('Restauração
efetuado com sucesso');
Screen.Cursor :=
crDefault;
end;
Application.ProcessMessages;
// fim do processo
end;
Configure o OpenDialog1.
Clique no propiedade Filter. E configure com mostra a imagem a
seguir:
Agora é só a tela de
créditos, faça a seu gosto coloque o seu nome, ou sua empresa, seu
logotipo, isto é, se for de seu agrado:
Segue o código fonte do
aplicativo completo para analisarem.
unit UBackUp;
interface
uses
Winapi.Windows,
Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics,
Vcl.Controls,
Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons, Vcl.ComCtrls,
IBServices,
Vcl.FileCtrl, IBFilterDialog, Vcl.Menus, Vcl.Imaging.jpeg,
Vcl.ExtCtrls;
type
TfrmBackUp =
class(TForm)
IBBackupService1:
TIBBackupService;
IBRestoreService1:
TIBRestoreService;
PageControl1:
TPageControl;
TabSheet1:
TTabSheet;
TabSheet2:
TTabSheet;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
OpenDialog1:
TOpenDialog;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
Edit3: TEdit;
Edit4: TEdit;
Label3: TLabel;
Label4: TLabel;
DriveComboBox1:
TDriveComboBox;
DirectoryListBox1:
TDirectoryListBox;
Edit2: TEdit;
Memo1: TMemo;
Label5: TLabel;
Edit5: TEdit;
Label6: TLabel;
Memo2: TMemo;
Label7: TLabel;
PopupMenu1:
TPopupMenu;
Novapasta1:
TMenuItem;
DefinirpastaparaoRestaurao1:
TMenuItem;
BitBtn5: TBitBtn;
TabSheet3:
TTabSheet;
Memo3: TMemo;
Image1: TImage;
Label8: TLabel;
procedure
BitBtn1Click(Sender: TObject);
procedure
BitBtn5Click(Sender: TObject);
procedure
DirectoryListBox1Click(Sender: TObject);
procedure
BitBtn2Click(Sender: TObject);
procedure
BitBtn3Click(Sender: TObject);
procedure
BitBtn4Click(Sender: TObject);
procedure
Novapasta1Click(Sender: TObject);
procedure
TabSheet1Show(Sender: TObject);
procedure
TabSheet2Resize(Sender: TObject);
procedure
FormShow(Sender: TObject);
private
{ Private
declarations }
public
{ Public
declarations }
end;
var
frmBackUp: TfrmBackUp;
implementation
{$R *.dfm}
uses UProc_Func;
procedure
TfrmBackUp.BitBtn1Click(Sender: TObject);
begin
if OpenDialog1.Execute
then
Edit1.Text :=
OpenDialog1.FileName;
Edit5.Text :=
'backup'+formatdatetime('ddmmyy', date)+'.gbk';
BitBtn2.Enabled :=
true;
end;
procedure
TfrmBackUp.BitBtn2Click(Sender: TObject);
begin
if Edit1.Text = ''
then
begin
ShowMessage('Arquivo
de BackUp não informado. Por favor informe o aqruivo!!!');
end
else
try
Screen.Cursor :=
crHourGlass;
with IBBackupService1
do
begin
// ServerName :=
'localhost';
LoginPrompt :=
false;
//
Params.Add('user_name=SYSDBA');
//
Params.add('password=masterkey');
Active := true;
Verbose :=
true;
DatabaseName :=
edit1.Text;
BackupFile.Add(DirectoryListBox1.Directory+'\'+edit5.Text);
ServiceStart;
while not Eof do
begin
memo1.Lines.Add(GetNextLine)
end;
end;
finally
showMessage('BackUp
efetuado com sucesso');
Screen.Cursor :=
crDefault;
end;
Application.ProcessMessages;
end;
procedure
TfrmBackUp.BitBtn3Click(Sender: TObject);
begin
if OpenDialog1.Execute
then
begin
Edit3.Text :=
OpenDialog1.FileName;
end;
BitBtn5.Enabled
:= true;
BitBtn4.Enabled
:= true;
end;
procedure
TfrmBackUp.BitBtn5Click(Sender: TObject);
begin
OpenDialog1.InitialDir
:= ExtractFilePath(Application.ExeName);
if OpenDialog1.Execute
then
edit4.Text :=
OpenDialog1.FileName;
end;
procedure
TfrmBackUp.DirectoryListBox1Click(Sender: TObject);
begin
Edit2.Text :=
DirectoryListBox1.Directory+'\'+Edit5.Text;
end;
procedure
TfrmBackUp.FormShow(Sender: TObject);
begin
Edit2.Text :=
DirectoryListBox1.Directory;
Edit1.Text := cam_bd;
end;
procedure
TfrmBackUp.Novapasta1Click(Sender: TObject);
var
pasta:string;
begin
pasta:='';
pasta:=DirectoryListBox1.Directory+'\'+InputBox('Digite
o nome para a nova pasta','','');
forceDirectories(Pasta);
DirectoryListBox1.Update;
end;
procedure
TfrmBackUp.TabSheet1Show(Sender: TObject);
begin
Novapasta1.Enabled:=true;
DefinirpastaparaoRestaurao1.Enabled
:= false;
end;
procedure
TfrmBackUp.TabSheet2Resize(Sender: TObject);
begin
Novapasta1.Enabled:=false;
DefinirpastaparaoRestaurao1.Enabled
:= true;
end;
procedure
TfrmBackUp.BitBtn4Click(Sender: TObject);
begin
try
Screen.Cursor :=
crHourGlass;
with IBRestoreService1
do
begin
Attach;
DatabaseName.add(edit4.Text);
BackupFile.Add(edit3.Text);
Active :=
true;
Verbose :=
true;
Options
:=[Replace];
ServiceStart;
while not Eof
do
begin
memo2.Lines.Add(GetNextLine)
end;
end;
finally
showMessage('Restauração
efetuado com sucesso');
Screen.Cursor :=
crDefault;
end;
Application.ProcessMessages;
end;
end.