导航:
论坛 -> 数据库专区
斑竹:liumazi,waterstone
作者:
2017/3/2 15:53:51
标题:
请问:同一个FDQuery1执行多个操作,会不会有问题?
浏览:1828
加入我的收藏
楼主:
如下,肯定是不行的; FDQuery1.close; FDQuery1.sql.text:=‘select * from tb’; FDQuery1.open; for i:=0 to FDQuery.count do begin FDQuery1.close; FDQuery1.sql.text:=‘update tb set age=12 where id=’+FDQuery1['ID']; FDQuery1.exesql; end; 请问, 1:如果加上事务,是否就可以呢? FCon1.StartTransaction; 。。。 FCon1.Commit; 2:是否多个sql操作,必须多个不同的 FDQuery 才可以呢?
----------------------------------------------
学Delphi不久,会问些初级问题,希望有人指引,不胜感激...
作者:
2017/3/2 16:11:08
1楼:
…… 被禁用帐号,帖子内容自动屏蔽! ……
----------------------------------------------
发布广告,禁用帐号!
作者:
2017/3/3 0:28:03
2楼:
这种是很常用的事务处理,当然可以。
----------------------------------------------
delphi|vue|golang hnysoft|hnyerp+mes+srm
作者:
2017/3/3 0:32:11
3楼:
明显不可以
----------------------------------------------
-
作者:
2017/3/3 9:11:36
4楼:
2 楼是来搞笑的吗? 或者 2 楼是 楼主的马甲? 其实,楼主才是来搞笑的吧。
----------------------------------------------
(C)(P)Flying Wang
作者:
2017/3/3 9:32:30
5楼:
非线程安全组件,所以同时操作同个组件是不行的. 你可以这样,多个线程用多个connection,这样是允许的.
----------------------------------------------
作者:
2017/3/3 9:54:26
6楼:
不可以的应该....最好用两个组件...
----------------------------------------------
山外青山楼外楼,能人背后有能人弄..
作者:
2017/3/3 10:02:41
7楼:
我已经无语了。 都不看楼主的代码,就瞎评论。虽然答案都是 不行。 但是为何不行,居然可以乱说。 假设 FDQuery1 是一个 碗。 当你装了 米饭之后。 你循环 取出碗里的米粒。 取出之后,倒出碗里的东西,然后放入面条。 然后继续循环? 你 线程 事务 还是其他什么东西,能解决 上面的问题? 所以 1 3 6 楼 才是正解。 同时证明,和我有仇的,智商都不咋地。聪明的人 都不会 得罪我。
----------------------------------------------
(C)(P)Flying Wang
作者:
2017/3/3 10:16:55
8楼:
@wang_80919 这么初浅的问题,你也花时间回复,看来你真的挺空的
----------------------------------------------
-
作者:
2017/3/3 10:29:06
9楼:
我本来不想回复的,只想吐槽。 但是,为了防止被人说:光说不练。或者说:只吐槽,不回复。 所以就给一个例子吧。
----------------------------------------------
(C)(P)Flying Wang
作者:
2017/3/3 10:43:24
10楼:
你才不看题,没看到楼主说他已经知道代码是不行了,他问同时操作多个SQL...什么叫同时?按照你的理解就是鼠标狂点Button就是同时了? 我的理解同时就是多个线程并行操作.
----------------------------------------------
作者:
2017/3/4 16:02:13
11楼:
在循环体内的语句没有返回数据的操作,为什么不直接就使用fcon.exesql?
----------------------------------------------
-
作者:
2017/3/4 16:37:52
12楼:
某人说线程可以。 我也认为线程可以。 但是 楼主的代码,在线程里,一样不行。 11 楼是新的正解。 按 1 6 11 楼的正解,楼主的意图不用线程,也能解决。 某人拿不出正解,就只会狡辩。
----------------------------------------------
(C)(P)Flying Wang
作者:
2017/3/4 23:51:31
13楼:
楼主的问题没提到什么线程。wang_80919 (Flying Wang)王八兄为什么要自己脑补呢。 同一个Query多次执行不同的SQL当然是可以的。 如果是放到线程中那当另说。
----------------------------------------------
delphi|vue|golang hnysoft|hnyerp+mes+srm
作者:
2017/3/5 15:24:15
14楼:
13 楼 眼瞎,看不见 5 楼吗? 人家脑补,关老子屁事。 到目前为止依然是 1 3 6 11 楼上正解。 老子的发言,只是吐槽,所以不是正解。 同时再次证明,和我有仇的,智商都不咋地。聪明的人 都不会 得罪我。 因为人家聪明,不和我一般见识,没必要得罪我。
----------------------------------------------
(C)(P)Flying Wang
作者:
2017/3/5 16:24:30
15楼:
FDQuery1执行多个操作理论上是可以的。 但是,具体的数据库事物处理是有限制的,按楼主的代码是不行的。
----------------------------------------------
-
作者:
2017/3/6 12:25:53
16楼:
两种方式, 一是用两个FDQuery,一个用于循环,一个用于执行 FDQuery.close; FDQuery.sql.text:=‘select * from tb’; FDQuery.open; while not FDQuery.Eof do begin FDQuery1.close; FDQuery1.sql.text:=‘update tb set age=12 where id=’+FDQuery['ID']; FDQuery1.exesql; FDQuery.Next; end; 二是用一个FDQuery,一个FDMemTable FDQuery.close; FDQuery.sql.text:=‘select * from tb’; FDQuery.open; FDMemTable.Data:=FDQuery.Data; while not FDMemTable.Eof do begin FDQuery.close; FDQuery.sql.text:=‘update tb set age=12 where id=’+FDMemTable['ID']; FDQuery.exesql; FDMemTable.Next; end;
----------------------------------------------
-