2016-09-13 13 views
2

Delphi 10でUpdate APPを開発中です。Windows 7 64x、FireBird 2.5.1.26351 32xを実行しています。エラー「無効なトランザクションハンドル(明示的なトランザクション開始が必要です)」Delphiのスクリプトを実行

実行順序:

  • チェックし、現在のバージョン(Firebirdのデータベースからselect文)(FTP経由)
  • ダウンロード更新
  • が(.exeファイルを適用し、.SQLを実行)

.SQLファイルを実行しようとすると、エラーコード-901が表示されます。私はW7 64xとFDB 32xには互換性の問題があることを知っていますが、私はすべてを行うことができます:バックアップと復元(gbak)、DBコマンド(すべて)。代わりにFDB 64xを試してみましたが、動作しませんでした。

コード:

//Components 
FDWaitCursor: TFDGUIxWaitCursor; 
FDDriverLink: TFDPhysFBDriverLink; 
FDConnection:TFDConnection; 
FDScript: TFDScript; 

function TTHR_Script.CreateComponents:boolean; 
begin 
    try 
    FDDriverLink := TFDPhysFBDriverLink.Create(FDDriverLink); 
    FDWaitCursor := TFDGUIxWaitCursor.Create(FDWaitCursor); 

    FDConnection := TFDConnection.Create(FDConnection); 
    with FDConnection do 
    begin 
     DriverName := 'FB'; 
     Params.UserName := THRBanco.BDUser; 
     Params.Password := THRBanco.BDPass; 
     Params.Database := THRBanco.DIROrigem; 
    end; 

    FDScript := TFDScript.Create(FDScript); 
    with FDScript do 
    begin 
     Connection := FDConnection; 
     OnConsolePut := FDScript_ConsolePut; 
    end; 
    Result := true; 
    except on E:Exception do 
    begin 
     Result := false; 
    end; 
    end; 
end; 

procedure TTHR_Script.ExecLogs; 
var 
    F : integer; 
    SR : TSearchRec; 
begin 
    F := FindFirst(ExtractFilePath(Application.ExeName)+'\manager\update\logs\*.sql',faArchive,SR); 
    FDConnection.Open; 

    while F = 0 do 
    begin 
    with FDScript do 
    begin 
     SQLScripts.Clear; 
     SQLScriptFileName := ExtractFilePath(Application.ExeName)+'\manager\update\logs\'+SR.Name; 
     ValidateAll; 
     ExecuteAll; 
    end; 
    Application.ProcessMessages; 
    F := FindNext(SR); 
    end; 
    FDConnection.Close; 
end; 

のFirebird 2.5.6をインストールした後、まだ同じ-901エラーを得ました。エラーログ:

update empresa set emp_verbanco='2016.55'; 
[13_09_2016 | 14:29]: Ok [00:00:00.047]. 
[13_09_2016 | 14:29]: update empresa set emp_versis='2016.55'; 
[13_09_2016 | 14:29]: Ok [00:00:00.016]. 
[13_09_2016 | 14:29]: commit work; 
[13_09_2016 | 14:29]: ERROR: Dynamic SQL Error SQL error code = -901 invalid transaction handle (expecting explicit transaction start) 
+0

はFirebirdの2.5.6を試してみてください。http://www.firebirdsql.org/en/firebird-2-5-6/バージョンがAでありますビットの古い – magicandre1981

+0

エラーコードは比較的役に立たない。いくつかのコードは、数十種類の異なる(しかし関連する)エラーをカバーします。実際のエラーメッセージを投稿してください。ない場合は、エラー番号(エラーコードとは異なります)を送信してください。 –

+0

また、実行しようとしているSQLスクリプトを投稿します。 –

答えて

1

エラーは、「COMMIT WORK;」のようなものがあることを示しています。あなたのSQLスクリプトで。 FireDACのドキュメントを1として

Resolving Incompatibilities

Firebird ISQL works in non-autocommit mode. By default, the autocommit mode for TFDScript/TFDConnection is turned on. For better compatibility, set FDConnection.TxOptions.AutoCommit to False before the script execution. Or execute the SET AUTOCOMMIT OFF script command.

http://docwiki.embarcadero.com/RADStudio/Berlin/en/Executing_SQL_Scripts_(FireDAC)

関連する問題