查询交易实际上做了什么?

时间:2015-09-17 01:36:51

标签: delphi

我想知道如果连接在事务中或者实际上没有查询是什么?

示例:

....
try
   if not DATA_MODULE.ACRDatabase1.InTransaction then
       DATA_MODULE.ACRDatabase1.StartTransaction;
   ....
   DATA_MODULE.ACRDatabase1.Commit();
except
   DATA_MODULE.ACRDatabase1.Rollback;

如果它检测到有另一个事务正在进行并等待另一个事务完成然后执行或者什么,它会暂时停止当前事务吗?或者,如果检测到另一个事务,它是否会失败(回滚)?

2 个答案:

答案 0 :(得分:0)

尝试启动已启动的事务将引发异常。对InTransaction的调用只是确定事务是否已经启动并返回True / False响应。

答案 1 :(得分:0)

我更喜欢这个...如果您在编辑时遇到任何问题,它会保护您...并且只有在您遇到问题时才会回滚。如果在StartTransaction之后引发任何异常......您将永远不会进入Commit。你将永远运行finally并确保你不在Tranaction中,如果是这样的话。我尽量不使用Try Except,不必担心Raise

try
 DATA_MODULE.ACRDatabase1.StartTransaction;
 ....
 DATA_MODULE.ACRDatabase1.Commit();
finally
  if DATA_MODULE.ACRDatabase1.InTransaction then
    DATA_MODULE.ACRDatabase1.Rollback;

至少代码应该重新启动异常,否则您的用户永远不会知道数据未保存的原因。 ReRaising Exception