Access中含有图片字段,我在程序中修改图片
数据库会增大,即使修改由大图片变为小图片也会增大.我试着将数据库的所有图片删掉,数据库大小还是没变化.是不是数据库并没有把以前的图片删除?

解决方案 »

  1.   

    用独占方式打开Access文件,然后选菜单 工具-数据库实用工具-压缩和修复数据库就ok了。
      

  2.   

    function TFormMain.CompactDatabase(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
      DataSource1.DataSet.Active:=False;
      ADOConnection1.Connected:=False;
      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;
      ADOConnection1.Connected:=True;
      DataSource1.DataSet.Active:=True;
    end;CompactDatabase(ExtractFilePath(Application.ExeName)+'Data\Default.mdb','12345');//调用
      

  3.   

    ADOConnection1.Connected的值为true或false有什么区别?
    我一直把ADOConnection1.Connected=false
    好像数据库也能连,也没断开啊
      

  4.   

    Access有没有选项自动调节数据库的大小
    当数据库图片删掉,数据库自动减小?
      

  5.   

    应该是的。因为,它要写入日志内容。而你删除掉的那些记录也是日志的内容之一。清空那些日志内容可以减小数据库的大小。Access的 菜单 工具->数据库实用工具->压缩和修复数据库就是这样做的。li_zhifu(东北人) 是一种可行的法。
    你可驼以定时调用那个过程。也可以做成一种功能放在你的软件中。
      

  6.   

    来晚了。
    Rijie(做人真难) 楼上各位的解答都对,就照他们说的做吧。
      

  7.   

    来晚了。
    Access不是真正SQL server, 日志管理远不及其他的, 他根本不会重用已经清空的位置, 所以Access的数据文件, 只会随着新插入动作, 而线性的加大.
    而上面的Compact Database, 其实是把未删除的数据抄去新文件, 抄完後才把旧文件删去, 然後新文件改名为原来的名称. 所以你原有的文件若已经占去硬盘的大部份, 所剩的空间不足够作新文件时, Compact Database将无法实行.