我写的C/S结构程序数据库用的是.MDB,在运行一段时间.... 我写的C/S结构程序数据库用的是.MDB,在运行一段时间后,也就是说在程序中对数据库进行添加/删除等操作后,其容量老是自动增大,我用ACCESS的“工具->修复压缩数据库”后其容量就会减下来,这是怎么回事?如何解决这种现象呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个是ACCESS的MDB数据库必然会有的现象你可以使用OLE调用DAO的enginer对象的方法compact(好象是)压缩它 或者可以使用delphi6带的server组件解决这个问题问过多次了建议提前多找找资料 代码到处都是自己找找不好?var dbe:olevaraint; dbe:=createoleobject('DAO.DBEngine.36'); if assigned(dbe) then dbe.compact(老数据库名,新数据库,是否覆盖) dbe:=nil; //压缩数据库void TForm1::CompactDatabase(){ TCOM_DBEngine Engine=new CoDBEngine->Create(); WideString BakMDB,SourceMDB,TargetMDB; if(Application->MessageBox("数据库压缩是对数据库的一些无用信息进行清除!确保数据的访问速度!现在要做数据库压缩操作吗?", "确认信息",MB_YESNO + MB_DEFBUTTON2 + MB_ICONQUESTION) == IDYES) { ADOConnection1->Connected=false; BakMDB=ExtractFilePath(Application->ExeName)+"BAK\\Diary.mdb"; SourceMDB=ExtractFilePath(Application->ExeName)+"Diary.mdb"; TargetMDB=ExtractFilePath(Application->ExeName)+"~TempTarget.dat"; if(!CopyFile(((AnsiString)SourceMDB).c_str(),((AnsiString)BakMDB).c_str(),0)) { DeleteFile(((AnsiString)TargetMDB).c_str()); Application->MessageBox("无法进行数据库压缩!","提示信息",MB_OK); ADOConnection1->Connected=true; return; } try { Engine->CompactDatabase(SourceMDB.c_bstr(),TargetMDB.c_bstr());//,"",0,";pwd=123456"); if(CopyFile(((AnsiString)TargetMDB).c_str(),((AnsiString)SourceMDB).c_str(),0)) { DeleteFile(((AnsiString)TargetMDB).c_str()); Application->MessageBox("数据库压缩成功!","提示信息",MB_OK); } else { Application->MessageBox("数据库压缩失败!","提示信息",MB_OK); } } catch(...) { ShowMessage("数据库压缩失败!"); } } delete Engine; ADOConnection1->Connected=true;} 我的DCOM组件明明注册了却在COM组件中找不到,但是用本地可以正常激活。 如何在service中动态创建一个filelistbox? 鼠标指向一个控件时,右下角显示一个说明框这个功能怎么实现?? listbox 的句柄是什么? 请教一个问题:如何通过修改注册表把任务栏的 总在最前 的属性去掉 delphi7中tcpclient如何读出tcpserver发来的数据 请教:ListView问题? memo控件自动空两格,怎么做??? 特急,请教怎么把一个字符串变成一个表达式? 这个SQL语句怎么写,很着急的??? 紧急求救!! D7 除了 Rave 还有什么好用的报表打印控件?
你可以使用OLE调用DAO的enginer对象的方法compact(好象是)
压缩它 或者可以使用delphi6带的server组件解决
这个问题问过多次了建议提前多找找资料
自己找找不好?
var
dbe:olevaraint;
dbe:=createoleobject('DAO.DBEngine.36');
if assigned(dbe) then
dbe.compact(老数据库名,新数据库,是否覆盖)
dbe:=nil;
void TForm1::CompactDatabase()
{
TCOM_DBEngine Engine=new CoDBEngine->Create();
WideString BakMDB,SourceMDB,TargetMDB;
if(Application->MessageBox("数据库压缩是对数据库的一些无用信息进行清除!确保数据的访问速度!现在要做数据库压缩操作吗?", "确认信息",MB_YESNO + MB_DEFBUTTON2 + MB_ICONQUESTION) == IDYES)
{
ADOConnection1->Connected=false;
BakMDB=ExtractFilePath(Application->ExeName)+"BAK\\Diary.mdb";
SourceMDB=ExtractFilePath(Application->ExeName)+"Diary.mdb";
TargetMDB=ExtractFilePath(Application->ExeName)+"~TempTarget.dat";
if(!CopyFile(((AnsiString)SourceMDB).c_str(),((AnsiString)BakMDB).c_str(),0))
{
DeleteFile(((AnsiString)TargetMDB).c_str());
Application->MessageBox("无法进行数据库压缩!","提示信息",MB_OK);
ADOConnection1->Connected=true;
return;
}
try
{
Engine->CompactDatabase(SourceMDB.c_bstr(),TargetMDB.c_bstr());//,"",0,";pwd=123456");
if(CopyFile(((AnsiString)TargetMDB).c_str(),((AnsiString)SourceMDB).c_str(),0))
{
DeleteFile(((AnsiString)TargetMDB).c_str());
Application->MessageBox("数据库压缩成功!","提示信息",MB_OK);
}
else
{
Application->MessageBox("数据库压缩失败!","提示信息",MB_OK);
}
}
catch(...)
{
ShowMessage("数据库压缩失败!");
}
}
delete Engine;
ADOConnection1->Connected=true;
}