📄 unit10.pas
字号:
unit Unit10;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, XPMenu, ExtCtrls;
type
TRestoreDataBase = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
XPMenu1: TXPMenu;
BitBtn3: TBitBtn;
Timer1: TTimer;
GroupBox1: TGroupBox;
ListBox1: TListBox;
BitBtn4: TBitBtn;
OpenDialog1: TOpenDialog;
procedure FormActivate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Timer1Timer(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
RestoreDataBase: TRestoreDataBase;
implementation
uses implemntation,unit5, Unit6, Unit2;
{$R *.dfm}
procedure TRestoreDataBase.FormActivate(Sender: TObject);
var n:integer;
begin
listbox1.Clear;
for n:=0 to Bakup_Num do begin //检测各备份文件是否存在并显示出来
if FileExists(Product_Dir+Bakup_Dir+'data.00'+inttostr(n)) then begin
listbox1.Items.Add(Bakup_Dir+'data.00'+inttostr(n)+'-----'+ (DateTimeToStr(FileDateToDateTime(FileAge(Bakup_Dir+'data.00'+inttostr(n))))));
end
end;
if listbox1.Count=0 then //检测看是否有备份如果没有提示是否新创建
if application.MessageBox('当前备份列表为空,以防数据丢失,要现在创建吗?','备份确认',mb_yesno)= mrYes then begin
if not (copyfile(pchar(Product_Dir+data_path),pchar(Product_Dir+Bakup_Dir+'data.000'),true)) then showmessage('数据库备份出错!请检查数据文件或磁盘。');
FormActivate(Sender); //重新执行过程把刚备份的文件显示出来
end;
end;
procedure TRestoreDataBase.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action := cafree;
end;
procedure TRestoreDataBase.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=VK_ESCAPE then self.close;
end;
procedure TRestoreDataBase.BitBtn2Click(Sender: TObject);
var n:integer;
begin
if application.MessageBox('真的要删除所有的数据库备份吗?','清空确认',mb_yesno)= mrYes then begin
try
for n:=0 to Bakup_Num do
begin deletefile(Product_Dir+Bakup_Dir+'data.00'+inttostr(n)) end;
except showmessage('清空备份文件失败!请检查磁盘');
end;
end;
FormActivate(Sender); //重新执行过程把刚备份的文件显示出来
end;
procedure TRestoreDataBase.BitBtn3Click(Sender: TObject);
begin
close;
end;
procedure TRestoreDataBase.BitBtn1Click(Sender: TObject);
var
now_select,msgstr:string;
n:integer;
begin
if (listbox1.ItemIndex<>-1) or (sender<>bitbtn1) then
if application.MessageBox('是否真的把数据库恢复到历史备份状态?','备份确认',mb_yesno)= mrYes then
begin
if listbox1.ItemIndex<>-1 then //判断是否在列表中列选中对象,否则程序将出错
begin now_select:=listbox1.Items[listbox1.ItemIndex];
delete(now_select,length(Bakup_Dir)+9,50); //取出选中的列表中的字符串中的路径及文件名
end;
//恢复之前询问是否备份当前数据库 过程类同备份单元中的备份功能
if application.MessageBox('恢复之前要备份当前数据库吗?','备份确认',mb_yesno)= mrYes then
begin
try
deletefile(Product_Dir+Bakup_Dir+'data.001');
for n:=1 to Bakup_Num do
begin
if FileExists(Product_Dir+Bakup_Dir+'data'+'.00'+inttostr(n)) then RenameFile(Product_Dir+Bakup_Dir+'data'+'.00'+inttostr(n),Product_Dir+Bakup_Dir+'data'+'.00'+inttostr(n-1));
end;
copyfile(pchar(Product_Dir+data_path),pchar(Product_Dir+Bakup_Dir+'data'+'.00'+inttostr(Bakup_Num)),true)
except
showmessage('数据库备份出错!请检查数据文件或磁盘。');
end;
FormActivate(Sender); //重新执行过程把刚备份的文件显示出来
end;
//关闭所有子窗体
if form5.MDIChildCount>0 then
begin
n:=form5.MDIChildCount;
for n:=0 to n do form5.MDIChildren[0].free;
end;
try
dm.free; //卸载数据库连接窗体
form2.free; //卸载数据库连接窗体
login_user:='None';
if sender=bitbtn4 then now_select:=opendialog1.FileName; //判断是否是从“从文件恢复”过程调用的此过程如是刚用选中的文件来恢复
if deletefile(Product_Dir+data_path) and (copyfile(pchar(now_select),pchar(Product_Dir+data_path),true)) then
msgstr:='数据库成功恢复到所选状态, 请重新登录系统!' else msgstr:='数据库恢复出错!请检查数据文件或磁盘。';
except msgstr:='数据库备份出错!请检查数据文件或磁盘。'; end;
self.Hide;
if sender=bitbtn4 then //判断是否是从“从文件恢复”过程调用的此过程,如果是因为程序会出错则强行中止程序
begin msgstr:='数据库成功恢复选中的文件,必须立刻重新打开本系统使恢复生效。'; showmessage(msgstr); application.Terminate; end;
showmessage(msgstr);
Application.CreateForm(Tdm, dm); //重新加载数据连接窗体
close;
end;
end;
procedure TRestoreDataBase.FormMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
state:='数据库恢复';
end;
procedure TRestoreDataBase.Timer1Timer(Sender: TObject);
begin
if listbox1.ItemIndex=-1 then bitbtn1.Enabled:=false else bitbtn1.Enabled:=true;
if listbox1.Count=0 then bitbtn2.Enabled:=false else bitbtn2.Enabled:=true;
end;
procedure TRestoreDataBase.BitBtn4Click(Sender: TObject);
begin
opendialog1.InitialDir:=Product_Dir;
opendialog1.Execute;
if opendialog1.FileName<>'' then BitBtn1Click(Sender); // 调用从列表恢复过程
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -