如果在设计期已打开adotable(active:=true),那么程序运行期间,数据库表被其他组件修改,而此adotable数据集并没有做相应的改变,请问:
1,如何设计adotable和adoquery,使其随数据改变而自动更新?
2,我的adotable采用手工更新,方法是在相应的事件过程中使此adotable先active:=false然后再active:=true;这样觉得不科学,请问还有没有更好的方法?
3,我不明白adotable.refresh有什么用呢?好象不能更新数据集的?能解释一下作用吗?
1,如何设计adotable和adoquery,使其随数据改变而自动更新?
2,我的adotable采用手工更新,方法是在相应的事件过程中使此adotable先active:=false然后再active:=true;这样觉得不科学,请问还有没有更好的方法?
3,我不明白adotable.refresh有什么用呢?好象不能更新数据集的?能解释一下作用吗?
2 这样也可以,用adotable.refresh
3 可以的
举例如下
在同一窗体下,用dbgrid1显示数据,dbgrid1的dataset为adotable1,
而我更新数据时使用adotable2,而adotable1和adotable2指向的是相同的数据基表,
如果我用adotable2向数据表加入一条记录post后,我再使用adotable1.refresh
得不到新的记录,为什么呢?
用AdoTable,你得Close一下然后再Open
Refresh并不是对所有的TDataSet派生类都起作用。
------
实在不行的话,close and reopen the dataset.
Refresh是刷新控件的显示的
adotable.active:=false;
adotable.active:=true;
和
adotable.close;
adotable.open;
结果、效率有什么不同?
adotable.active:=false;就是adotable.close;
adotable.active:=true;就是adotable.Open;非得说效率的话,前者高一点点,可是谁都感觉不出来的,Adotable.Open这条语句最终还是执行的AdoTable.Active
运行机制由ADO自动完成;
但是,它没有把新添加的数据显示出来,这时就要close,open了;
close,open重新提取满足条件的数据,而refresh只是更新修改过的数据,
后者效率高
DBGrid.Refresh;
adotable.open;