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"  

PAS ファイル

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

2 つの方法があります: 1. execQuery の前にトランザクションを開始するか、または 2. TpFibQuery の Options で optionsfield qoStartTransaction を次のように設定します。

Options := Options + [qoStartTransaction];
于 2013-11-26T09:47:05.360 に答える