如何压缩ACCESS数据库

chinakknd 2003-11-10 01:57:44
您好:
我用ACCESS数据库编写程序,我发现,挣加几条数据后,数据库变的很大,而且数据删除后仍然没有变化,我有一个30多兆的数据库,里面根本没数据,经过ACCESS本身压缩后才几十K,但是我们不能要求用软件的人都安装ACCESS,并且懂得压缩。那么我们怎么做。才能解决问题呢?
...全文
45 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangzhg 2003-11-12
  • 打赏
  • 举报
回复
up,study.study,..study.............
cdwy411 2003-11-10
  • 打赏
  • 举报
回复
#import "C:\PROGRAM FILES\COMMON FILES\System\ado\MSJRO.DLL" no_namespace

Add the following (specifying your own source and destination database paths) to the .cpp file where you want to compact the database:







...

try

{

IJetEnginePtr jet(__uuidof(JetEngine));

jet->CompactDatabase(

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\nwind2.mdb",

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\abbc.mdb;" \

"Jet OLEDB:Engine Type=4");

}

catch(_com_error &e)

{

::MessageBox(NULL, (LPCTSTR)e.Description( ), "", MB_OK) ;

}



JetLuo 2003-11-10
  • 打赏
  • 举报
回复
摘抄一段我的一段程序:

CString strWorkDir=::GetCurrentWorkDir();
CString strDatabaseName=strWorkDir+lpDataBaseFileName;
CString strDestDatabaseName=strWorkDir+"\\Tmp.mdb";

TRY
{
CFile::Remove( (LPCTSTR)strDestDatabaseName );
}
CATCH( CFileException , e)
{
#ifdef _DEBUG
afxDump << "File " << ((LPCTSTR)strDestDatabaseName) << " cannot be removed\n";
#endif
e->Delete();
}
END_CATCH

CString strConnetStringhead=_T("Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=xxxxxx; Data Source=");
CString strConnStr=strConnetStringhead+strDatabaseName;
CString strDestStr=strConnetStringhead+strDestDatabaseName+_T(";Jet OLEDB:Engine Type=5");
try
{
IJetEnginePtr jet(__uuidof(JetEngine));
jet->CompactDatabase( (LPCTSTR)strConnStr, (LPCTSTR)strDestStr);
}
catch(_com_error e)
{
MessageBox(e.Description(), "数据库操作错误",MB_ICONSTOP) ;
((CNetDocCabinetApp *)AfxGetApp())->ConnectDBS();
return;
}
CFile::Remove((LPCTSTR)strDatabaseName);
CFile::Rename((LPCTSTR)strDestDatabaseName,strDatabaseName);

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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