[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Apr 2012
    Beiträge
    360

    Exception (nach Sql-Error) werfen

    Hallo,

    ich hätte vor in ein Programm, das im Batch läuft, diverse Dateioperationen mittels Sql abzulösen.
    Im Programm wird ja bei einem Write, bei einem doppelten Schlüssel, eine Nachricht an den Sysopr geschickt.

    Ich hätte nun versucht beim Insert den Sqlstate abzufragen und mit Hilfe der API QMHSNDPM eine Msg zu schicken.

    Ich bekomme aber keine Nachricht auf den SYSOPR.

    Code:
    DQMHSNDPM         PR                  ExtPgm('QMHSNDPM')           
    D MsgID                          7A   Const                        
    D MsgFile                       20A   Const                        
    D MsgData                      256A   Const                        
    D MsgDtaLen                     10I 0 Const                        
    D MsgType                       10A   Const                        
    D StackEntry                    10A   Const                        
    D StackCount                    10I 0 Const                        
    D MsgKey                         4A   Const                        
    D ErrorCode                     16A   Const                        
    D                                                                  
    D$MsgId           S             10A   Inz('CPF9898   ')            
    D$MsgFile         S             20A   Inz('QCPFMSG   QSYS      ')  
    D$MsgDta          S             80A   Inz                          
    D$MsgDtaLen       S             10I 0 Inz                          
    D                                                                  
    D ErrorCode       ds                                               
    D   BytesProv                   10I 0 inz(0)                       
    D   BytesAvail                  10I 0                              
    
    
    
    
    
    
    $MsgDta    = 'SQL ERROR: '                           
                + %trimr(SDSPGM)                         
                + ' Fehler beim Import aufgetreten';     
                                                         
    QMHSNDPM( $MsgId                                     
            : $MsgFile                                   
            : $MsgDta                                    
            : %len( %trimr($MsgDta))                     
            : '*ESCAPE'                                  
            : '*'                                        
            : 2                                          
            : *blanks                                             : ErrorCode );


    Code:
    
    
    Code:
    SBMJOB CMD(CALL PGM(TEST01) PARM(' ')) 
    
    Der Aufruf an *LIBL/QMHSNDPM wurde fehlerhaft beendet (C G D F). 
    


    Das Programm hat einen *ENTRY Parameter.

    Was mache ich falsch?

    Kann ich eleganter eine exception auf den Sysopr werfen?

    Dank im Voraus

    Tarki

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Es ist das falsche API.
    Du kannst nur Nachrichten an die diversen Ebenen des Callstacks versenden.
    QMHSNDPM entspricht dem SNDPGMMSG. Eine MSGQ kannst du damit nicht erreichen.
    Das richtige API ist QMHSNDM (ohne P):
    http://www.ibm.com/support/knowledge...is/QMHSNDM.htm
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Apr 2012
    Beiträge
    360
    Morgen,

    ich habe das api QMHSNDM ausprobiert:

    Code:
           //    Message  = 'Fehler aufgetreten! Test';
           //    QMHSNDM(   *blanks
           //             : *blanks
           //             : Message
           //             : %len(Message)
           //             : '*INQ'
           //             : MsgQ
           //             : %elem(MsgQ)
           //             : '*PGMQ'
           //             : MsgKey
           //             : ErrorCode );
    Ich prüfe Daten für den Import, nur wenn die ok sind möchte ich eine weitere Verarbeitung, ansonsten muss der Import-File bearbeitet werden und noch einmal eingespielt werden.

    Mein Rpg programm wird von einem CL aufgerufen und ich hätte gerne das das Rpg Programm "stürzt" und das aufrufende CL auch.

    Habt ihr Vorschläge für mich?

    Dank im Voraus

    Tarki

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Dies ist dann wieder eine SNDPGMMSG (QMHSNDPM) vom Typ *ESCAPE.
    Hier gibst du den Callstack an, an den die Nachricht geht.
    * = Du selbst (das geht auch, allerdings bekommt das CLP dann eine RPG-Nachricht und nicht deine)
    1 = nächst höhere (bei ILE ist das die aufrufende Prozedur oder die RPG-Main)
    2 = noch höher ...
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. SQL-Error -312
    By philsturm in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 09-12-15, 08:43
  2. QUSRSYS *ERROR
    By PS in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 18-02-03, 20:47
  3. Error SQL7905
    By CZE425 in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 13-02-02, 15:40
  4. SQL-Error
    By Stefan_R in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 24-10-01, 10:17
  5. SQL-Error
    By Stefan_R in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 17-09-01, 14:23

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •