由于ACCESS数据库断电时损坏了,使用ADO方法修复。该数据库版本是ACCESS2000。
代码如下:
         ::CoInitialize( NULL );
try   
{   
IJetEnginePtr   jet(__uuidof(JetEngine));   
jet->CompactDatabase("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Dispatch.mdb",
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb;Jet OLEDB:Engine Type=5"); 
MessageBox("Compact complete");
}   
catch(_com_error   &e)     
{                 
MessageBox((LPCTSTR)e.Description(),"error",MB_OK);           
} ::CoUninitialize();可是修复后数据库中损坏的表变为MSysCompactError表,原因是什么?是不是版本的问题?
我的环境是XP SP2+VS2003+ACCESS2000
用ACCESS自带的压缩和修复数据库选项可以正常修复

解决方案 »

  1.   

    我用的没问题
    不过我是用压缩,不是修复
    你的test.mdb是新的文件么?
      

  2.   

    奇怪,你对别的数据库文件进行压缩有问题吗?? 
    另外,jet-> CompactDatabase("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Dispatch.mdb", 
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb;Jet OLEDB:Engine Type=5");红色的删掉再试试..
      

  3.   

    shakaqrj:
    test.mdb是修复后的新文件tabby:
    对一个没损坏的数据库文件压缩没问题。
    去掉Jet OLEDB:Engine Type=5也试过,都不行。
      

  4.   

    Jet OLEDB:Engine Type=4 呢?
      

  5.   

    sangermax:
    如果Jet OLEDB:Engine Type=4会提示:“不能执行这项操作;在低版本的数据库中该版本的特性不可用”。
      

  6.   

    http://support.microsoft.com/kb/230501/EN-US/NOTE: The Jet OLEDB:Engine Type=4 is only for Jet 3.x format MDB files. If this value is left out, the database is automatically upgraded to the 4.0 version (Jet OLEDB:Engine Type=5). See the following table for appropriate values for Jet OLEDB:Engine Type: 你再看看哪错了..记着初始化OLE