unit UBackup;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, FileCtrl, Gauges, Buttons, backup,Bde,DBTables;

type
  TFBackup = class(TForm)
    GroupBox1: TGroupBox;
    RBManual: TRadioButton;
    RBAuto: TRadioButton;
    SalvaDialogo: TSaveDialog;
    BackupFile: TBackupFile;
    BtRestaura: TSpeedButton;
    BTBackup: TSpeedButton;
    Gauge1: TGauge;
    FileListBox1: TFileListBox;
    AbreDialogo: TOpenDialog;
    procedure BackupFileProgress(Sender: TObject; Filename: String;
      Percent: TPercentage; var Continue: Boolean);
    procedure FormCreate(Sender: TObject);
    procedure BTBackupClick(Sender: TObject);
    procedure BackupFileError(Sender: TObject; const Error: Integer;
      ErrString: String);
    procedure BtRestauraClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
  function GetAliasPath( sAlias : String) : String;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FBackup: TFBackup;

implementation

uses UDataModulo;

{$R *.dfm}
function TFBackup.GetAliasPath( sAlias : String) : String;
var
Database:TDatabase;
PDir:Pchar;
Dir:String;
begin
  try
    Database:=TDatabase.Create(nil);
    with Database do
    begin
      try
        PDir:=StrAlloc(255);
        AliasName:=sAlias;
        DatabaseName:='temp';
        Connected:=True;
        DbiGetDirectory(Handle,True,Pdir);
        Dir:=StrPas(Pdir);
        Result:=Dir;
        Connected:=False;
      except
        on E:EOutOfMemory do
          MessageDlg('Problemas na memória'+E.Message,MtError,[MbOk],0);
      end;
    end;
  finally
    StrDispose(PDir);
    Database.Free;
  end;
end;

procedure TFBackup.BackupFileProgress(Sender: TObject; Filename: String;
  Percent: TPercentage; var Continue: Boolean);
begin
  Gauge1.Progress:=Percent;
end;

procedure TFBackup.FormCreate(Sender: TObject);
begin
  FileListBox1.Items.Clear;
  Modulo.TbServico.Close;
  Modulo.TbValores.Close;
end;

procedure TFBackup.BTBackupClick(Sender: TObject);
var
dir,msg:String;
begin
  dir:= ExtractFilePath(ParamStr(0));
  try
    FileListBox1.Items.Clear;
    BtBackup.Enabled:=False;
    BtRestaura.Enabled:=False;
    FileListBox1.Items.Add(GetAliasPath('DBestacionamento')+'*.*');
    if RBAuto.Checked=True then
    begin
      if Application.MessageBox('Realizar Back-up automático?',
                                'Back-up Automático',0+4+32)=6 then
      begin

        if BackupFile.Backup(FileListBox1.Items, dir+'tabs_Bak.bck') then
        begin
          msg:='Arquivo gravado em'+#13+'"'+dir+'"';
          Application.MessageBox(Pchar(msg),'Back-up automático efetuado',0+64);
        end;
      end;
    end;
    if RBManual.Checked=True then
      if SalvaDialogo.Execute then
       if BackupFile.Backup(FileListBox1.Items, SalvaDialogo.FileName) then
         Application.MessageBox('Back-up efetuado com sucesso.',
                                 'Back-up efetuado',0+64);

  finally
    BtBackup.Enabled:=True;
    BtRestaura.Enabled:=True;
  end;

end;

procedure TFBackup.BackupFileError(Sender: TObject; const Error: Integer;
  ErrString: String);
begin
  Application.MessageBox('Não foi possível realizar o Back-up.','Atenção',0+16);
end;

procedure TFBackup.BtRestauraClick(Sender: TObject);
var
dir:String;
begin
 try
   dir:= ExtractFilePath(ParamStr(0));
   BtBackup.Enabled:=False;
    BtRestaura.Enabled:=False;
   if RBAuto.Checked=True then
   begin
     if Application.MessageBox('Se optar por sim o Banco de Dados será '+
                               'restaurado conforme a última versão do Back-up '+
                               'Automático.'+#13+'Se você tiver uma versão de '+
                               'Back-up Manual mais recente, é aconselhável '+
                               'restaurá-la ao invés do Automático.',
                               'Realizar Back-up automático?',0+4+32)=6 then
       if BackupFile.Restore(dir+'Tabs_Bak.bck',
                             GetAliasPath('DBestacionamento')) then
         Application.MessageBox('Back-up restaurado com sucesso.',
                                 'Back-up Restaurado',0+64)
       else
         Application.MessageBox('Não foi Possivel restaurar o Banco de dados '+
                                'automaticamente.'+#13+'Tente de forma manual',
                                'A Restauração Falhou',+0+16);


   end;

   if RBManual.Checked=True then
     if AbreDialogo.Execute then
       if BackupFile.Restore(AbreDialogo.FileName,
                             GetAliasPath('DBestacionamento')) then
          Application.MessageBox('Back-up restaurado com sucesso.',
                                 'Back-up Restaurado',0+64)
       else
         Application.MessageBox('Não foi Possivel restaurar o Banco de dados.'
                                +#13+'O arquivo de Back-up pode estar '+
                                'corrompido, ou o disco danificado.'+#13+
                                'Tente outro arquivo.','A Restauração Falhou',
                                 +0+16);

  finally
    BtBackup.Enabled:=True;
    BtRestaura.Enabled:=True;
  end;
end;

procedure TFBackup.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Modulo.TbServico.Open;
  Modulo.TbValores.Open;
end;

end.
