结束交易的正确方法是什么?:
Query.SQL.Add('START TRANSACTION;');
-----
-----
Query.SQL.Add('COMMIT;');
Query.ExecSQL;
Run Code Online (Sandbox Code Playgroud)
要么
Query.SQL.Add('START TRANSACTION;');
-----
-----
Query.ExecSQL;
Query.SQL.Add('COMMIT;');
Run Code Online (Sandbox Code Playgroud)
编辑:或者这样:
.......
.......
try
if not Database1.InTransaction then
Database1.StartTransaction;
Query.ExecSQL;
Database1.Commit;
except on E : Exception do begin
Database1.Rollback;
Run Code Online (Sandbox Code Playgroud)
通常你必须在try下控制事务,除了防止插入或更新语句的错误..所以我建议在tConnection上使用start transaction而不是在try下使用tquery
try
AdoConnection1.BeginTrans;
----
----
query1.ExecSql;
AdoConnection1.CommitTrans;
except
AdoConnection1.RollbackTrans;
-----
// manage the exception after rollback
-----
end;
Run Code Online (Sandbox Code Playgroud)
注意:将RollbackTrans放在异常管理的第一行非常重要,因为任何其他代码如showmessage或其他任何代码都可以锁定其他用户的数据库表的一部分