CompactDatabase 有什么作用

wdm518 2013-08-30 01:31:39
最近维护一个老系统看到代码里面有这样一段程序,
用户A和用户B同时登陆到系统,当A先退出的时候就报异常。(关闭程序)
跟踪代码如下:
不知道这个有什么功能,希望高手指点。一个用户使用登陆的时候没有问题。
BOOL MDBCompact(CString szFilePath)
{
CString szProvider = "Provider=Microsoft.Jet.OLEDB.4.0;";
CString szDataSource = "Data Source=";
CString szOJetOLEDB = "Jet OLEDB:Database Password= ";
CString szTJetOLEDB = "Jet OLEDB:Engine Type=5;Jet OLEDB:Database Password= ";

int nIndex;
int strLength = szFilePath.GetLength();
for(int i=strLength-1; i>=0; i--)
{
if(szFilePath[i] == '\\')
{
nIndex = i;
break;
}
}

CString szTmpFilePath = szFilePath.Left(nIndex+1);
szTmpFilePath += "GakkenTmp.mdb";

_bstr_t szOrignalInfo(szProvider+szDataSource+szFilePath+";"+szOJetOLEDB);
_bstr_t szTargetInfo(szProvider+szDataSource+szTmpFilePath+";"+szTJetOLEDB);

CFile OrignalFile;
CFile TargetFile;

try
{
IJetEnginePtr jet(_uuidof(JetEngine));
jet->CompactDatabase(szOrignalInfo,szTargetInfo);

OrignalFile.Remove(szFilePath);
TargetFile.Rename(szTmpFilePath,szFilePath);
}
catch (_com_error &e)
{
::MessageBox(NULL,(LPCTSTR)e.Description(),"",MB_OK);
return FALSE;
}
return true;
}
...全文
1301 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2013-08-31
  • 打赏
  • 举报
回复
压缩数据库。 出于性能的考虑,数据库中记录删除、更新都只是简单将原有位置标记为没有数据,而不会回收利用。所以时间一长,数据库就会松散地占用很多空间。 压缩数据库可以整理数据,释放无用的空间。
zx119koko 2013-08-31
  • 打赏
  • 举报
回复
压缩数据库,将旧库的数据压缩到新库
真相重于对错 2013-08-30
  • 打赏
  • 举报
回复
通过ado访问数据库

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧