在事务里面加入循环代码,还是应该在循环里面加入事务代码?我测试都好用,怎么样合理

NEEZA哪吒 2022-11-15 19:15:00

  While Not ADOQuery1.Eof do
  begin
    try
      Main.ADOConnection1.BeginTrans;
      //我的代码
      

      //我的代码
      Main.ADOConnection1.CommitTrans;
    except
      Main.ADOConnection1.RollbackTrans;
    end;

      ADOQuery1.Next;      

  end;

 

另一个就是,先用事务,在事务里面在写循环。怎么用是正确的?

 

...全文
63 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
YiYanXiYin 2022-11-23
  • 打赏
  • 举报
回复 1

BeginTrans和end之间的代码处于同一个事务中, 同一事务中的代码要么都成功要么都失败, 如果循环里面有事务, 那么每循环一次,都会产生一个独立的事务, 理解了这个你才知道怎么选择

JohnYale 2022-11-18
  • 打赏
  • 举报
回复 1

用一个事务省时间 一条数据一个事务 会让你等得心焦

tanqth 2022-11-17
  • 打赏
  • 举报
回复 1

主要应该还是你的处理内容需要去选择

tanqth 2022-11-17
  • 打赏
  • 举报
回复 1

没明白“循环里面加入事务代码”,你这意思是说有多个事务?然后循环执行这些不同的事务?
如果你只有一个事务,那么,一定就只是在事务里循环。
所以,你这表达的应该是两种不同的事。

你目前的代码,是针对ADOQuery1里每一条数据需要处理的都是一个事务。

NEEZA哪吒 2022-11-18
  • 举报
回复
@tanqth 就一个事务,那我就明白了。
墨梅无痕 2022-11-16
  • 打赏
  • 举报
回复 1

使用“事务”的目的是保持相关数据的一致性。
一种情形是一条数据记录发生了更改,同时影响到其他若干数据表中的相关数据的更改,此时适用外循环内事务的模式;(比如某个零件的批号发生更改)
第二种情形是同一数据表中有成批的数据记录必须同时更改,此时适用外事务内循环的模式;(比如成批商品的单价按照某个折扣更改)
另外还有分布式事务,这个就比较难了,我也不太懂。

NEEZA哪吒 2022-11-17
  • 举报
回复
@墨梅无痕 谢谢,我感觉我的要求可能适合在事务内做循环。
发帖
Delphi

5179

社区成员

Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
帖子事件
创建了帖子
2022-11-15 19:15
社区公告
暂无公告