自己手动实践了下。
所有表都设置
  一个字段有效性规则。库存>=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编辑过]