在我的程序中由于写ACCESS数据库大小增加的非常快(详见帖子“关于写数据库的问题!原来用SQL SERVER2000,现在用ACCESS,但问题出现了,数据库大小疯长....?”),所以需要定时压缩数据库,以避免数据库极度膨胀,占用硬盘空间。
   通过查询MSDN 得到相关资料,但是用起来仍然有些问题。
   通过下面的代码,只能将数据库pds2000.mdb文件压缩成另外一个数据库pds2000bak.mdb文件,而不能只使用一个数据库文件pds2000.mdb(就像ACCESS2000-》工具-》数据库实用工具-》压缩和修复库工具,单击该选项,ACCESS会自动压缩数据库,而不用产生新的数据库文件,自己压缩自己,也就是说最终只有一个压缩好的数据库文件)。
     是我没用对方法,还是实现不了呢?请各位再此方面有心得的朋友指点一下。
分数不是问题,可加分。
  try
{
IJetEnginePtr jetPtr(__uuidof(JetEngine));
jetPtr->CompactDatabase(
"Provider=Microsoft.Jet.OLEDB.4.0;Data                                     Source=c:\\temp\\pds2000.mdb",
"Provider=Microsoft.Jet.OLEDB.4.0;Data                                    Source=c:\\temp\\pds2000bak.mdb;Jet OLEDB:Engine Type=5"
);
}
catch(_com_error &e) 
{       
   ::MessageBox(NULL, (LPCTSTR)e.Description( ), "", MB_OK) ;    
}

解决方案 »

  1.   

    你可以用VB做个Activex控件,我就是这样解决的,不知道你是采取密码级保护还是用户级保护,我自己编了两个分别针对以上两种的OCX文件,希望你说的明白一点。另外access97,与access2000的压缩方法是不一样的
      

  2.   

    其实你这问题我以前询问很多次,很多朋友包括msdn也没发现好的方法,
    其实我现在解决是压缩成另外一个临时数据库,在复制替换原来的,删除
    临时数据库。
         如果还有那位同仁还有什么更好的办法吗?学习!
      

  3.   

    every方法挺好,操作起来也不难。说不定access也是这样压缩,你只是感觉不到而已