在我的程序中由于写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) ;
}
通过查询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) ;
}
其实我现在解决是压缩成另外一个临时数据库,在复制替换原来的,删除
临时数据库。
如果还有那位同仁还有什么更好的办法吗?学习!