我的程序片断:
procedure TDM.ADOConnectionAfterDisconnect(Sender: TObject);
var
  Eng: DBEngine;
begin
  //压缩数据库
  Eng := CoDBEngine.Create;
  Eng.CompactDatabase('Prison.mdb','tem.~db','',0,'');
  DeleteFile(GetCurrentDIR + '\Prison.mdb');
  RenameFile(GetCurrentDIR + '\tem.~db', GetCurrentDIR + '\Prison.mdb');
end;而且我已经Uses了DAO2000了。运行时总是报告“无效的参数量”,咋解决呢?

解决方案 »

  1.   

    var X:OleVariant;
        sourcefiles,tempfiles:string;
    begin
      form_flat;
      if messagebox(mainform.handle,'確定要壓縮嗎?','壓縮',mb_yesno)<>idyes then exit;
      data1.Database1.Connected:=false;
      sourcefiles:=extractfilepath(application.exename)+'\Prison.mdb';
      tempfiles:=extractfilepath(application.exename)+'\Prison.~mdb';
      try
        X:=createoleobject('dao.dbEngine.36');
        x.CompactDatabase(sourcefiles,tempfiles,'',0,';pwd=');
        deletefile(sourcefiles);
        renamefile(tempfiles,sourcefiles);
        if fileExists(sourcefiles) and FileExists(tempfiles) then
        if deleteFile(sourcefiles)then RenameFile(tempfiles,sourcefiles);
      close;
      except
      Messagedlg('數據庫正打開!',mtwarning,[mbok],0);
      end;
    end;
      

  2.   

    加了ComObj沒有。升級你Microsoft  Data Access Components 至2.7﹐。
      

  3.   

    加了,而且MDAC也是2.7版。还是不行。
      

  4.   

    Eng.CompactDatabase('Prison.mdb','tem.~db','',0,'');
    这一句。
      

  5.   

    function CompactDatabase(AFileName,APassWord:string):boolean;
    //压缩与修复数据库,覆盖源文件
    var
      STempFileName:string;
      vJE:OleVariant;
    begin
      STempFileName:=GetTempPathFileName;
      try
        vJE:=CreateOleObject('JRO.JetEngine');
        vJE.CompactDatabase(format(SConnectionString,[AFileName,APassWord]),
            format(SConnectionString,[STempFileName,APassWord]));
        result:=CopyFile(PChar(STempFileName),PChar(AFileName),false);
        DeleteFile(STempFileName);
      except
        result:=false;
      end;
    end;
    试试
      

  6.   

    还是不行:(
    用Server面板上的TAccessApplication能干的了吗?