为什么我的access越来越大啊!老问题了!ado + access?
我的程序对数据库操作很频繁,结果数据库愈来愈大,但是我的数据库中的数据量
是保持不变的。那位能给格解决方案啊?

解决方案 »

  1.   

    压缩数据不能识别是因为非法关机等导致数据锁定,只要在运行程序之前删掉XX.ldb, 即可
      

  2.   

    数据库的压缩
    procedure TMainForm.access1Click(Sender: TObject);
    var
      dao:OLEVariant;
    begin
    //  adoconnection1.Close;//压缩是以独占方式进行的;压缩前要关闭数据库连接。
      screen.Cursor:=crHourGlass;
      dao:=CreateOleObject('DAO.DBEngine.36');//access2000要用dao3.6,在access97上用35和36都可以
      dao.CompactDatabase('vglocal.mdb','temp.mdb');
      DeleteFile('vglocal2.mdb');
      RenameFile('temp.mdb','vglocal.mdb');
    //  adoconnection1.Open;
    //  adotable1.Active:=true;
      screen.Cursor:=crDefault;
      Showmessage('本地数据库压缩完成');
      end;
      

  3.   

    什么叫“数据库愈来愈大,但是我的数据库中的数据量
    是保持不变的”是access2000么?access2000对大数据量的支持做的比97已经强许多了
      

  4.   

    有一个更简单的办法,Microsoft知道Access会越变越大,所以设计了关闭时自动压缩的功能,在Access里面打开数据库的属性,里面就有这个选项,这样你的程序关闭的时候就自动压缩了一次数据库,我就是这样做的,十分简单的说。
      

  5.   

    infowain(infowain) :
    我怎么在2000中找不到自动压缩这个选项
      

  6.   

    打开ACCESS2000
    工具->选项->常规->关闭时压缩。
      

  7.   

    //到入Dll连接库,找到dao360.dll文件导入
    该文件在
    C:\Program Files\Common Files\Microsoft Shared\DAO//压缩数据库
    //DataBaseName 数据库的全路径
    Function _CompactDataBase(DataBaseName :String) :Byte;
    var
       d:dbengine;
       path,tmppath:String;
    begin
      path:=DataBaseName;
      tmppath:=r_SysInfo.Path+'data\Ahead_ITRC_Localtmp.mdb';
      try
        d:=codbengine.Create;
        i_dmDB.i_adoLocalDB.Close;   //关闭数据连接
        if fileexists(tmppath) then deletefile(tmppath);  //如果有备用文件先删除
        d.CompactDatabase(path ,tmppath,'',0,'');   //压缩
        deletefile(path); //删除
        renamefile (tmppath,path);  //重命名
      except
        result:=0;                      
        exit;
      end;
      result:=1;
    end;压缩了以后在进行连接
    有一点必须要注意,在新安装的98没有
    C:\Program Files\Common Files\Microsoft Shared\DAO  这个目录
    所以得的程序使用的函数会包错,,解决办法,下载一个注册表文件
    在安装程序的时候,吧2000下的这个目录拷贝到98下面,然后注册注册表文件
    就可以值用函数了
    ,如果找不到注册表文件,发短消息给我。