ACCESS数据库的多用户访问的问题,急!!!

mgaic 2003-09-16 04:47:12
我有两个程序同时访问一个access数据库,都对该数据库库进行读写,发现数据库总是会膨胀, 添加一条纪录后文件就膨胀32K左右,请教应该如何解决这个问题
我的一个程序使用的是VC的odbc方式
另一个程序使用的是BC的ado方式,
...全文
267 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangjuliang 2003-10-07
  • 打赏
  • 举报
回复
对于这个问题没有碰到过

学习!
mgaic 2003-09-23
  • 打赏
  • 举报
回复
求教高手。。。
mgaic 2003-09-21
  • 打赏
  • 举报
回复
难道真的没有人知道吗?
求教高手!!
mgaic 2003-09-19
  • 打赏
  • 举报
回复
不会的 我的数据格式都是固定的 ,要是被32k整除,所有的添加记录都会被整除的
而且我所有的字段都是必须的,我想不会是在长度上的问题
我怀疑是access数据库本身的问题,是否是需要设置那些参数才可以支持多用户
guanshangming 2003-09-18
  • 打赏
  • 举报
回复
用ADO压缩Access2000库
抄来的,借鉴一下,方法一我没有试成功,方法二我试过可以

方法一
#include "utilcls.h"
void CompactDatabase(String f1,String psw1, String f2,String psw2)
{
String Provider1="Provider=Microsoft.Jet.OLEDB.4.0"";Data Source="+f1+ ";Jet OLEDB:Database Password="+psw1;
String Provider2="Provider=Microsoft.Jet.OLEDB.4.0"";Data Source="+f2+ ";Jet OLEDB:Database Password="+psw2;
Variant Adoobj=Variant::CreateObject("JRO.JetEngine");
Adoobj.OleProcedure("CompactDatabase",Provider1,Provider2);
Adoobj.Clear();
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String f1="yhecdagl1.mdb"; // 源库1
String psw1="yhecdagl"; // 密码1

String f2="yhecdagl2.mdb"; // 新目的库2
String psw2="yhecdagl2"; // 新密码2

String dir=ExtractFilePath(Application->ExeName);
f1=dir+f1; f2=dir+f2;
if (FileExists(f2)) // 不允许目的库存在
DeleteFile(f2);
CompactDatabase(f1,psw1,f2,psw2);
ShowMessage("Finished");
}




方法二
1: Project->Import Type Library.....
2: 单击Add 加入系统的Program Files\Common Files\System\ADO\ Msdox.dll 和msjro.dll
3: 在Class name: TTable ,TColumn,TIndex 与VCL组件名字发生冲突,所以改名为TADOXTable....
4:注意放在哪个板面,默认是在ACTIVEX
5 单击 Install....
6 问是否加入到默认包中 单击确定
7 是否重新编译包 单击确定


WideString Original="Provider=Microsoft.jet.oledb.4.0; data source=db2.mdb;";
WideString NewConn="Provider=Microsoft.jet.oledb.4.0;data source=db2new.mdb";
JetEngine1->CompactDatabase(Original.c_bstr(),NewConn.c_bstr());
Santos 2003-09-18
  • 打赏
  • 举报
回复
我建议你分析一下你的数据库表的结构,是否一条记录的长度为32k或可被32k整除。如果是这样,你就要从数据库上下功夫了,将臃余的字段去除,将有用字段调整为合理的长度和类型。
mgaic 2003-09-18
  • 打赏
  • 举报
回复
因为我有个程序需要时时在运行中,随时会有数据添加进来,
另外一个程序是在这个程序添加完数据后,发个消息过来,然后我把这个添加的数据查询出来,转发到远端的sql2k中,关闭那个数据库要两个程序都要关闭的
wangxiangsjz 2003-09-18
  • 打赏
  • 举报
回复
gz
zihan 2003-09-18
  • 打赏
  • 举报
回复
那你可以尝试在添加或者修改过后关闭数据库,这样他会释放一定的空间.
mgaic 2003-09-18
  • 打赏
  • 举报
回复
楼上:
你提供的方法是对数据膨胀后补救方法,作这种操作需要使用独占的方式打开数据库,但是我希望是在我添加,修改记录时,数据库能够正常增长,而不是象现在那样添加一条就增长32k
我在调整我的程序后,发现有的时候程序增长很正常,有的时候就不正常了,烦透了,不知道数据库内部是怎么处理的
我会把这个压缩过程作为作为程序的一个功能添加进去
mgaic 2003-09-17
  • 打赏
  • 举报
回复
楼上:
我现在遇到的问题是每添加一条记录就有可能增大32K大小,每天添加的记录有很多,所以数据库膨胀的很厉害,而且也影响了对数据的查询操作,所以我不知道应该对数据库进行那些设置,
如果使用程序压缩的方法,请问应该如何写,用Vc,或者是BC,这种压缩需要独占数据库的
Santos 2003-09-16
  • 打赏
  • 举报
回复
access数据库是这样的,如果在里面删除数据,他只是对该记录做个标记罢了,所以数据库是一直增大的。

不要过渡紧张,只要定时将一些过时数据移出保存,并压缩数据库,即可。
xiaozerong 2003-09-16
  • 打赏
  • 举报
回复
关注
thp 2003-09-16
  • 打赏
  • 举报
回复

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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