我用的是数据集组件是:ADOQuery;为了运行其间查找基本资料速度提高,我的ADOQuery在登陆时就打开了,当我的基本资料数据更新时,ADOQuery里没有更新(比如ADOQuery连的是客户资料表,当我增加一个客户时,ADOQuery里的数据不会自动更新),不知ADOQuery怎么才能自动更新?
希望各位GGJJ给个答案!

解决方案 »

  1.   

    ADOQuery.Post;
    ADOQuery.Refresh;
    DBGrid.Refresh;
      

  2.   

    执行一下:
    ADOQuery.Active := False;
    ADOQuery.Active := True;
      

  3.   

    最笨的办法是重新打开一下ADOQuery。如用Close,Open方法。
      

  4.   

    post
    open;如果是批处理要 updatebatch
      

  5.   

    我要的是:ADOQuery不关闭让ADOQuery它本身自动更新哦!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    有没有相关的属性啊?
      

  6.   

    我也遇到过老兄一样的问题,不过后来解决了,我的解决方法是:
    在窗口的OnShow事件里加入:
    ADOQuery1.Close;
    ADOQuery1.Open;
    就会在窗口打开时自动刷新了!
      

  7.   

    楼上的不要误导哟……应该在Post后调用ADOQuery1.Requery方法来重新读取数据集的!
      

  8.   

    hugoon(hugoon): 
    我也遇到过老兄一样的问题,不过后来解决了,我的解决方法是:
    在窗口的OnShow事件里加入:
    ADOQuery1.Close;
    ADOQuery1.Open;
    就会在窗口打开时自动刷新了!
    ---------------------------------------------------------
    me:老兄,如果的我ADOQuery1连接的表有十多万条记录,就算建了索引,查询出来也有一段时间啊,用户不可能每次打开窗体时都等啊,就是因为这样我才把它放在数据模块里,在程序刚运行时执行!------------------------------------------------------------------
     gobiz(拔剑容易收剑难):
    应该在Post后调用ADOQuery1.Requery方法来重新读取数据集的!
    ------------------------------------------------------------------
    me:老兄,每Post后就Requery,这种做法很像也不是很合理啊.
      

  9.   

    ------------------------------------------------------------------
     gobiz(拔剑容易收剑难):
    应该在Post后调用ADOQuery1.Requery方法来重新读取数据集的!
    ------------------------------------------------------------------
    me:老兄,每Post后就Requery,这种做法很像也不是很合理啊.=================================
    有什么不合理的呢?因为不仅仅是一个客户端连接到了数据库,如果别人修改了数据,你如何得到呢?岂不是还要Requery呢?为了保证经常得到最新的记录集,就是要这样的呀!如果你嫌速度慢,其实完全可以采用原生ADO实现,而且加上分页功能,客户端基本感觉不到查询的速度慢的!
      

  10.   

    楼在大哥,我用的是SQLServer;里面很像没有分页功能的哦,那是ORACLE的!我设了一下ADOQuery1的LockType和CursonLocation两个属性;也不行;
    很像设CursonLocation为ctKeyset应该会自动刷新数据的.但不知道怎么不行......
      

  11.   

    我的Item资料是由一个用户端录入的(假如是由一个文员录入),而当我要开采购订单时,我就要选刚录入的Item资料,因此我用一个下拉框组件,并连接到一个数据集:比如adoquery;因为我的adoquery是我刚登陆系统时打开的,而我要的Item资料在我打开系统之后,由另一个用户录入.因此我的下拉框中找不到对应的Item.因为Item表有太多记录,我不想close再open;这样很慢,你叫我怎么办?
      

  12.   

    重新写入SQL(select * from talbe_name where  )然后执行,就可以了
      

  13.   

    单独再设一个按钮,通过点击按钮来刷新,点击按钮执行一下语句:adoquery.refresh;
      

  14.   

    你增加数据肯定要用另外一个adoquery,增加完毕后,在执行一次你的adoquery的sql语句,另外你所有的adoquery要用同一个connection
      

  15.   

    觉得用ADOQUERY。CLOSE
          ADOQUERY。OPEN执行后  会降低速度
    我以前也用  重新写入SQL(select * from talbe_name where  )然后执行 现在觉得ADOQuery.Post;
    ADOQuery.Refresh;
    DBGrid.Refresh;
      

  16.   

    ADOQuery.Active := False;
    ADOQuery.Active := True;
    最简单,而且占内存又少。
      

  17.   

    回复人: abcdefgdeng(dqx) ( ) 信誉:100  2005-06-30 12:31:00  得分: 0  
     
     
       楼在大哥,我用的是SQLServer;里面很像没有分页功能的哦,那是ORACLE的!我设了一下ADOQuery1的LockType和CursonLocation两个属性;也不行;
    很像设CursonLocation为ctKeyset应该会自动刷新数据的.但不知道怎么不行......
      
     
    =========================================================================
    无语……难道你不知道ADO本身就集成了分页功能吗?管你什么数据库呢?甚至连Access都可以实现分页,否则ASP就没有生存余地啦!PageSize,PageCount……本来就是ADO的一个特性,不过DELPHI并没有把它封装起来而已,但是我们可以利用ADOQuery.RecordSet.PageSize、ADOQuery.RecordSet.PageCount……等来间接实现,不过这样的用法,针对你的DBGrid是没有用的,你可以使用ListView等来手工写代码显示数据……,这样容易控制,反正我已经好久不用DBGrid啦,局限性太强,而且不容易控制,随时都可能出现错误提示!
      

  18.   

    flexitime(我喜欢写程序) (
    我觉得你说的很有道理
    为什么一次要查询几百万条记录呢?
    如果更新的话,只要更新你修改的那条记录不就行了?建议使用bde,我感觉bde比ado快很多,特别是处理非常多的纪录的时候
      

  19.   

    ADOQuery.Active := False;
    ADOQuery.Active := True;
    最简单