以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  for循环中事务回滚能实现吗  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=195015)

--  作者:vimin
--  发布时间:2025/2/16 21:06:00
--  for循环中事务回滚能实现吗
我现在碰到一个for循环中想回滚的需求,代码就不提了,不知道怎么写,把思路写一下,帮我看看有没有可能实现。
库存表A,入库记录表B。
接受“货号=x”和“货号=y”的两条数据记录。
for each 货号 in ...
sql.CommandText = "select * fr om {A} where 货号 = x"
        tbA = sql.ExecuteReader(True)
sql.CommandText = "select * fr om {B} where 货号 = x"
        tbB = sql.ExecuteReader(True)
A...操作,B...操作
A.save()
B.save()
If a.HasChanges OrElse b.HasChanges Then \'如果任何一个表保存失败
        cmd.Rollback()  \'则回滚事务
   Else
        cmd.Commit()  
\'
否则提交事务
   End 
If
next

上面大概这么个意思。
我是希望第一条货号=X时成功,但第二条货号=Y有问题时能回滚。但第一条通过时A、B两个表保存过了,这种情况,第二条异常的时候,能回滚整个操作吗?
望大神指点一下思路。

--  作者:有点蓝
--  发布时间:2025/2/16 21:31:00
--  
如果事务是在for循环之外启动的,可以也肯定会回滚整个操作。

如果事务是在for循环之内启动的,只能回滚当前操作。

--  作者:vimin
--  发布时间:2025/2/16 22:22:00
--  
好的,那我明白了,我以为SAVE()了就写进数据库了,无法回滚了