//备份
procedure TfmMain.DoBackupExecute(Sender: TObject);
begin
if SaveDialog.Execute then
begin
if ZipFile(Global.ExePath + 'dbWuye.mdb', SaveDialog.FileName) then
MessageDg('备份数据库成功', MB_ICONINFORMATION)
else
MessageDg('备份数据库失败', MB_ICONWARNING);
end;
end;
//还原
procedure TfmMain.DoRestoreExecute(Sender: TObject);
begin
if MDIChildCount > 0 then
raise Exception.Create('请先关闭所有窗口');
if OpenDialog.Execute then
begin
try
dmMain.ConnectionMain.Connected := False;
DeleteFile(Global.ExePath + 'dbWuye.bak');
CopyFile(Pchar(Global.ExePath + 'dbWuye.mdb'), Pchar(Global.ExePath + 'dbWuye.bak'), False);
DeleteFile(Global.ExePath + 'dbWuye.mdb');
if UnZipFile(OpenDialog.FileName, Global.ExePath + 'dbWuye.mdb') then
MessageDg('还原数据库成功', MB_ICONINFORMATION)
else
MessageDg('还原数据库失败', MB_ICONWARNING);
dmMain.ConnectionMain.Connected := True;
dmMain.qryLogin.Active := True;
except
if FileExists(Global.ExePath + 'dbWuye.bak')
and not FileExists(Global.ExePath + 'dbWuye.mdb') then
CopyFile(Pchar(Global.ExePath + 'dbWuye.bak'), Pchar(Global.ExePath + 'dbWuye.mdb'), False);
end;
end;
end;
function ZipFile(Source, Target: String): Boolean;
var
Buf : array[0..1023] of Byte;
ZStream : TCompressionStream;
SourceStream,
TargetStream : TFileStream;
Size : Longint;
ReadCout : Integer;
begin
Result := False;
SourceStream := TFileStream.Create(Source, fmOpenRead or fmShareDenyNone);
TargetStream := TFileStream.Create(Target, fmCreate);
ZStream := TCompressionStream.Create(clDefault, TargetStream);
try
try
Size := SourceStream.Size;
ZStream.Write(Size, 4);
while SourceStream.Position < SourceStream.Size do
begin
ReadCout := SourceStream.Read(Buf, 1024);
ZStream.Write(Buf, ReadCout);
end;
Result := True;
except
;
end;
finally
SourceStream.Free;
ZStream.Free;
TargetStream.Free;
end;
end;
function UnZipFile(Source, Target: String): Boolean;
var
Buf : array[0..1023] of Byte;
ZStream : TDecompressionStream;
SourceStream,
TargetStream : TFileStream;
Size : Longint;
ReadCout,
Total : Integer;
begin
Result := False;
SourceStream := TFileStream.Create(Source, fmOpenRead);
TargetStream := TFileStream.Create(Target, fmCreate);
ZStream := TDecompressionStream.Create(SourceStream);
try
try
ZStream.Read(Size, 4);
Total := 0;
while Total < Size do
begin
if Size - Total >= 1024 then
ReadCout := ZStream.Read(Buf, 1024)
else
ReadCout := ZStream.Read(Buf, Size - Total);
Total := Total + ReadCout;
TargetStream.Write(Buf, ReadCout);
end;
Result := True;
except
;
end;
finally
ZStream.Free;
SourceStream.Free;
TargetStream.Free;
end;
end;