📄 backup.pas
字号:
unit BackUp;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, RzTabs, ImgList, RzButton, ComCtrls, RzListVw;
type
TFileTimeType = (fttCreation, fttLastAccess, fttLastWrite);
TBackUpForm = class(TForm)
RzListView: TRzListView;
RzBitBtn1: TRzBitBtn;
RzBitBtn2: TRzBitBtn;
RzBitBtn3: TRzBitBtn;
RzBitBtn4: TRzBitBtn;
ImageList1: TImageList;
//更新列表
procedure UpdateList;
//搜索文件
procedure SearchFile(Ext: String; ModeName: Integer);
procedure FormCreate(Sender: TObject);
procedure RzBitBtn1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure RzBitBtn2Click(Sender: TObject);
procedure RzBitBtn3Click(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
//显示过程信息
procedure ShowProcessMessages(Ending : Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
BackUpForm : TBackUpForm;
AddData : Integer; //是否压缩数据 0=false; 1=true
AddMode : Integer; //数据压缩方式 <0..5>
implementation
uses WaitPas1, progress, DM, Option, CompressData;
{$R *.dfm}
//分别对应文件创建时间,访问时间,修改时间
function GetFileDateTime(const FileName: string; FileTimeType: TFileTimeType): TDateTime;
var
Handle: THandle;
FindData: TWin32FindData;
LocalFileTime: TFileTime;
DosDateTime: Integer;
begin
Handle := FindFirstFile(PChar(FileName), FindData);
if Handle <> INVALID_HANDLE_VALUE then
begin
Windows.FindClose(Handle);
if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then
begin
case FileTimeType of
fttCreation : FileTimeToLocalFileTime(FindData.ftCreationTime, LocalFileTime);
fttLastAccess : FileTimeToLocalFileTime(FindData.ftLastAccessTime, LocalFileTime);
fttLastWrite : FileTimeToLocalFileTime(FindData.ftLastWriteTime, LocalFileTime);
end;
if FileTimeToDosDateTime(LocalFileTime, LongRec(DosDateTime).Hi,
LongRec(DosDateTime).Lo) then begin
Result := FileDateToDateTime(DosDateTime);
Exit;
end;
end;
end;
Result := -1;
end;
procedure TBackUpForm.UpdateList;
begin
//更新备份文件列表
RzListView.Items.Clear;
SearchFile('*.Jbk',0);
SearchFile('*.Zbk',1);
end;
procedure TBackUpForm.FormCreate(Sender: TObject);
begin
UpdateList;
RzListView.DoubleBuffered:=true;
end;
procedure TBackUpForm.RzBitBtn1Click(Sender: TObject);
var
AddName : String;
begin
//数据库备份
AddName:=ExtractFilePath(paramstr(0))+'BackUp\'+FormatDateTIme('YYYY-MM-DD-HH-NN-SS',now)+'.Jbk';
WaitPas.Create(DM1.ADOQuery1,AddName,1,AddData,AddMode);
WaitForm.ShowModal;
UpdateList;
end;
procedure TBackUpForm.FormShow(Sender: TObject);
begin
//检查数据压缩方式
AddData:=OptionForm.BackUpSet.ItemIndex;
AddMode:=OptionForm.Mode.ItemIndex;
end;
procedure TBackUpForm.RzBitBtn2Click(Sender: TObject);
var
I : Integer;
begin
//删除一个备份的数据库文件
i:=RzListview.ItemIndex;
if i<0 then Exit;
if Messagebox(handle,'您确定要删除这一个备份文件吗?删除后不能恢复!','询问',MB_YESNO+MB_ICONQUESTION+MB_TOPMOST)=idyes then begin
DeleteFile(ExtractFilePath(paramstr(0))+'BackUp\'+RzListview.Items[i].Caption);
RzListview.Items[i].Delete;
end;
end;
procedure TBackUpForm.RzBitBtn3Click(Sender: TObject);
var
RName : String;
I : Integer;
begin
//还原备份数据
i:=RzListView.ItemIndex;
if i<0 then Exit;
RName:=ExtractFilePath(paramstr(0))+'BackUp\'+RzListView.Items[i].Caption;
if not FileExists(RName)then begin
Messagebox(handle,'您所选择的数据库备份文件不存在,请选择其他备份文件!','错误',MB_OK+MB_ICONWARNING);
UpdateList;
Exit;
end;
if Messagebox(handle,'还原客户关系管理系统数据时,将导致现有数据被覆盖,您确定要还原吗?','提醒',MB_YESNO+MB_ICONQUESTION)=IDNO then Exit;
//是否压缩文件
if ExtractFileExt(RName)='.Jbk'then
Waitpas.Create(DM1.ADOQuery1,RName,2,1,-1)
else Waitpas.Create(DM1.ADOQuery1,RName,2,0,-1);
WaitForm.ShowModal;
CompressDataForm.Opendata;
DM1.ADODataSet1.Requery();
end;
procedure TBackUpForm.SearchFile(Ext: String; ModeName: Integer);
var
Sr : TSearchRec;
Err : integer;
path, FSize,
ModeN : String;
begin
//搜索指定文件
Case ModeName of
0 : ModeN:='压缩文档';
1 : ModeN:='备份文档';
end;
Err:=FindFirst(ExtractFilePath(paramstr(0))+'BackUp\'+Ext,$37,Sr) ;
path:=ExpandFileName(ExtractFilePath(paramstr(0))+'BackUp\'+sr.Name);
while Err=0 do begin
if Sr.Name<>'.' then begin
with RzListView.Items.Add do begin
Caption:=(sr.Name);
ImageIndex:=ModeName;
SubItems.Add(ModeN);
if (Sr.Size div 1024)<1024 then
FSize:=IntToStr(Sr.Size div 1024)+' KB'
else FSize:=FormatFloat('#.#0',Sr.Size/1048576)+' MB';
SubItems.Add(FSize);
SubItems.Add(FormatDateTime('yyyy-mm-dd,hh:mm:ss',GetFileDateTime(ExtractFilePath(paramstr(0))+'BackUp\'+Sr.Name,fttLastWrite)));
end;
end;
Err:=FindNext(Sr);
end;
SysUtils.FindClose(SR);
end;
procedure TBackUpForm.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
//如果按下F5,则更新列表
if Key=VK_F5 then
UpdateList;
end;
procedure TBackUpForm.ShowProcessMessages(Ending : Boolean);
begin
if Ending then
Messagebox(handle,'数据库维护操作成功!','提示',MB_OK+MB_ICONINFORMATION+MB_TOPMOST)
else Messagebox(handle,'数据库维护操作失败,请稍候再试!','提示',MB_OK+MB_ICONERROR+MB_TOPMOST);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -