请看以下我写的程序,其中要uses ComObj;没有报错,可以正常压缩
var
  X:OleVariant;
  sourcefiles,tempfiles:string;
begin
  sourcefiles:='E:\xlltestdelphi\model.mdb';
  tempfiles:='E:\xlltestdelphi\temp.mdb';
  try
    X := createoleobject('JRO.JetEngine');
    X.CompactDatabase('Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+sourcefiles,'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+tempfiles);
    deletefile(sourcefiles);
    renamefile(tempfiles,sourcefiles);
    Messagedlg('OK!',mtwarning,[mbok],0);
    if fileExists(sourcefiles) and FileExists(tempfiles) then
      if deleteFile(sourcefiles)then RenameFile(tempfiles,sourcefiles);
    exit;
  except
    Messagedlg('主数据库正在被他人或应用程序使用,请稍后再试!',mtwarning,[mbok],0);
  end;
end;