这是在网上找到的一个例子,我没有试过,你试试看,如果不行的话再联系。
function CompactMdb(const sDBName:string):Boolean;
const sProvider = Provider='Microsoft.Jet.OLEDB.4.0;';
var oJetEng: JetEngine;
sOldMdb, sNewMdb,sTempfile: string;
begin
ReSult:=True;
sTempFile:=ExtractFilePath(sDBname)+Temp.mdb;
sOldMdb := sProvider + Data Source=' + sDBName+';'
+ Jet OLEDB
atabase Password=HeQing;'
+Jet OLEDB:Engine Type=4;//access97
;//Jet OLEDB:Engine Type=5//acces2000
sNewMdb := sProvider + Data Source=' + sTempFile+';'
+ Jet OLEDB
atabase Password=XXXXX;'
+Jet OLEDB:Engine Type=4;//access97
//Jet OLEDB:Engine Type=5 accees2000
try
try
oJetEng := CoJetEngine.Create;
oJetEng.CompactDatabase(sOldMdb, sNewMdb);
if FileExists(sTempFile) then
begin
CopyFile(Pchar(sTempFile),PChar(sDBName),False);
DeleteFile(sTempFile);
end;
except
on E: Exception do
ReSult:=False;
end
finally
oJetEng := nil;
end;
end;
由于D6版本和ado的不同,也许编译不能通过,可以将不能通过的内容删除;