由于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自带的压缩和修复数据库选项可以正常修复
代码如下:
::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自带的压缩和修复数据库选项可以正常修复
不过我是用压缩,不是修复
你的test.mdb是新的文件么?
另外,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");红色的删掉再试试..
test.mdb是修复后的新文件tabby:
对一个没损坏的数据库文件压缩没问题。
去掉Jet OLEDB:Engine Type=5也试过,都不行。
如果Jet OLEDB:Engine Type=4会提示:“不能执行这项操作;在低版本的数据库中该版本的特性不可用”。