改一下过程,在压缩完后把临时文件Copy为正常文件,然后把临时文件删除,循环判断一下临时文件在不在,不在的话就已完成压缩

解决方案 »

  1.   

    你可以看看dbEngine的状态我没用过你看看可能有的!
      

  2.   

    这个是压缩access2000的代码,你试试看,尽量使用高版本的dao驱动程序,可能3.5有点问题
    uses ....,ComObj;
    ..
    ..procedure Tfm_main.Compact;
    var dao:OLEVariant;
    begin
       adoconnection.Close;
       screen.Cursor:=crHourGlass;
       dao:=CreateOleObject('DAO.DBEngine.36');
       dao.CompactDatabase(getcurrentdir+'/data.mdb',getcurrentdir+'/new.mdb');
       DeleteFile(getcurrentdir+'/data.mdb');
       RenameFile(getcurrentdir+'/new.mdb','data.mdb');
       adoconnection.Open;
       screen.Cursor:=crDefault;
       application.MessageBox('成功压缩数据库','提示',mb_ok+mb_iconinformation);
    end; 
      

  3.   

    to  manboo(L—横刀--L) 
      我怎样才能看到dbEngine的状态?什么资料上有介绍?
    谢谢!
      

  4.   

    dbengine.CompactDatabase 不是立即返回型函数,他一定是在完成工作之后才会返回的,
    你能执行到 db.Close 那就说明上面的函数已经结束了。
    你看看别的问题吧。另外,现在ADO的引擎比DAO好得多,为啥不用?
      

  5.   

    to pazee(耙子) 
      能给一个用ADO来进行压缩的例子吗?
      

  6.   

    不用DAO
    用JRO
    ADO不支持压缩我的代码: try
      b.CompactDatabase('Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
       +db_source,'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
       +db_target);
      if replace then
      begin
       if deletefile(pchar(db_source)) then
        result:=renamefile(db_target,db_source)
       else
        result:=false;
      end
      else
        result:=true;
     except
      result:=false;
     end;
      

  7.   

    呵呵,谁说ADO不支持压缩,那是delphi 的ADOExpress没提供接口罢了。告诉你个简单的办法,
    打开你的delphi->project->Import type libaray
    找到 microsoft Jet and Repliaction Object 2.5 (就是JRO)
    Install 了他
    然后看你的Activex空间面板会多出2个控件,有一个就是JetEngin
    这个就是大家想用的JRO,
    把它拖到form上 
    写代码
    JetEngin1.CompactDatabase(xxxxx)
    剩下的你就会了,参数和上面说得差不多了Provider=Microsoft.Jet.OleDB.4.0;Data Source=d:ComTestmyDb.mdb;Jet OLEDB:Engine Type=5;Locale Identifier=0x0804;Jet OLEDB:Database Password=mypwd;看看这两个帖子http://www.csdn.net/expert/topic/791/791528.xml?temp=.7135736
    http://www.csdn.net/expert/topic/837/837602.xml?temp=.8422968