[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte

Thema: CLRDTAQ

Hybrid View

  1. #1
    Registriert seit
    Oct 2001
    Beiträge
    68

    CLRDTAQ

    Hallo,

    ich habe zwei Fragen an Euch:

    1. Wenn ich ein CLRDTAQ aus führe und einzelne Einträge löschen will, wie muss ich da vorgehen. Muss der CLR in einer Schleife so oft ausgeführt werden, bis zum Ende. Wie wird das Ende dann festgestellt, das keine passenden Einträge mehr vorhanden sind?



    2. Ich habe das mal für mich in einem kleinen Test-Programm vorbereitet. Leider bekomme ich bei der Umwandlung immer diese beiden Fehler.

    *RNF5410 30 1 Der Prototyp für den Aufruf ist nicht definiert.
    *RNF7030 30 1 Der Name oder die Bezugszahl/der Anzeiger ist nicht
    definiert.

    Ich denke es hängt an dem Parameter CERROR (Error wurde auch bei RCVDTaq schon mal definiert)


    SOURCECODE:
    D RCVDTAQ PR EXTPGM('QRCVDTAQ')
    D DATAQUEUENAME 10A CONST
    D DATAQUEUELIB 10A CONST
    D DATALENGTH 5P 0
    D DABABUFFER 32767A OPTIONS(*VARSIZE)
    D WAITTIME 5P 0 CONST
    D KEYORDER 2A CONST OPTIONS(*NOPASS)
    D KEYLENGTH 3P 0 CONST OPTIONS(*NOPASS)
    D KEYBUFFER 256A OPTIONS(*NOPASS : *VARSIZE)
    D SNDLENGTH 3P 0 CONST OPTIONS(*NOPASS)
    D SNDBUFFER 44A OPTIONS(*NOPASS)
    D REMOVEMSG 10A CONST OPTIONS(*NOPASS : *OMIT)
    D RCVSIZE 5P 0 CONST OPTIONS(*NOPASS : *OMIT)
    D ERROR 32767A OPTIONS(*NOPASS : *VARSIZE)
    D
    D CLRDTAQ PR EXTPGM('QCLRDTAQ')
    D DATAQUEUENAME 10A CONST
    D DATAQUEUELIB 10A CONST
    D KEYORDER 2A CONST OPTIONS(*NOPASS)
    D KEYLENGTH 3P 0 CONST OPTIONS(*NOPASS)
    D KEYDATA 32767A CONST OPTIONS(*NOPASS)
    D CERROR 32767A CONST OPTIONS(*NOPASS : *VARSIZE)


    C EVAL KEY = E_JOBNR + E_JOBUSR
    C CALLP CLRDTAQ('DYQ01' : '*LIBL' : 'EQ' : 17: KEY : CERROR)




    Danke für Euere Hilfe!!!!

  2. #2
    Registriert seit
    Jan 2003
    Beiträge
    759
    ... aus meiner Erfahrung: bis einschl. V4R5 kam es hin und wieder zu systemseitigen Hustenanfällen. Meine Clears bestehen deshalb je nach Dienst aus DLTDTAQ (Ende des fütternden Subsystems, z.B. QINTER) und CRTDTAQ mit MONMSG (Start des Subsystems).

  3. #3
    Registriert seit
    Jan 2003
    Beiträge
    759
    zum CLRDTAQ - letzter Eintrag:

    man kann den 5. Parameter WAIT am QRCVDTAQ nutzen, um den letzten Eintrag zu erkennen (-1 = warte endlos, nn = warte diese Zeit, wenn bis dahin nichts neues gekommen ist...)

  4. #4
    Registriert seit
    Jan 2003
    Beiträge
    759
    zum Schluss noch 'ne Gegenfrage:

    Ein QRCVDTAQ bedeutet doch, dass die Queue bereits um den Eintrag erleichtert ist. Was soll denn dann noch gecleart werden. Auf welcher Leitung stehe ich?

  5. #5
    Registriert seit
    Nov 2003
    Beiträge
    2.403
    Zitat Zitat von sirdidi Beitrag anzeigen
    Ich denke es hängt an dem Parameter CERROR (Error wurde auch bei RCVDTaq schon mal definiert
    Daran scheint's zu liegen: Hast du CERROR (das aus dem CALLP) auch als eigenständiges Feld definiert?

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Ein QCLRDTAQ-Aufruf kann nicht zum Löschen einzelner Einträge verwendet werden, da entweder die gesamte DataQueue oder bei einer geschlüsselten Dataqueue alle Einträge, die dem angegebenen Schlüssel entsprechen gecleart wird.

    Hier die API-Beschreibung:
    Clear Data Queue (QCLRDTAQ) API

    Normalerweise werden die Einträge beim Lesen der DataQueue aus dieser entfernt, es sei den der 11. Parameter (Remove Message) wird mit *NO übergeben.

    Das Schlüssel-Wort CONST darf bei Ein/Ausgabe-Parameter nicht gesetzt werden.
    Hier die API-Beschreibung zu QRCVDTAQ:
    Receive Data Queue (QRCVDTAQ) API

    Der Error-Code wird als Datenstruktur ausgegeben. Die Beschreibung der Datenstrukturen ist hier:
    Error Code Parameter
    und dann Error Code Paramter Format.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  7. #7
    Registriert seit
    Jan 2003
    Beiträge
    759
    11. Parameter (Remove Message) mit *NO
    Danke! Hatte ich nicht auf dem Schirm.

  8. #8
    Registriert seit
    Oct 2001
    Beiträge
    68
    Erstmal danke an die reichlichen Anworter!!!

    Das in dem Programm ein RCVDTAQ steht hat folgenden Hintergrund: Dieses augegeliederte "Teil"-Programm ist ein Teil zum testen. Das eigentliche enthält einen SNDDTAQ und einen RCVDTAQ und steuert die Kommunikation zwischen einem Client und unser iSeries. Alle paar Tage kam es nun vor das sich der Client aufgehängt hat. Das mit dem SND und RCV funktioniert also schon länger ohne Probleme.
    Ein Problem haben wir festgestellt könnte sein, wenn der Client wieder neu reingeht und einen RCV macht und dann unter Umständen "Altlasten" liest und sich dann dementsprechend seltsam verhält. Um dies zu verhindern wollten wir mit CLR alle "Altlasten" mit Jobnummer und User vorm RCV löschen.

    Ich hab mit Dtaq noch nicht soviel gemacht. Vieles wird mir durch lesen klarer.
    Was ich aber nicht "raffe" ist - das mit dem Error.
    Wenn ich den CERROR aus dem CALLP rauslasse, bekomme ich das Programm umgewandelt - aber beim Aufruf einen Fehler.

    Lass ich ihn so drin, krieg ich das Teil nicht umgewandelt.

    Wie muss ich also die Definition richtig machen in den D-Bestimmungen?

  9. #9
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    1. Der Error Code ist in der Required Paramter Group 2, d.h. entweder alle oder keiner der Parameter in Parameter Group 2 muss übergeben werden.
    2. Bei dem Parameter handelt es sich um einen Ein-/Ausgabe-Parameter und Du hast ihn als Input Only (Schlüssel-Wort Const) definiert.


    Die Error-Datenstruktur (Format ERRC0100 sieht so aus)
    Code:
    D RefDSAPIError1  DS                  Qualified                    
    D   ByteProv                    10I 0 inz(%size(RefDSAPIError1))   
    D   ByteAvail                   10I 0                              
    D   MsgId                        7A           
    D   Reserved                     1                                 
    D   ExceptData               32767
    Der Parameter Error Code kann dann so aussehen:
    Code:
    D  ParErrDS                           LikeDS(RefDSAPIError1)               Error Data Structure     
    D                                     Options(*NoPass)
    Eine entsprechende Variable wird wie folgt definiert:
    Code:
    D ParErrDS1       DS                  LikeDS(RefDSAPIError1) inz(*LikeDS)
    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  10. #10
    Registriert seit
    Mar 2012
    Beiträge
    71
    Hi,

    Versuch mal den Error-Code so zu definieren

    DCL VAR(&CERROR) TYPE(*CHAR) LEN(16)

  11. #11
    Registriert seit
    Oct 2001
    Beiträge
    68
    Hallo,

    sorry, wenn ich nochmal wegen dem CLRDTAQ nerve. Aber ich bekomme es einfach nicht "gebacken".

    Wo liegt mein Fehler liegt? Wie muss ich es richtig schreiben?
    (Umwandlung schlägt fehl mit flg. Fehlermeldung:
    RNF5407 20 1 Mehr Parameter im Prototypaufruf übergeben als zulässig.




    Code:
         D CLRDTAQ         PR                  EXTPGM('QCLRDTAQ')
         D  DATAQUEUENAME                10A   CONST
         D  DATAQUEUELIB                 10A   CONST
         D  KEYORDER                      2A   CONST OPTIONS(*NOPASS)
         D  KEYLENGTH                     3P 0 CONST OPTIONS(*NOPASS)
         D  KEYDATA                   32767A   CONST OPTIONS(*NOPASS)
         D  ParErrDS1      DS                  LikeDS(RefDSAPIErr) inz(*LikeDS)
         D
         D* ParErrDS1                          LikeDS(RefDSAPIErr) Options(*NoPass)
         D
         D RefDSAPIErr     DS                  Qualified
         D   ByteProv                    10I 0 inz(%size(RefDSAPIErr))
         D   ByteAvail                   10I 0
         D   MsgId                        7A
         D   Reserved                     1
         D   ExceptData               32767

    Code:
         C     SR999         BEGSR
         C
         C                   EVAL      KEY = E_JOBNR + E_JOBUSR
         C                   CALLP     CLRDTAQ('DYQ01' : '*LIBL' : 'EQ' : 17 :
         C                                      KEY : PARERRDS1)
         C
         C                   TIME                    R120T2           12 0
         C
         C                   ENDSR
    Danke!!!

    Mit freundlichen Grüßen
    Ralph

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Die Definition "ParErrDS1 DS" gehört nicht mehr zur PR-Deklaration sondern ist eine eigene DS.
    Du musst diese ohne "DS" wie KEYDATA definieren.
    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

Berechtigungen

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