巨难!!从来没遇到过的问题!求解!adoquery------顶者有分!不够再加

时间:2021-04-23 21:20:07
我有一表A(id,name)为主要表。另一表B(sn,id,power)为次要表。

分别用adoquery1,adoquery2连接。并分别显示在grideh1,grideh2中。
当在grideh1中选取一条纪录时。adoquery2在表B中查找B.id=A.id的纪录并显示在grideh2中。并可在grideh2中修改这些记录。
以上这些都可实现,最难的部分在于:

*重点*
adoquery2用的是ltBatchOptimistic模式。并且所有B表中的记录必须在点击一个Btn_save后才能全部更新保存。可是每次在grideh1中选取记录之后。还要求Grideh2中的内容更新。如果上一次的数据没有updatebatch的话。就不会被保存了。如果updatebatch也不行,因为要求必须在最后点按钮时才能全部保存!!!

小弟想了很久,试着用动态创建adoquery的方法解决。但是极不好控制,并且巨耗资源。


23 个解决方案

#1


当grideh1中选取一条纪录时 如果Grideh2中的内容更新了 提示用户保存一次不可以吗?

当grideh1中选取一条纪录时 是不是adoquery2要更换查询语句呢

#2


如果数据量不大,可以一次性用adoquery2.open打开所有记录。
然后采用adoquery2.filter来控制显示的记录。
这样能够满足你的需求。

#3


up
接分

#4


同意 windindance(风舞轻扬)的做法,
對於數據量大的,只能用 yleiou(生活真痛苦) 的做法了,
沒有什麼不方便的,大家也都是這麼做的。

#5


to:yleiou(生活真痛苦) 
   如果是那样就好了,用户就是要求最后统一保存。我也没办法!

to:windindance(风舞轻扬)  
   请详细一点好吗。谢谢。filter怎么控制?

#6


grideh2肯定不能通过查询数据库来显示,所以只能另僻溪径,ADOQuery2中取出所有表2中的bookid在adoquery1中出现的记录,这样grideh2来自ADOQuery2而不是数据库中

#7


ADOQuery2.SQL.Text := 'select * From t';
ADOQuery2.Open;

ADOQuery1.AfterScroll:
ADOQuery2.Filter := 'id = ' + VarToStr(ADOQuery1['id']);
ADOQuery2.FIltered := true;

#8


学习帮顶

#9


顶者有分!

#10


关注,我也要编类似的程序,但没这么巨难!学习~~~~~

#11


我试一下!

#12


#13


filter之后,没有提交的数据不会丢失吧

#14


学习

#15


filter 只会对ADO 的缓冲中的数据排序不会丢失数据吧

#16


顶吧。

#17


up

#18


不是明细表的关系吗/

#19


学习

#20


试没试过用事务来解决

#21


帮顶

#22


顶一下

#23


哈哈,终于解决了。用的windindance(风舞轻扬)的方法

ADOQuery2.SQL.Text := 'select * From t';
ADOQuery2.Open;

在每次选择时
ADOQuery2.Filter := 'id = ' + VarToStr(ADOQuery1['id']);
ADOQuery2.FIltered := true;

没问题的话就要结贴了

#1


当grideh1中选取一条纪录时 如果Grideh2中的内容更新了 提示用户保存一次不可以吗?

当grideh1中选取一条纪录时 是不是adoquery2要更换查询语句呢

#2


如果数据量不大,可以一次性用adoquery2.open打开所有记录。
然后采用adoquery2.filter来控制显示的记录。
这样能够满足你的需求。

#3


up
接分

#4


同意 windindance(风舞轻扬)的做法,
對於數據量大的,只能用 yleiou(生活真痛苦) 的做法了,
沒有什麼不方便的,大家也都是這麼做的。

#5


to:yleiou(生活真痛苦) 
   如果是那样就好了,用户就是要求最后统一保存。我也没办法!

to:windindance(风舞轻扬)  
   请详细一点好吗。谢谢。filter怎么控制?

#6


grideh2肯定不能通过查询数据库来显示,所以只能另僻溪径,ADOQuery2中取出所有表2中的bookid在adoquery1中出现的记录,这样grideh2来自ADOQuery2而不是数据库中

#7


ADOQuery2.SQL.Text := 'select * From t';
ADOQuery2.Open;

ADOQuery1.AfterScroll:
ADOQuery2.Filter := 'id = ' + VarToStr(ADOQuery1['id']);
ADOQuery2.FIltered := true;

#8


学习帮顶

#9


顶者有分!

#10


关注,我也要编类似的程序,但没这么巨难!学习~~~~~

#11


我试一下!

#12


#13


filter之后,没有提交的数据不会丢失吧

#14


学习

#15


filter 只会对ADO 的缓冲中的数据排序不会丢失数据吧

#16


顶吧。

#17


up

#18


不是明细表的关系吗/

#19


学习

#20


试没试过用事务来解决

#21


帮顶

#22


顶一下

#23


哈哈,终于解决了。用的windindance(风舞轻扬)的方法

ADOQuery2.SQL.Text := 'select * From t';
ADOQuery2.Open;

在每次选择时
ADOQuery2.Filter := 'id = ' + VarToStr(ADOQuery1['id']);
ADOQuery2.FIltered := true;

没问题的话就要结贴了