2

我正在从 Delphi 7 迁移到 Delphi XE4。对于 Delphi XE4,我使用的是 FIBPLUS 7.5。Delphi 7 应用程序运行良好,但在 Delphi XE4 中出现运行时错误:

"Project abc.exe raised exception class EFIBClientError with message frmABC.transRead: Transaction not active"  

考绩档案

var
    transRead: TpFIBTransaction;
    ...
    ...
    //transRead is used like this
    with TpFIBQuery.Create(Self) do
    begin
      Database := dbMyDB;
      Transaction := transRead;
      SQL.Add ('Select .....');
      ExecQuery;
      Close;
      Free;
    end;    

  DFM File

  object transRead: TpFIBTransaction
    DefaultDatabase = dbMyDB
    TimeoutAction = TARollback
    Left = 192
    Top = 196
  end

我已经搜索了整个项目中的所有 pas 和 dfm 文件。我没有找到任何这样的声明:

transRead.Active := True;

但我确实在很多地方找到了以下声明:

if transRead.Active then
begin
..........
..........
end

我也在一些地方看到了这个:

transRead.Active := False;

我们不需要激活交易吗?是自动激活的吗?请向我建议任何线索,以消除此“交易未激活”错误。

4

2 回答 2

4

有两种方法: 1. 在 execQuery 之前启动 Transaction 或 2. 在 TpFibQuery 的 Options 中设置选项字段 qoStartTransaction ,如:

Options := Options + [qoStartTransaction];
于 2013-11-26T09:47:05.360 回答
0

我刚刚设置AutoReconnect = True了 TFIBDatabase 的属性并且它起作用了。

于 2013-11-29T12:35:37.727 回答