CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  数据库相关

win98下access数据库膨胀

楼主ntit168()2005-06-15 08:37:18 在 Delphi / 数据库相关 提问

为什么用delphi操作access数据库,在win98下运行,delete,insert几次后,数据库大小一下子从几10k升  
  几百M呢?  
  有没有人遇到过类似的问题,是怎么回事呀! 问题点数:20、回复次数:8Top

1 楼fontain()回复于 2005-06-15 10:18:02 得分 2

Access数据库自身的问题,压缩一下就好了,参考:  
  http://community.csdn.net/Expert/topic/4050/4050563.xml?temp=.5395777Top

2 楼wenjianyao(建)回复于 2005-06-15 11:55:17 得分 2

几10k升  
  几百M?是不是有点夸张阿?  
   
  是会变大,但是你这个也太夸张了吧  
  压缩一下吧Top

3 楼tjianliang(乡关何处)回复于 2005-06-15 12:02:56 得分 2

Access,工具,数据库实用工具,压缩和修复数据库,看是不是变小了。  
  不过你delete,insert几次后就从   几十K   ->   几百M   ,是有点夸张,是不是有什么特殊字段;  
  还有在WIN98下这样,在WIN2000下呢Top

4 楼ntit168()回复于 2005-07-21 08:27:51 得分 0

除了通过压缩的方法,还有什么好的方法吗?  
  膨胀是不是Access的bug呢Top

5 楼zzlingaaa(小舟)回复于 2005-07-21 08:34:17 得分 10

Access数据Delete的时候,好像只是删除了逻辑上的数据,并没有彻底删除,所以才会造成这种情况,压缩就是为了清除无用数据.下面是我用的一段压缩Access数据库的代码:  
  uses   ComObj;  
   
  //压缩与修复数据库,覆盖源文件   uses   ComObj;  
  function   CompressDataBase(AFileName,APassWord:   string):   Boolean;  
  const  
      SConnectionString   =   'Provider=Microsoft.Jet.OLEDB.4.0;Data   Source=%s;'   +  
                                              'Jet   OLEDB:Database   Password=%s;';  
  var  
      SPath,SFile:   array   [0..254]   of   Char;  
      STempFileName:   string;  
      JE:   OleVariant;  
  begin  
      GetTempPath(40,SPath);                                             //取得Windows的Temp路径  
      GetTempFileName(SPath,'~CP',0,SFile);               //取得Temp文件名,Windows将自动建立0字节文件  
      STempFileName   :=   SFile;                                           //PChar->String  
      DeleteFile(STempFileName);                                     //删除Windows建立的0字节文件  
      try  
          JE   :=   CreateOleObject('JRO.JetEngine');       //建立OLE对象,函数结束OLE对象超过作用域自动释放  
          OleCheck(JE.CompactDatabase(Format(SConnectionString,[AFileName,APassWord]),  
                            Format(SConnectionString,[STempFileName,APassWord])));  
                                                                                              //压缩数据库  
                                                                                              //复制并覆盖源数据库文件,如果复制失败则函数返回假,  
                                                                                              //压缩成功但没有达到函数的功能  
          Result   :=   CopyFile(PChar(STempFileName),PChar(AFileName),False);  
          DeleteFile(STempFileName);                                 //删除临时文件  
      except  
          Result   :=   False;                                                     //压缩失败  
      end;  
  end;  
  Top

6 楼ntit168()回复于 2005-08-02 16:06:06 得分 0

upTop

7 楼MudLib(Alan)回复于 2005-08-02 16:38:02 得分 2

Access确实存在这个问题,你作个压缩的代码,让用户定期压缩一下就好了!Top

8 楼tjianliang(乡关何处)回复于 2005-08-05 13:08:45 得分 2

或许可以参考一下  
  http://access911.net/index.asp?board=11&pm=e&k=20%25%7D%5C%3E%D1%B9%CB%F5+%D0%DE%B8%B4%25%7D%5C%3E1%25%7D%5C%3E%25%7D%5C%3ETop

相关问题

  • 关于access数据库膨胀的问题!
  • Access数据库在使用中急剧膨胀
  • Access数据库?
  • ACCESS数据库
  • Access数据库
  • vb+access 数据库
  • 急! Access数据库
  • asp.net access 数据库
  • win 2000 server + iis 5 可以读但不能写ACCESS数据库!
  • ADO连接Access数据库

关键词

  • .net
  • win98
  • 数据库
  • access
  • 数据
  • d%5c%3
  • 压缩
  • stempfilename
  • sfile
  • spath

得分解答快速导航

  • 帖主:ntit168
  • fontain
  • wenjianyao
  • tjianliang
  • zzlingaaa
  • MudLib
  • tjianliang

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo