f_DataBack.pas
上传用户:lcqxtx
上传日期:2013-02-15
资源大小:530k
文件大小:5k
源码类别:

企业管理

开发平台:

Delphi

  1. unit f_DataBack;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5.   Dialogs, ComCtrls, StdCtrls, Buttons, ExtCtrls;
  6. type
  7.   TDataBack = class(TForm)
  8.     PanelBkGnd: TPanel;
  9.     Label5: TLabel;
  10.     Label6: TLabel;
  11.     Panel_button: TPanel;
  12.     Bevel1: TBevel;
  13.     BackData: TBitBtn;
  14.     RecoverData: TBitBtn;
  15.     CancelBtn: TBitBtn;
  16.     Edit_path: TEdit;
  17.     BrowseBtn: TButton;
  18.     OpenDialog1: TOpenDialog;
  19.     a1: TAnimate;
  20.     procedure BrowseBtnClick(Sender: TObject);
  21.     procedure Edit_pathChange(Sender: TObject);
  22.     procedure FormCreate(Sender: TObject);
  23.     procedure BackDataClick(Sender: TObject);
  24.     procedure CancelBtnClick(Sender: TObject);
  25.     procedure RecoverDataClick(Sender: TObject);
  26.   private
  27.     { Private declarations }
  28.   public
  29.     { Public declarations }
  30.         B_showmessage: boolean;
  31.   end;
  32. var
  33.   DataBack: TDataBack;
  34. implementation
  35. uses f_SelectDir, data_1;
  36. {$R *.dfm}
  37. procedure TDataBack.BrowseBtnClick(Sender: TObject);
  38. begin
  39.  Application.CreateForm(TSelectDir, SelectDir); //显示路径选择窗体
  40.   SelectDir.DriveComboBox1.Text := ExtractFileDrive(Edit_path.Text);
  41.   if (FileExists(Edit_path.Text)) then //检测路径是否存在
  42.     SelectDir.DirectoryListBox1.Directory := Edit_path.Text;
  43.   if (SelectDir.ShowModal = mrOK) then //当返回值为mrOK时,得到选择的路径
  44.     Edit_path.Text := SelectDir.Label3.Caption + 'ERP' +
  45.       formatdatetime('yyyymmdd', date) + '.back';
  46.   SelectDir.free;
  47. end;
  48. procedure TDataBack.Edit_pathChange(Sender: TObject);
  49. begin
  50.   if trim(Edit_path.Text) <> '' then
  51.     BackData.Enabled := True
  52.   else
  53.     RecoverData.Enabled := False; //当路径框中为空时候, 恢复数据不可用
  54. end;
  55. procedure TDataBack.FormCreate(Sender: TObject);
  56. var
  57.   SourcePath: string;
  58. begin
  59.   SELF.Caption := application.Title + ' - 数据备份';
  60.   B_showmessage := true;
  61.   SourcePath := ExtractFileDir(Application.ExeName);
  62.   //取得应用程序路径
  63.   if (StrLen(PChar(SourcePath)) <> 3) then
  64.     SourcePath := SourcePath + '';
  65.   Edit_path.Text := SourcePath + 'BACKUPDATAERP' + formatdatetime('yyyymmdd',
  66.     date) + '.back';
  67.   //设置路径名+文件名
  68. end;
  69. procedure TDataBack.BackDataClick(Sender: TObject);
  70. begin
  71.  self.Caption := '正在备份数据....';
  72.   a1.Active := true;
  73.   data1.cback.CommandText := 'backup database erp to disk=''' + Edit_path.Text +
  74.     ''''; //备份数据库命令语句
  75.   try
  76.     data1.cback.Execute;
  77.     // 执行备份
  78.     showmessage('      备份成功!');
  79.     a1.Active := false;
  80.   except
  81.     showmessage('      备份失败!');
  82.     a1.Active := false;
  83.   end;
  84.   self.Caption := '数据备份和恢复';
  85. end;
  86. procedure TDataBack.CancelBtnClick(Sender: TObject);
  87. begin
  88.  ModalResult := mrCancel;
  89. end;
  90. procedure TDataBack.RecoverDataClick(Sender: TObject);
  91. var
  92.   DataPath: string;
  93. begin
  94.   self.Caption := '正在恢复数据....';
  95.   try
  96.      data1.database1.Close;
  97.      data1.database1.Connected := false;
  98.   except
  99.     MessageBox(0, '关闭数据库错误', '错误', MB_OK + MB_ICONSTOP + MB_TOPMOST);
  100.   end;
  101.   OpenDialog1.Filter := '备份文件 (*.back)|*.back|所有文件 (*.*)|*.*';
  102.   //设置备份文件后缀
  103.   OpenDialog1.InitialDir := ExtractFileDir(Application.ExeName) + 'backupdata';
  104.   //设置备份路径
  105.   if OpenDialog1.Execute then
  106.     DataPath := OpenDialog1.FileName;
  107.   if DataPath <> '' then
  108.   begin
  109.     if
  110.       application.MessageBox('此操作将使上次备份以来的所有数据丢失,是否继续?',
  111.       '恢复数据', MB_OKCANCEL) = idOK then
  112.     begin
  113.       a1.Active := true;
  114.       data1.backconn.Connected := True;
  115.       data1.cback.Connection :=  data1.backconn;
  116.       data1.cback.CommandText :=
  117.         'ALTER DATABASE erp SET OFFLINE WITH ROLLBACK IMMEDIATE'; //切断连接
  118.      data1.cback.Execute;
  119.        data1.cback.CommandText := 'restore database erp from disk=''' + DataPath +
  120.         '''' + ' with replace'; //恢复数据命令语句
  121.       try
  122.         try
  123.            data1.cback.Execute;
  124.           //执行恢复过程
  125.           showmessage('    恢复成功!');
  126.         except
  127.           showmessage('数据库正在被使用!请确定已关闭其它使用该数据库程序!');
  128.           showmessage('    恢复失败!');
  129.         end;
  130.       finally
  131.         a1.Active := false;
  132.         data1.cback.CommandText :=
  133.           'ALTER DATABASE erp SET ONLINE WITH ROLLBACK IMMEDIATE'; //重新连接数据库
  134.          data1.cback.Execute;
  135.         // 关闭临时数据库
  136.          data1.backconn.Connected := False;
  137.         // 打开数据库
  138.         { data1.ClientFamily.CommandText := 'select * from ClientFamilyTable'; }
  139.         data1.database1.Connected := True;
  140.         try
  141.           // 打开各个数据表是否有错误
  142.         // data1.adoreader.Open;
  143.          data1.ado_tab.Open;
  144.          // data1.adobooks.Open;
  145.          { adodm.Toper.Open;
  146.           adodm.Tuser.Open;
  147.           adodm.ZHBX.Open;
  148.           adodm.Model.Open;
  149.           adodm.ClientFamily.Open;
  150.           adodm.ChargeItem.Open;
  151.           adodm.ClientRoom.Open;
  152.           adodm.Charge.Open;
  153.           adodm.ClientPay.Open;
  154.           adodm.ClientAdvance.Open;     }
  155.         except
  156.           showmessage('程序运行发生不可预知错误,请重新启动程序!');
  157.           //结束该程序
  158.           Application.Terminate;
  159.         end;
  160.       end;
  161.     end;
  162.   end;
  163.   self.Caption := '数据备份和恢复';
  164. end;
  165. end.