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)
はFirebirdの2.5.6を試してみてください。http://www.firebirdsql.org/en/firebird-2-5-6/バージョンがAでありますビットの古い – magicandre1981
エラーコードは比較的役に立たない。いくつかのコードは、数十種類の異なる(しかし関連する)エラーをカバーします。実際のエラーメッセージを投稿してください。ない場合は、エラー番号(エラーコードとは異なります)を送信してください。 –
また、実行しようとしているSQLスクリプトを投稿します。 –