如何对AdoQuery的查询结果进行update操作?(在线等待) (100分)

  • 主题发起人 主题发起人 delphi25
  • 开始时间 开始时间
D

delphi25

Unregistered / Unconfirmed
GUEST, unregistred user!
一窗体有两个AdoQuery控件(AdoQuery1,AdoQuery2),我用AdoQuery1控件从表中取出一批数据并显示在DbGrid1上(假如这个表名为Order,AdoQuery1的SQL语名为:Select * from Order Where OrderState='未审核'),我现在如何直接对AdoQuery控件数据进行Update,把查询出来的数据的字段OrderState值全部更新为'已审核',并在DbGrid1控件刷新.
注意:
由于我有时AdoQuery1选出的数据记录可能很大,所以不希望一条一条记录进行Edit,然后post操作.如果AdoQuery2的SQL语句设置为:Update Order Set OrderState='已审核' Where OrderState='未审核',则刷新数据后,DbGrid1的显示记录为空啦!请高手指教!
 
我用AdoQuery1控件从表中取出一批数据并显示在DbGrid1上(假如这个表名为Order,AdoQuery1的SQL语名为:Select * from Order Where OrderState='未审核'
------------
如果AdoQuery2的SQL语句设置为:Update Order Set OrderState='已审核' Where OrderState='未审核'
------------
则刷新数据后,DbGrid1的显示记录为空啦
----------------
為空有什麼不對嗎?因為你update了呀.
 
是没错,不过我的要求是,刷新数据后,DbGrid1一样显示那批数据,并且跟着更新orderState字段值.
 
ado.sql.text:='Update Order Set OrderState='已审核' Where OrderState='未审核'''
AdoQuery2.execsql;
AdoQuery1.requery;
 
AdoQuery1的SQL语名为:Select * from Order Where OrderState='已审核'
 
你的AdoQuery1的SQL语名为:Select * from Order Where OrderState='未审核'
当你更新为Set OrderState='已审核' ,你再查询Where OrderState='未审核'
能有结果吗,
除非你把adoquery.locktype:=ltupdatebatch
 
大家应该还不太清楚我说的意思,我再说一下我的意思吧:
我的意思是:当我更新表之后,我要('要':这就是我的要求)在DbGrid1控件的那批数据还存在,并且OrderState字段也跟着更新,显示给用户浏览!
 
如果我一条一条数据修改的话,就可以达到我的要求,如:
for i:=1 to AdoQuery1.RecordCount do
begin
AdoQuery1.edit;
AdoQuery1.FieldbyName('OrderState').AsString:='已审核';
AdoQuery1.Post;
AdoQuery1.Next;
end;
但是,万一我的数据量大时,这种方法就不行啦!
 
如果要集体更新,又要显示更改过的数据
除了一条条的更新,除了一条条的更新外,还有一种方法
就是在表中增加一个field来标志刚才查询的数据.
例如:(假如增加的field是flag)
用adoquery1查询完毕后,马上修改flag=1(默认为0)
update 完毕之后就 显示flag=1的数据
关闭form的时候 把所有flag=0就可以了





 
AdoQuery1查询的是‘未审核’如果你的涮新是关闭后重新打开,那么当然没有数据了。
程序不够完善,AdoQuery2没什么作用.
以上有很多种方法:
用临时表,
直接写update 的SQL语句
用存储过程
 
最开始AdoQuery1的SQL语名为:Select * from Order Where OrderState='未审核'
更新:AdoQuery2的SQL语句设置为:Update Order Set OrderState='已审核' Where OrderState='未审核'
更新完后再刷新
将AdoQuery1的SQL语句该改为:Select * from Order Where OrderState='已审核'
其实011101已经解决了你的问题
就是要在最后重新写AdoQuery1的SQL语句,并Open一下。
 
To 楼上的:
我觉得你理解的有点问题,我同意huangseng的做法,因为如果表中有100条数据,50个已审核50个未审核,那么,第一次查询结果应该是50个未审核的,更新后,再仅仅是刷新,那么出来的应该是100个已审核了数据,这样就得到比第一次的结果的更大范围的记录集了,对吧?
所以,huangseng考虑的还是比较全面的。

By:Justin
 
但是,即使这样我想数据量上来了以后,楼主要面对的问题也可能会很痛苦啊[8D]
 
说了这么久,也只有 huangseng和zLight两位兄弟理解了我的意思,huangseng的方法方法是可以实现,不过,我觉得如果添加一个字段flag,那么出错的机率就要更高,如果两三个人同时进行update时,可能就会有问题啦!
 
多人接受答案了。
 
后退
顶部