我先把一个数据库的一张表的数据删除,然后再把Access中一个数据库的另一张表的数据导入到
那张空表中,但是导入之后,数据库文件的大小从7M多增加到了几十兆,数据导入之前,这两个
数据库文件大小是差不多的,请教一下是怎么回事?

解决方案 »

  1.   

    好像ACCESS数据库中删除的数据空间不能自动释放,必须执行压缩才能释放空间的!所以如果不对Access数据库进行压缩处理,那么永远都是越来越大的!
      

  2.   

    转:
    //uses ComObj;
    function CompactDatabase(AFileName,APassWord:string):boolean;
    //压缩与修复数据库,覆盖源文件 uses ComObj;
    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;
      

  3.   

    楼上的方法是编程实现,而且用Access里面的工具-》数据库实用工具-》压缩或修复数据库也可以实现的!
      

  4.   

    to 大家&
    TO zzlingaaa(小舟) :
    俺找这东东好久了,学习一下。~~感谢!
      

  5.   

    function CompactDatabase(AFileName,APassWord:string):boolean;
    CopactDataBase('数据库绝对路径及名称','数据库密码,没有密码不要填,否则会变成有密码的')
    返回值表示是否成功
      

  6.   

    删除之后要压缩数据库可以在删除后调用如下函数function CompactDatabase():boolean;
    //压缩与修复数据库,覆盖源文件
    var
      JE:OleVariant;
      ConnStr,DBPath:String;  Dao: OLEVariant;
    begin
       DBPath:=ExtractFilePath(Application.ExeName);
      JE:=CreateOleObject('DAO.DBEngine.36');
      JE.CompactDatabase(DBPath+'/BAk.mdb',DBPath+'/new.mdb');
      DeleteFile(PAnsiChar(DBPath+'/BAk.mdb'));
      RenameFile(PAnsiChar(DBPath+'/new.mdb'),PAnsiChar('BAk.mdb'));
    end;