自己手动实践了下。
所有表都设置
一个字段有效性规则。库存>=0。
test1、test2、test3 表都初始化一条记录,序号1、库存1.
将下列语句放在一个表单的按钮里。点击按钮执行。
BEGIN TRANSACTION
UPDATE test1 SET 库存=3 WHERE 序号=1
UPDATE test2 SET 库存=
-1 WHERE 序号=1
UPDATE test3 SET 库存=2 WHERE 序号=1
END TRANSACTION
第2条开始更新失败,那么程序会报错,提示失败的信息“比如违反字段规则”。
程序会在第2条语句失败后挂起。
手动终止程序后。
执行txnlevel()查看,事务并没有结束。
手动执行 end transcation,结束事务处理。
第一条语句的更新,test1的库存变为3。
因此没有回滚。
检测哪条错误,将代码整体放入try catch语句中
BEGIN TRANSACTION
TRY
UPDATE test1 SET 库存=3 WHERE 序号=1
UPDATE test2 SET 库存=-1 WHERE 序号=1
UPDATE test3 SET 库存=2 WHERE 序号=1
END TRANSACTION
CATCH TO cErr
?cErr.ErrorNo
&&错误号,这里是1582
?cErr.Message
&&错误信息
?cErr.LineContents
&&执行失败的语句
?cErr.LineNo
&&执行失败语句的行号
?cErr.Details
&&错误的细节信息
?cErr.Procedure
&&产生错误的过程或程序
ROLLBACK
ENDTRY
这样,能看见错误的信息,并能在出现错误时,回滚所有更改。
[此贴子已经被作者于2025-9-23 11:25编辑过]