access数据库如何备份与还原 ( 积分: 20 )

  • 主题发起人 主题发起人 bywind
  • 开始时间 开始时间
用复制文件的方法
 
备份中如何实现压缩??
 
你找一个三方压缩控件吧 ,网上很多。可以直接使用。vclzip就可以
 
直接复制一份就行了吗?何必那么麻烦啊!
 
以下是我使用的一段压缩、备份、还原的子程序,供参考!
procedure TDM.BackRevertShrinkDB(const AOperType: Byte; const AFileName: string);
const
ConnectStr='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Jet OLEDB:Database Password=%s;';
var
V:OleVariant;
SourcePW,DestPW,
SourceDB,DestDB,Temp:string;
begin
case AOperType of
0:
begin//0表示备份:新的数据库密码需要计算,旧数据库密码=固定
SourcePW:=pwDataBase;
DestPW:=pwNewDataBase;
SourceDB:=FSetupPath+KDCDBName;
DestDB:=AFileName;
end;
1:
begin//1表示恢复数据库:源密码需要计算,目标数据库密码固定
SourcePW:=pwNewDataBase;
DestPW:=pwDataBase;
SourceDB:=AFileName;
if not FileExists(SourceDB) then RaiseError('用于恢复的数据库文件不存在!');
DestDB:=FSetupPath+KDCDBName;
end;
else
begin
SourcePW:=pwDataBase; //否则表示压缩数据库
DestPW:=pwDataBase;
SourceDB:=FSetupPath+KDCDBName;//'SmartMeterKDC.mdf';
DestDB:=FSetupPath+FloatToStr(Now);
end;
end;
if FileExists(DestDB) then //确保目标文件不存在。如果是还原,先将原来的数据库改名
if AOperType=1 then //还原
begin
Temp:=FSetupPath+'SmartMeterKDC.PreRst'; //改名
if FileExists(Temp) then DeleteFile(Temp); //改名的文件存在
RenameFile(DestDB,Temp); //如果是还原,失败的话应恢复。//FSetupPath+SmartMeterKDC.PreRst
end else DeleteFile(DestDB); //如果是备份,删除目标文件,如果是压缩,删除临时文件。
try
V:=CreateOleObject('JRO.JetEngine');
OleCheck(V.CompactDatabase(Format(ConnectStr,[SourceDB,SourcePW]),Format(ConnectStr,[DestDB,DestPW])));//压缩数据库
if AOperType>1 then//备份不对源文件和目标文件进行操作
begin //压缩应将结果文件改名为数据库文件
DeleteFile(SourceDB);//删除
RenameFile(DestDB,SourceDB);
end else if AOperType=1 then DeleteFile(Temp);////如果是恢复,恢复成功后应删除刚才的改名文件
except
if AOperType=1 then RenameFile(Temp,DestDB);
raise;
end;
end;
 
虽然我看不太懂,谢谢lccc
 
其实没有什么,主要是以下两条指令:
1、V:=CreateOleObject('JRO.JetEngine');
创建自动化对象;
2、OleCheck(V.CompactDatabase(Format(ConnectStr,[SourceDB,SourcePW]),Format(ConnectStr,[DestDB,DestPW])));//压缩数据库
其中CompactDatabase是自动化对象V的方法,执行结果返回的是HRESULT类型。
OleCheck检查返回的结果是表示CompactDatabase成功执行。不是引发异常。
 
后退
顶部