Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 事务的查询实际上是做什么的?_Delphi - Fatal编程技术网

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{我们开始一个}。所以基本上这是一个正确/错误的回答。谢谢你们两位。