我对ACCESS数据操作,加入如下unAccessTools单元.
可是在修复数据库时总是提示"这种对象类型不支持该操作",不知何故???procedure main.ACCESS1Click(Sender: TObject);
var
  sFileName: String;
begin  sFileName:=ExtractFilePath(ParamStr(0))+'main.mdb';
  sBar.Panels.Items[1].Text:='正在恢复数据库,请稍候......';
  Self.Enabled:=false;
  Self.Cursor:=crSqlWait;
  try
      AdoConnection1.Close;
      if  DaoRepairDB(sFileName)
      then sBar.Panels.Items[1].Text:='恢复数据库完毕'
      else sBar.Panels.Items[1].Text:='恢复数据库失败!';
  finally
    Self.Enabled:=true;
    Self.Cursor:=crDefault;
  end;
end;  {*************************************************************** 
*     对access数据库维护* Unit Name: unAccessTools* Purpose : Provide tools to compact and repair Access database.*****************************************************************}unit unAccessTools;interfaceuses SysUtils, Variants,ComObj,Dialogs;function DaoActive(var DaoObject:OleVariant):Boolean;function DaoCompactDB(const FileName:string):Boolean;function DaoRepairDB(const FileName:string):Boolean;implementationfunction DaoActive(var DaoObject:OleVariant):Boolean;
beginResult:=False;tryDaoObject:=GetActiveOleObject('DAO.DBEngine.36');Result:=True;excepttryDaoObject:=CreateOleObject('DAO.DBEngine.36');Result:=True;exceptDaoObject:=Null;end;end;end;//压缩Access数据库function DaoCompactDB(const FileName:string):Boolean;vardb:OleVariant;TempFile:string;beginResult:=False;tryif not DaoActive(db) thenExit;tryTempFile:=ExtractFilePath(FileName)+'msaTemp.mdb';db.CompactDatabase(FileName,TempFile);DeleteFile(FileName);RenameFile(TempFile,FileName);Result:=True;excepton E:EOleException doShowMessage(E.Message);endfinallydb:=Unassigned;end;end;//修复Access数据库
function DaoRepairDB(const FileName:string):Boolean;
var
  db:OleVariant;
begin
  Result:=False;
  try
    if not DaoActive(db) then
      Exit;
    try
      db.RepairDatabase(FileName);
      Result:=True;
    except
      on E:EOleException do
        ShowMessage(E.Message);
    end
  finally
    db:=Unassigned;
  end;
end;end.

解决方案 »

  1.   

    1、在IDE中选择“工程|引用”菜单。     2、添加Microsoft Jet and Replication Objects X.X library(这里X.X是大于或等于2.1的数)。     3、使用如下代码:      Dim jro As jro.JetEngine      Set jro = New jro.JetEngine      jro.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\nwind2.mdb", _      "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\abbc2.mdb;Jet OLEDB:Engine Type=4"                Owen的意见:     Delphi版本:     procedure TChechkCodefrm.FormClose(Sender: TObject;      var Action: TCloseAction);           Function CompactAndRepair(sOldMDB : String; sNewMDB : String) : Boolean;      const      sProvider = 'Provider=Microsoft.Jet.OLEDB.4.0;';      var      oJetEng : JetEngine;      begin      sOldMDB := sProvider + 'Data Source=' + sOldMDB;      sNewMDB := sProvider + 'Data Source=' + sNewMDB;      try      oJetEng := CoJetEngine.Create;      oJetEng.CompactDatabase(sOldMDB, sNewMDB);      oJetEng := Nil;      Result := True;      except      oJetEng := Nil;      Result := False;      end;      end;     var      s: TStringList;      tmps: string;     begin      inherited;      LocalCon.Close;      tmps:='wg.mdb';      if FileExists('CtwgClientcfg.ini') then      begin      s:=TStringList.Create;      s.LoadFromFile('CtwgClientcfg.ini');      if s.IndexOf('[Data Source]')>-1 then      tmps:=s[s.IndexOf('[Data Source]')+1];      end;      if CompactAndRepair(tmps, 'wg1.mdb') then      begin      DeleteFile(tmps) ;      RenameFile('wg1.mdb',tmps);      end;      LocalCon.Connected:=true;     end;          以上是我用的主个完整过程,可直接调用。     你要在uses中加入JRO_TLB,如编译找不到该文件,则在IDE->import type library中导入Microsoft Jet and Replication Objects 2.x Library[version 2.x],重新编译,应该OK了。