执行:
   ADOQuery1.Close;
oJetEng := CoJetEngine.Create;
    if FileExists(FilePath+CPHeadDBName) then
    begin
      sOldMDB:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+AppPath+'\'+FilePath+CPHeadDBName;
      sNewMDB:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+AppPath+'\'+FilePath+'~'+CPHeadDBName;
   
oJetEng.CompactDatabase(sOldMDB, sNewMDB);时报该错误。FilePath+CPHeadDBName是Access数据库文件,被ADOQuery1连接打开过。创建时:
  if not(FileExists(FilePath+CPHeadDBName)) then
  begin
    tmpBasStr:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+AppPath+'\'+FilePath+CPHeadDBName;
    CreateAccess:=CreateOleObject('ADOX.Catalog');
    CreateAccess.Create(tmpBasStr);
  end;

解决方案 »

  1.   

    你在程序运行之前已用ACESS打开了这个数据库,或在IDE环境中有空件连接在激活状态(如ADOTABLE)
      

  2.   

    可是我已经执行了ADOQuery.close了啊
      

  3.   

    设其EXCLUSIVE为TRUE(独占方式打开)。
      

  4.   

    但你的IDE已经打开了数据库,和程序里的不是一回事,很简单,把DELPHI想象为一个程序,你写的又是一个程序,同时两个程序只能有一个打开数据库
      

  5.   

    ConnectionString中哪个是决定是否采用独占方式的啊?