2016-09-13 2 views
2

Je développe une mise à jour APP avec Delphi 10. Je cours Windows 7 64x, FireBird 2.5.1.26351 32x.Erreur "handle de transaction invalide (attente de transaction explicite start)" exécutant le script de Delphi

Ordre d'exécution:

  • Vérifie la version actuelle (déclaration select de Firebird)
  • Téléchargements la mise à jour (via FTP)
  • l'appliquer (les fichiers .exe et execute sql

Le code d'erreur -901 apparaît lorsque j'essaie d'exécuter des fichiers .SQL. Je sais qu'il y a un problème d'incompatibilité avec W7 64x et FDB 32x, mais, je peux tout faire: Backup and Restore (gbak), DB Commands (tous). J'ai essayé avec FDB 64x à la place, et son ne fonctionne pas.

code:

//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; 

Après avoir installé Firebird 2.5.6, a toujours la même erreur -901. Journal des erreurs:

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

essayer Firebird 2.5.6: http://www.firebirdsql.org/en/firebird-2-5-6/ votre version est un peu vieux – magicandre1981

+0

Les codes d'erreur sont relativement inutiles. Certains codes couvrent des dizaines d'erreurs différentes (mais liées). S'il vous plaît poster le message d'erreur réel, ou si vous ne l'avez pas: le numéro de l'erreur (qui est différent du code d'erreur). –

+0

Et publiez également le script SQL que vous essayez d'exécuter. –

Répondre

1

L'erreur indique que vous avez des choses comme 'COMMIT WORK;' dans votre script SQL.

Selon la documentation FireDAC:

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)