Ich weiss nicht, woher die Klasse
TJetEngine stammt.
Ich nehme mal an, du hast dir von Delphi eine
Wrapper-Klasse erzeugen lassen.
In diesem Fall; es wird eine einzige Interface-Methode aufgerufen; sollte man aber besser direkt mit dem Interface arbeiten.
Bei folgender Prozedure wird sichergestellt, dass das Interface auch wieder freigegeben wird.
Delphi-Quellcode:
procedure Access_Compact(const aAccess: string);
const
bak_ext = '.$$$';
stAccessDB = 'Provider=Microsoft.Jet.OLEDB.4.0;'+
'Data Source=%s';
var
JetEngine : OleVariant;
TempName : string;
begin
TempName := ChangeFileExt(aAccess, bak_ext);
DeleteFile(TempName);
JetEngine := CreateOleObject('JRO.JetEngine');
try
JetEngine.CompactDatabase(
Format(stAccessDB, [aAccess]),
Format(stAccessDB, [TempName]));
DeleteFile(aAccess);
RenameFile(TempName, aAccess);
finally
JetEngine := Unassigned;
end;
end;