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

📄 f_databack.pas

📁 使用Delphi开发的成本管理系统
💻 PAS
字号:
unit f_DataBack;

interface

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

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

var
  DataBack: TDataBack;

implementation

uses f_SelectDir, data_1;

{$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 + '\cbxt' +
      formatdatetime('yyyymmdd', date) + '.back';
  SelectDir.free;
end;
procedure TDataBack.Edit_pathChange(Sender: TObject);
begin
  if trim(Edit_path.Text) <> '' then
    BackData.Enabled := True
  else
    RecoverData.Enabled := False; //当路径框中为空时候, 恢复数据不可用
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\cbxt' + formatdatetime('yyyymmdd',
    date) + '.back';
  //设置路径名+文件名
end;
procedure TDataBack.BackDataClick(Sender: TObject);
begin
 self.Caption := '正在备份数据....';
  a1.Active := true;
  data1.cback.CommandText := 'backup database cbxt to disk=''' + Edit_path.Text +
    ''''; //备份数据库命令语句
  try
    data1.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
     data1.database1.Close;
     data1.database1.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;
      data1.backconn.Connected := True;
      data1.cback.Connection :=  data1.backconn;
      data1.cback.CommandText :=
        'ALTER DATABASE cbxt SET OFFLINE WITH ROLLBACK IMMEDIATE'; //切断连接
     data1.cback.Execute;
       data1.cback.CommandText := 'restore database cbxt from disk=''' + DataPath +
        '''' + ' with replace'; //恢复数据命令语句
      try
        try
           data1.cback.Execute;
          //执行恢复过程
          showmessage('    恢复成功!');
        except
          showmessage('数据库正在被使用!请确定已关闭其它使用该数据库程序!');
          showmessage('    恢复失败!');
        end;
      finally
        a1.Active := false;
        data1.cback.CommandText :=
          'ALTER DATABASE cbxt SET ONLINE WITH ROLLBACK IMMEDIATE'; //重新连接数据库
         data1.cback.Execute;
        // 关闭临时数据库
         data1.backconn.Connected := False;
        // 打开数据库
        { data1.ClientFamily.CommandText := 'select * from ClientFamilyTable'; }
        data1.database1.Connected := True;
        try
          // 打开各个数据表是否有错误
         data1.ado_tab.Open;
         data1.ado_yhgl.Open;
         data1.ado_active.Open;
         data1.ado_resourse.Open;
         data1.ado_workshop.Open;
         data1.ado_product.Open;
         data1.ado_workshop_item.Open;
         data1.ado_cost_active.Open;
         data1.ado_material.Open;
         data1.ado_labor.Open;
         data1.ado_material_master.Open;
         data1.ado_overhead_distribute.Open;
         data1.ado_labormaster.Open;
         data1.ado_workshop_master.Open;
         data1.ado_product_master.Open;
         data1.ado_cost_master.Open;
         data1.ado_resourse_distribute.Open;
         data1.ado_product_profit_cost.Open;
        except
          showmessage('程序运行发生不可预知错误,请重新启动程序!');
          //结束该程序
          Application.Terminate;
        end;
      end;
    end;
  end;
  self.Caption := '数据备份和恢复';
end;

end.

⌨️ 快捷键说明

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