MDAC 2.1からJROでMDBを最適化できるようになっていたようだ。
Delphi XEを使って、次のコードでMDBファイルを最適化できた。
uses ComObj;
/// <summary>MDBファイルを最適化する</summary>
/// <param name="SourceMdbPath">最適化するMDBファイルのバス</param>
/// <param name="SourceMdbPassword">最適化するMDBファイルのパスワード</param>
/// <param name="TargetMdbPath">最適化したMDBファイルのバス</param>
/// <param name="TargetMdbPassword">最適化したMDBファイルのパスワード</param>
procedure CompactMdb(
SourceMdbPath, SourceMdbPassword,
TargetMdbPath, TargetMdbPassword: String);
const
SOURCE_PARAM = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Jet OLEDB:Database Password=%s';
TARGET_PARAM = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Jet OLEDB:Engine Type=%d;Jet OLEDB:Database Password=%s';
ENGINE_TYPE = 5; //Jet OLEDB:Engineの種類
var
Engine: OleVariant;
SourceStr, TargetStr: String;
begin
SourceStr := Format(SOURCE_PARAM, [SourceMdbPath, SourceMdbPassword]);
TargetStr := Format(TARGET_PARAM, [TargetMdbPath, ENGINE_TYPE, TargetMdbPassword]);
Engine := ComObj.CreateOleObject('JRO.JetEngine');
Engine.CompactDatabase(SourceStr, TargetStr);
end;
//C:\mdb\old.mdbを最適化したファイルをC:\mdb\new.mdbに作成する
//C:\mdb\old.mdbのパスワードは'pass1'
//C:\mdb\new.mdbのパスワードは'pass2'
CompactMdb('C:\mdb\old.mdb', 'pass1','C:\mdb\new.mdb', 'pass2');
参考