📄 u_data_restore.pas
字号:
unit U_data_restore;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, RzButton, StdCtrls, FileCtrl,ImgList, ComCtrls, RzListVw, RzPrgres;
type
TFrm_data_restore = class(TForm)
Btn_Cancel: TRzBitBtn;
Btn_ok: TRzBitBtn;
ImageList1: TImageList;
FileListBox1: TFileListBox;
Btn_del: TRzBitBtn;
Bar1: TRzProgressBar;
Label1: TLabel;
Timer1: TTimer;
ListView1: TRzListView;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Btn_CancelClick(Sender: TObject);
procedure Btn_okClick(Sender: TObject);
procedure Btn_delClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ListView1Change(Sender: TObject; Item: TListItem;
Change: TItemChange);
procedure Timer1Timer(Sender: TObject);
procedure Add_bak_file;
private
n:integer;
connstr_Restore,connstr:string;
str_bak:string; //存放备份文件名称
public
Function Data_Restore:boolean;
end;
var
Frm_data_restore: TFrm_data_restore;
implementation
uses U_dm;
{$R *.dfm}
//数据恢复函数
Function TFrm_data_restore.Data_Restore:boolean;
var
temp_bak:string;
begin
try
result:=False;
if listview1.SelCount>0 then begin
temp_bak:='d:\backup\'+listview1.Selected.Caption;
//连接数据库
with dm do begin
if Adoconn.Connected then begin
Adoconn.Connected:=False;
Adoconn.KeepConnection:=False;
end;
connstr_restore:='Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=Main;Data Source=(local)';
connstr:='Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=Main;Data Source=(local)';
Adoconn.ConnectionString:=connstr_Restore;
Adoconn.LoginPrompt:=False;
Adoconn.Connected:=true;
//打开数据集
ADOQ.Close;
ADOQ.SQL.Clear;
ADOQ.SQL.Add('restore database main From disk ='''+temp_bak+'''');
ADOQ.ExecSQL;
//重新连接数据库
Adoconn.Connected:=False;
Adoconn.KeepConnection:=False;
Adoconn.ConnectionString:=connstr;
Adoconn.LoginPrompt:=False;
Adoconn.Connected:=true;
end;
Result:=true;
end;
except
Result:=False;
bar1.Percent:=0;
end;
end;
procedure TFrm_data_restore.Add_bak_file;
var
ListItem: TListItem;
I:integer;
begin
FileListBox1.Directory:='d:\backup\';
filelistbox1.Update;
for i:=0 to FileListBox1.Items.Count-1 do begin
listitem:=listview1.items.Add;
listitem.Caption:=FileListBox1.Items.Strings[i];
listitem.ImageIndex:=0;
end;
end;
procedure TFrm_data_restore.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action:=caFree;
end;
procedure TFrm_data_restore.Btn_CancelClick(Sender: TObject);
begin
dm.Adoconn.Connected:=false;
Frm_data_restore.close;
end;
procedure TFrm_data_restore.Btn_okClick(Sender: TObject);
begin
Timer1.Enabled:=True;
Btn_ok.Enabled:=False;
Btn_del.Enabled:=False;
Btn_Cancel.Enabled:=False;
end;
procedure TFrm_data_restore.Btn_delClick(Sender: TObject);
var
path:string;
begin
path:='d:\backup\'+listview1.Selected.Caption;
Deletefile(path);
if messagedlg('你确实要删除'+str_bak+'备份文件吗?',mtConfirmation,[mbYes,mbNo],0)=mrYes then begin
listview1.Clear;
add_bak_file;
Btn_del.Enabled:=False;
end
else begin
Btn_del.Enabled:=False;
Btn_ok.Enabled:=False;
end;
end;
procedure TFrm_data_restore.FormCreate(Sender: TObject);
begin
Add_bak_file;
end;
procedure TFrm_data_restore.ListView1Change(Sender: TObject;
Item: TListItem; Change: TItemChange);
begin
if (ListView1.SelCount>0) and (not timer1.Enabled) then begin
Btn_del.Enabled:=True;
Btn_ok.Enabled:=True;
str_bak:=listview1.Selected.Caption;
Frm_data_restore.Caption:='数据库恢复--'+str_bak;
end
else begin
Btn_del.Enabled:=False;
Btn_ok.Enabled:=False;
Frm_data_restore.Caption:='数据库恢复';
end;
end;
procedure TFrm_data_restore.Timer1Timer(Sender: TObject);
begin
n:=n+1;
Frm_data_restore.Caption:='数据库恢复——'+str_bak+'正在进行数据恢复';
Bar1.Percent:=n*20;
if n=3 then Data_Restore;
if n=5 then begin
Frm_data_restore.Caption:='数据库恢复——'+str_bak+'数据恢复完成';
Timer1.Enabled:=false;
Btn_ok.Enabled:=False;
Btn_del.Enabled:=False;
Btn_Cancel.Enabled:=true;
Bar1.Percent:=0;
N:=0;
End;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -