Delphi 事务的查询实际上是做什么的?
我想知道,查询连接是否处于事务中实际上做了什么 例如:Delphi 事务的查询实际上是做什么的?,delphi,Delphi,我想知道,查询连接是否处于事务中实际上做了什么 例如: .... try if not DATA_MODULE.ACRDatabase1.InTransaction then DATA_MODULE.ACRDatabase1.StartTransaction; .... DATA_MODULE.ACRDatabase1.Commit(); except DATA_MODULE.ACRDatabase1.Rollback; 如果它检测到有另一个事务正在进行,
....
try
if not DATA_MODULE.ACRDatabase1.InTransaction then
DATA_MODULE.ACRDatabase1.StartTransaction;
....
DATA_MODULE.ACRDatabase1.Commit();
except
DATA_MODULE.ACRDatabase1.Rollback;
如果它检测到有另一个事务正在进行,并等待另一个事务完成,然后才执行,它是否会临时停止当前事务?或者,如果检测到另一个事务,它只是不点火(回滚)?尝试启动已启动的事务将引发异常。对
InTransaction
的调用仅确定事务是否已启动,并返回真/假响应 我更喜欢这个…如果您在编辑时遇到任何问题,它会保护您…只有在您在提交时遇到问题时才会回滚。如果在StartTransaction之后引发任何异常…您将永远无法进行提交。您将始终运行finally,并确保未处于事务中(如果是回滚)。我尽量不使用try,除了,不用担心加薪
try
DATA_MODULE.ACRDatabase1.StartTransaction;
....
DATA_MODULE.ACRDatabase1.Commit();
finally
if DATA_MODULE.ACRDatabase1.InTransaction then
DATA_MODULE.ACRDatabase1.Rollback;
至少代码应该重新引发异常,否则您的用户永远不会知道数据为什么没有保存 否。它确保如果事务尚未启动,则启动一个事务。我认为,代码清楚地说明了这一点。如果没有…内部交易,则StartTransaction意味着如果我们还没有在交易中,则启动一个交易。你自己用简单的英语读一下,就像上面写的那样:如果不是数据模块ACRDatabase1.InTransaction{如果我们现在不在事务中}数据模块ACRDatabase.StartTransaction{我们开始一个}。所以基本上这是一个正确/错误的回答。谢谢你们两位。