⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tdatabackunit.pas

📁 小区物业管理(系统初始用户名:王云。密码:aaa)
💻 PAS
字号:
unit TdataBackUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Buttons, ComCtrls;

type
  TDataBack = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    Label3: TLabel;
    Label4: TLabel;
    Bevel_button: TBevel;
    PanelBkGnd: TPanel;
    Label5: TLabel;
    Label6: TLabel;
    Panel_button: TPanel;
    Bevel1: TBevel;
    Edit_path: TEdit;
    BrowseBtn: TButton;
    BackData: TBitBtn;
    RecoverData: TBitBtn;
    a1: TAnimate;
    CancelBtn: TBitBtn;
    OpenDialog1: TOpenDialog;
    procedure BrowseBtnClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Edit_pathChange(Sender: TObject);
    procedure BackDataClick(Sender: TObject);
    procedure CancelBtnClick(Sender: TObject);
    procedure RecoverDataClick(Sender: TObject);
  private
    { Private declarations }
  public
    B_showmessage: boolean;
    { Public declarations }
  end;

var
  DataBack: TDataBack;

implementation

uses SelectDirUnit, Udm;

{$R *.dfm}

procedure TDataBack.BrowseBtnClick(Sender: TObject);
begin
  Application.CreateForm(TSelectDir, SelectDir); //显示路径选择窗体
  SelectDir.DriveComboBox1.Text := ExtractFileDrive(Edit_path.Text);
  if (FileExists(Edit_path.Text)) then //检测路径是否存在
    SelectDir.DirectoryListBox1.Directory := Edit_path.Text;
  if (SelectDir.ShowModal = mrOK) then //当返回值为mrOK时,得到选择的路径
    Edit_path.Text := SelectDir.Label3.Caption + '\XQ' +
      formatdatetime('yyyymmdd', date) + '.back';
  SelectDir.free;
end;

procedure TDataBack.FormCreate(Sender: TObject);
var
  SourcePath: string;
begin
  SELF.Caption := application.Title + ' - 数据备份';
  B_showmessage := true;
  SourcePath := ExtractFileDir(Application.ExeName);
  //取得应用程序路径
  if (StrLen(PChar(SourcePath)) <> 3) then
    SourcePath := SourcePath + '\';
  Edit_path.Text := SourcePath + 'BACKUPDATA\XQ' + formatdatetime('yyyymmdd',
    date) + '.back';
  //设置路径名+文件名
end;

procedure TDataBack.Edit_pathChange(Sender: TObject);
begin
  if trim(Edit_path.Text) <> '' then
    BackData.Enabled := True
  else
    RecoverData.Enabled := False; //当路径框中为空时候, 恢复数据不可用
end;

procedure TDataBack.BackDataClick(Sender: TObject);
begin
  self.Caption := '正在备份数据....';
  a1.Active := true;
  adodm.cback.CommandText := 'backup database xq to disk=''' + Edit_path.Text +
    ''''; //备份数据库命令语句
  try
    adodm.cback.Execute;
    // 执行备份
    showmessage('      备份成功!');
    a1.Active := false;
  except
    showmessage('      备份失败!');
    a1.Active := false;
  end;
  self.Caption := '数据备份和恢复';
end;

procedure TDataBack.CancelBtnClick(Sender: TObject);
begin
  ModalResult := mrCancel;
end;

procedure TDataBack.RecoverDataClick(Sender: TObject);
var
  DataPath: string;
begin
  self.Caption := '正在恢复数据....';
  try
    adodm.XQconn.Close;
    adodm.XQconn.Connected := false;
  except
    MessageBox(0, '关闭数据库错误', '错误', MB_OK + MB_ICONSTOP + MB_TOPMOST);
  end;

  OpenDialog1.Filter := '备份文件 (*.back)|*.back|所有文件 (*.*)|*.*';
  //设置备份文件后缀
  OpenDialog1.InitialDir := ExtractFileDir(Application.ExeName) + '\backupdata';
  //设置备份路径
  if OpenDialog1.Execute then
    DataPath := OpenDialog1.FileName;
  if DataPath <> '' then
  begin
    if
      application.MessageBox('此操作将使上次备份以来的所有数据丢失,是否继续?',
      '恢复数据', MB_OKCANCEL) = idOK then
    begin
      a1.Active := true;
      ADODM.backconn.Connected := True;
      adodm.cback.Connection := ADODM.backconn;
      adodm.cback.CommandText :=
        'ALTER DATABASE XQ SET OFFLINE WITH ROLLBACK IMMEDIATE'; //切断连接
      adodm.cback.Execute;
      adodm.cback.CommandText := 'restore database XQ from disk=''' + DataPath +
        '''' + ' with replace'; //恢复数据命令语句
      try
        try
          adodm.cback.Execute;
          //执行恢复过程
          showmessage('    恢复成功!');
        except
          showmessage('数据库正在被使用!请确定已关闭其它使用该数据库程序!');
          showmessage('    恢复失败!');
        end;
      finally
        a1.Active := false;
        adodm.cback.CommandText :=
          'ALTER DATABASE XQ SET ONLINE WITH ROLLBACK IMMEDIATE'; //重新连接数据库
        adodm.cback.Execute;
        // 关闭临时数据库
        ADODM.backconn.Connected := False;
        // 打开数据库
        adodm.ClientFamily.CommandText := 'select * from ClientFamilyTable';
        ADODM.XQconn.Connected := True;
        try
          // 打开各个数据表是否有错误
          adodm.YHTS.Open;
          adodm.part.Open;
          adodm.client.Open;
          adodm.Toper.Open;
          adodm.Tuser.Open;
          adodm.ZHBX.Open;
          adodm.Model.Open;
          adodm.ClientFamily.Open;
          adodm.ChargeItem.Open;
          adodm.ClientRoom.Open;
          adodm.Charge.Open;
          adodm.ClientPay.Open;
          adodm.ClientAdvance.Open;
        except
          showmessage('程序运行发生不可预知错误,请重新启动程序!');
          //结束该程序
          Application.Terminate;
        end;
      end;
    end;
  end;
  self.Caption := '数据备份和恢复';
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -