下面的函數用來壓縮Access數據庫 需要增加ComObj單元
function CompactDatabase(AFileName,APassWord:string):boolean;
//壓縮與修復數據庫,覆蓋源文件
const
SConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;'
+'Jet OLEDB:Database PassWord=%s;';
var
SPath,SFile:Array [0..254] Of Char;
STempFileName:String;
JE:OleVariant;
begin
GetTempPath(40,SPath);//取得Windows的Temp路徑
GetTempFileName(SPath,'~CP',0,SFile);//取得Temp文件名,Windows將自動建立0字節文件
STempFileName:=SFile;//PChar->String
DeleteFile(STempFileName);//刪除Windows建立的0字節文件
try
JE:=CreateOleObject('JRO.JetEngine');//建立OLE對象,函數結束OLE對象超過作用域自動釋放
OleCheck(JE.CompactDatabase(format(SConnectionString,[AFileName,APassWord]),
format(SConnectionString,[STempFileName,APassWord])));//壓縮數據庫
//復制並覆蓋源數據庫文件,如果復制失敗則函數返回假,壓縮成功但沒有達到函數的功能
result:=CopyFile(PChar(STempFileName),PChar(AFileName),false);
DeleteFile(STempFileName);//刪除臨時文件
except
result:=false;//壓縮失敗
end;
end;