?? f_databack.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 + '\ERP' +
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; //當路徑框中為空時候, 恢復數(shù)據(jù)不可用
end;
procedure TDataBack.FormCreate(Sender: TObject);
var
SourcePath: string;
begin
SELF.Caption := application.Title + ' - 數(shù)據(jù)備份';
B_showmessage := true;
SourcePath := ExtractFileDir(Application.ExeName);
//取得應用程序路徑
if (StrLen(PChar(SourcePath)) <> 3) then
SourcePath := SourcePath + '\';
Edit_path.Text := SourcePath + 'BACKUPDATA\ERP' + formatdatetime('yyyymmdd',
date) + '.back';
//設置路徑名+文件名
end;
procedure TDataBack.BackDataClick(Sender: TObject);
begin
self.Caption := '正在備份數(shù)據(jù)....';
a1.Active := true;
data1.cback.CommandText := 'backup database erp to disk=''' + Edit_path.Text +
''''; //備份數(shù)據(jù)庫命令語句
try
data1.cback.Execute;
// 執(zhí)行備份
showmessage(' 備份成功!');
a1.Active := false;
except
showmessage(' 備份失敗!');
a1.Active := false;
end;
self.Caption := '數(shù)據(jù)備份和恢復';
end;
procedure TDataBack.CancelBtnClick(Sender: TObject);
begin
ModalResult := mrCancel;
end;
procedure TDataBack.RecoverDataClick(Sender: TObject);
var
DataPath: string;
begin
self.Caption := '正在恢復數(shù)據(jù)....';
try
data1.database1.Close;
data1.database1.Connected := false;
except
MessageBox(0, '關閉數(shù)據(jù)庫錯誤', '錯誤', 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('此操作將使上次備份以來的所有數(shù)據(jù)丟失,是否繼續(xù)?',
'恢復數(shù)據(jù)', MB_OKCANCEL) = idOK then
begin
a1.Active := true;
data1.backconn.Connected := True;
data1.cback.Connection := data1.backconn;
data1.cback.CommandText :=
'ALTER DATABASE erp SET OFFLINE WITH ROLLBACK IMMEDIATE'; //切斷連接
data1.cback.Execute;
data1.cback.CommandText := 'restore database erp from disk=''' + DataPath +
'''' + ' with replace'; //恢復數(shù)據(jù)命令語句
try
try
data1.cback.Execute;
//執(zhí)行恢復過程
showmessage(' 恢復成功!');
except
showmessage('數(shù)據(jù)庫正在被使用!請確定已關閉其它使用該數(shù)據(jù)庫程序!');
showmessage(' 恢復失敗!');
end;
finally
a1.Active := false;
data1.cback.CommandText :=
'ALTER DATABASE erp SET ONLINE WITH ROLLBACK IMMEDIATE'; //重新連接數(shù)據(jù)庫
data1.cback.Execute;
// 關閉臨時數(shù)據(jù)庫
data1.backconn.Connected := False;
// 打開數(shù)據(jù)庫
{ data1.ClientFamily.CommandText := 'select * from ClientFamilyTable'; }
data1.database1.Connected := True;
try
// 打開各個數(shù)據(jù)表是否有錯誤
// data1.adoreader.Open;
data1.ado_tab.Open;
// data1.adobooks.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('程序運行發(fā)生不可預知錯誤,請重新啟動程序!');
//結束該程序
Application.Terminate;
end;
end;
end;
end;
self.Caption := '數(shù)據(jù)備份和恢復';
end;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -