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

解决方案 »

  1.   

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

  2.   

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

  3.   

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

  4.   

    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;
      

  5.   

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

  6.   

    或许可以参考一下
    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%3E