delphi - 为什么有时我会收到 “Invalid transaction object”异常?

标签 delphi dbx

这段代码有什么问题吗?
有时我收到未处理的“无效交易对象”异常:

procedure BlaBla;
var
  TD: TDBXTransaction;
begin
  TD := SQLConnection.BeginTransaction;
  try
    SQLConnection.ExecuteDirect('some sql command');
    SQLConnection.ExecuteDirect('some sql command');
    SQLConnection.CommitFreeAndNil(TD);
  except
    SQLConnection.RollbackFreeAndNil(TD);
  end;
end;

此异常正在向用户提出,因此我假定它由RollbackFreeAndNil提出,因为所有其余部分都在try..except内部。

我应该用另一个try..except包装RollbackFreeAndNil吗?真是一团糟。

我正在使用Delphi 2009,带有Firebird 2.1的DBX和Devart的驱动程序。

最佳答案

如果CommitFreeAndNil抛出异常会怎样?

将调用RollbackFreeAndNil。 TD会有效吗?

您正在吃异常(exception),因此是证据。不要那样做重新抛出:

procedure BlaBla;
var
  TD: TDBXTransaction;
begin
  TD := SQLConnection.BeginTransaction;
  try
    SQLConnection.ExecuteDirect('some sql command');
    SQLConnection.ExecuteDirect('some sql command');
  except
    SQLConnection.RollbackFreeAndNil(TD);
    raise;
  end;
  SQLConnection.CommitFreeAndNil(TD);
end;

关于delphi - 为什么有时我会收到 “Invalid transaction object”异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/420022/

相关文章:

delphi - 如何在delphi中使用fmx扩展

delphi - Delphi中如何递归删除空目录

delphi - 如何在 Delphi 中将一个 StringList 拆分为两个字符串列表?

delphi - TFileOpenDialog 文件类型 : how to change at runtime

c++ - 在 gdb 中显示取消引用的 STL 迭代器

delphi - 如何使组件在表单设计器中消失?

c - 过程识别

c - 使用 dbx 进行调试并使用 rtcaudit.so 检查内存泄漏

c - AIX 中的共享对象加载?