如果在设计期已打开adotable(active:=true),那么程序运行期间,数据库表被其他组件修改,而此adotable数据集并没有做相应的改变,请问:
1,如何设计adotable和adoquery,使其随数据改变而自动更新?
2,我的adotable采用手工更新,方法是在相应的事件过程中使此adotable先active:=false然后再active:=true;这样觉得不科学,请问还有没有更好的方法?
3,我不明白adotable.refresh有什么用呢?好象不能更新数据集的?能解释一下作用吗?

解决方案 »

  1.   

    1 几乎没有可行的办法,或者说没有必要
    2 这样也可以,用adotable.refresh
    3 可以的
      

  2.   

    用adotable.refresh好象不行啊
    举例如下
      在同一窗体下,用dbgrid1显示数据,dbgrid1的dataset为adotable1,
    而我更新数据时使用adotable2,而adotable1和adotable2指向的是相同的数据基表,
    如果我用adotable2向数据表加入一条记录post后,我再使用adotable1.refresh
    得不到新的记录,为什么呢?
      

  3.   

    你都改成用AdoQuery看看,应该是可以的
    用AdoTable,你得Close一下然后再Open
      

  4.   

    The Refresh method does not work for all TDataSet descendants. In particular, TQuery components do not support the Refresh method if the query is not 搇ive? To refresh a static TQuery, close and reopen the dataset.
    Refresh并不是对所有的TDataSet派生类都起作用。
    ------
    实在不行的话,close and reopen the dataset.
      

  5.   

    Close后再Open吧
    Refresh是刷新控件的显示的
      

  6.   

    其实我想问一下:
    adotable.active:=false;
    adotable.active:=true;

    adotable.close;
    adotable.open;
    结果、效率有什么不同?
      

  7.   

    楼上说的,实际上是一样的,几乎没什么差别
    adotable.active:=false;就是adotable.close;
    adotable.active:=true;就是adotable.Open;非得说效率的话,前者高一点点,可是谁都感觉不出来的,Adotable.Open这条语句最终还是执行的AdoTable.Active
      

  8.   

    adotable.refresh只是把你后台修改过的数据显示出来,
    运行机制由ADO自动完成;
    但是,它没有把新添加的数据显示出来,这时就要close,open了;
    close,open重新提取满足条件的数据,而refresh只是更新修改过的数据,
    后者效率高
      

  9.   

    为什么同一个表要用两个table呢,那岂 不是麻烦
      

  10.   

    ADOTable.ReFresh;
    DBGrid.Refresh;
      

  11.   

    adotable.close;
    adotable.open;