2016-09-13 4 views
2

델파이 10으로 업데이트 APP를 개발 중입니다. 저는 Windows 7 64x, FireBird 2.5.1.26351 32x를 사용하고 있습니다.델파이에서 스크립트를 실행하는 중 "잘못된 트랜잭션 핸들 (명시적인 트랜잭션 시작이 예상 됨)"스크립트

실행 순서 :

  • 확인 현재 버전 (파이어 버드 데이터베이스에서 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; 

파이어 버드 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

는 파이어 버드 2.5.6 시도 bit old – magicandre1981

+0

오류 코드는 상대적으로 쓸모가 없습니다. 일부 코드는 수십 개의 다른 (그러나 관련) 오류를 포함합니다. 실제 오류 메시지를 게시하거나 갖고 있지 않으면 오류 번호 (오류 코드와 다름)를 게시하십시오. –

+0

또한 실행하려는 SQL 스크립트를 게시하십시오. –

답변

1

오류는 'COMMIT WORK;'와 같은 오류가 있음을 나타냅니다. 귀하의 SQL 스크립트에서. FireDAC 문서 당으로

: http://www.firebirdsql.org/en/firebird-2-5-6/ 버전이 있습니다 :

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)