*--------------------------------------------------------------------------------------------- * ® GOMES serge Programme de service Traitement erreurs SQL * PROTOTYPE de SRVERRSQL *--------------------------------------------------------------------------------------------- d SQLErreur PR D pSqlca 136 const D pStop n Options( *NoPass ) *--------------------------------------------------------------------------------------------- * ® GOMES serge Programme de service Traitement erreurs SQL * * CRTRPGMOD MODULE(BIBSERGE/SRVERRSQL) SRCFILE(BIBSERGE/QRPGLESRC) *SRCMBR(SRVERRSQL)OPTION(*EVENTF) DBGVIEW(*SOURCE) REPLACE(*YES) * *CRTSRVPGM SRVPGM(BIBSERGE/SRVERRSQL) *SRCFILE(BIBSERGE/QSRVSRC) TEXT(’Programme de service erreus SQL’) *ACTGRP(*CALLER) *--------------------------------------------------------------------------------------------- H NoMain decedit(’,’) H bnddir(’QC2LE’) * dftactgrp(*no) ACTGRP(*CALLER) bnddir(’QC2LE’) H COPYRIGHT(’Serge GOMES’) /COPY BIBSERGE/PROTOTYPE,SRVERRSQL *---------------------------------------------------------------- * QUSRJOBI - job informations *---------------------------------------------------------------- D QUSRJOBI PR extpgm(’QUSRJOBI’) D jobi0100 70 D jobi_bytes 9b 0 const D jobi_form 10 const D jobi_jobn 26 const D jobi_jobi 16 const D apierror 120 options(*varsize) * Job information D jobi0100 ds 70 D jobi_bytes 9b 0 inz(61) D jobi_avail 9b 0 D jobi_jobn 26 inz(’*’) D jobi_jobi 16 inz D jobi_form 10 inz(’JOBI0100’) D jobi_type 1 *---------------------------------------------------------------- * QMHSNDPM - send program messages *---------------------------------------------------------------- D QMHSNDPM PR extpgm(’QMHSNDPM’) D MessageId 7 const D MessageFile 20 const D MessageData 512 const options(*varsize) D MessageDataL 9b 0 const D MessageType 10 const D CallStkEntry 128 const options(*varsize) D CallStkCount 9b 0 const D MessageKey 4 const D ApiError 120 options(*varsize) D* send program message D sndpgmmsg ds D msgid 7 inz(’CPF9898’) D msgfile 20 inz(’QCPFMSG QSYS ’) D msgdataL 9b 0 inz(512) D msgtype 10 inz(’*COMP ’) D msgmsgq 11 inz(’* ’) D msgstack 9b 0 inz(1) D msgkey 4 D msgdata s 512 *---------------------------------------------------------------- * api error structure *---------------------------------------------------------------- D ApiError ds D ApiErrLP 9b 0 inz(%len(Apierror)) D ApiErrLA 9b 0 inz(0) D ApiErrMsg 7 D 1 D ApiErrDta 104 *---------------------------------------------------------------- * sql communication area *---------------------------------------------------------------- D SQLCA DS D SQLCAID 8 D SQLCABC 9B 0 D SQLCODE 9B 0 D SQLERRML 4B 0 D SQLERRMC 70 D SQLERRP 8 D SQLERRD 24 D SQLER1 9B 0 Overlay(SQLERRD:1) D SQLER2 9B 0 Overlay(SQLERRD:5) D SQLER3 9B 0 Overlay(SQLERRD:9) D SQLER4 9B 0 Overlay(SQLERRD:13) D SQLER5 9B 0 Overlay(SQLERRD:17) D SQLER6 4a Overlay(SQLERRD:21) D SQLWARN 11 D SQLSTATE 5 D P_SQLCA 136 Overlay(SQLCA:1) D Sleep pr 10i 0 ExtProc(’sleep’) D Seconds 10u 0 value D rc s 10i 0 *---------------------------------------------------------------- P SQLErreur B EXPORT D SQLErreur PI D pSqlca 136 const D pStop n Options( *NoPass ) D wStop s n inz(*on) C/Free if %Parms =2 ; wStop = pStop ; endif ; P_SQLCA = pSqlca ; select ; // Erreur détectée when SQLCODE < 0 ; msgtype = ’*DIAG’ ; // cpf message... If SQLER1 > 0 ; msgid = %editw(%dec(SQLER1:7:0) :’0 ’) ; %subst(msgid:1:3) = ’CPF’ ; else ; // cpd message... If SQLER2 > 0 ; msgid = %editw(%dec(SQLER2:7:0) :’0 ’) ; %subst(msgid:1:3) = ’CPD’ ; else ; msgid = %editw(%dec(SQLCODE*-1:7:0) :’0 ’) ; %subst(msgid:1:3) = ’SQL’ ; %subst(msgfile:1:10) = ’QSQLMSG’ ; EndIf ; EndIf ; // Avertissement when SQLCODE > 0 ; msgid = %editw(%dec(SQLCODE:7:0) :’0 ’) ; %subst(msgid:1:3) = ’SQL’ ; %subst(msgfile:1:10) = ’QSQLMSG’ ; // Exécution SQL OK other ; msgid = ’SQL’ + SQLER6 ; %subst(msgfile:1:10) = ’QSQLMSG’ ; endsl ; // message text If SQLERrml > 0 ; msgdata = SQLERrmc ; msgdataL = SQLERrml ; EndIf ; // Retrouve les attributs du Job en cours QUSRJOBI (jobi0100:jobi_bytes:jobi_form : jobi_jobn:jobi_jobi:Apierror) ; // Job inter-actif ? If jobi_type = ’I’ ; msgtype = ’*STATUS’ ; msgmsgq = ’*EXT’ ; msgstack = 0 ; QMHSNDPM (msgid:msgfile:msgdata:msgdataL:msgtype : msgmsgq:msgstack:msgkey:apierror) ; rc = sleep(1) ; msgtype = ’*DIAG’ ; msgmsgq = ’*’ ; Endif ; // Message d’échappement If SQLCODE < 0 and wStop ; QMHSNDPM (msgid:msgfile:msgdata:msgdataL : ’*ESCAPE’ :’*CTLBDY’:1:msgkey:apierror) ; EndIf ; /End-Free P SQLErreur E *--------------------------------------------------------------------------------------------- * ® GOMES serge Programme de service Traitement erreurs SQL * Source du liage (QSRVSRC) *--------------------------------------------------------------------------------------------- STRPGMEXP PGMLVL(*CURRENT) SIGNATURE(’SRVERRSQL_V01’) EXPORT SYMBOL("SQLERREUR") ENDPGMEXP