procedure Tfrmmain.N50Click(Sender: TObject);
var
  X: OleVariant;
  sourcefiles,tempfiles:string;
begin
  sourcefiles:=extractfilepath(application.exename)+'data\infobase.mdb';
  tempfiles:=extractfilepath(application.exename)+'data\temp.mdb';
  dm.infobase.Connected:=false;
  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+'');
    if fileExists(sourcefiles) and FileExists(tempfiles) then
    if deleteFile(sourcefiles)then
    RenameFile(tempfiles,sourcefiles);
  except
    x.Release;
  end;
    dm.infobase.Connected:=true;
end;//这是对ACCESS2000的。
另外要uses comobj

解决方案 »

  1.   

    var x:variant;
    ....
    X:= createoleobject('JRO.JetEngine');
    s1:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\xsgl.mdb;Jet OLEDB:Database Password=111111';
    s2:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\xsgl1.mdb;jet OLEDB:Database Password=111111';
    x.CompactDatabase(s1,s2);
    ....
    没密码的话可以去掉jet OLEDB:Database Password=111111
      

  2.   

    var 
      dao: OLEVariant; 
    begin 
      dao := CreateOleObject('DAO.DBEngine.35'); 
      dao.CompactDatabase('d:\yourDatabaseName.mdb', 
    'd:\yourNewCompactedDatabaseName.mdb'); 
    end; 
      

  3.   

    hi,东北人
    怎么提示 'could not find installable ISAM'
      

  4.   

    改成var  x:variant;
      ....
      X:=  createoleobject('JRO.JetEngine');
      s1:='Provider=Microsoft.Jet.OLEDB.3.51;Data  Source=e:\xsgl.mdb;Jet  OLEDB:Database  Password=111111';
      s2:='Provider=Microsoft.Jet.OLEDB.3.51;Data  Source=e:\xsgl1.mdb;jet  OLEDB:Database  Password=111111';
      x.CompactDatabase(s1,s2);
      ....
      没密码的话可以去掉jet  OLEDB:Database  Password=111111
      
      

  5.   

    hi,mchenjiong
    您的方法有效不过有密码的库,压缩后如果还保留密码的话出现“找不到成员”的错误,请指示。 一定加分。
      

  6.   

    这'JRO.JetEngine'还有其它什么功能 ?! (另给高分)
      'ADOX.Catalog'还有什么功能 ?!