[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Aug 2006
    Beiträge
    2.077

    Fehlermeldung unterdrücken (COBOL)

    Hallo *all,
    ich schreibe hier fröhlich eine Preisdatei nach dem Motto der erste gewinnt. Sprich wenn ich für einen Artikel einen Preis haben notiere ich den, wenn ich später für diesen Artikel nochmals einen Preis finde interessiert mich das nicht.

    Die Logik ist also immer Lesen aus Datei1 -> Schreiben in Datei2

    wenn der Artikel jetzt doppelt ist bekomme ich eine Fehlermeldung im Joblog. Ich könnte natürlich vorher ein Read auf die Datei machen und bei nicht Erfolg schreiben.

    Gibt es eine Alternative dazu den Fehler im Joblog zu unterdrücken?

    Code:
    NACHR-ID   ART                     BEW  DATUM     ZEIT             VON PGM      BIBLIOTHEK  INST     AN PGM      BIBLIOTHEK  INST
    CPF5026    Hinweis                 30   25.01.17  01:16:47,713425  QDBSIGEX     QSYS        0224     DBANK       RPTRADE     0A25
                                         Nachricht . . . :   Keine doppelten Schlüssel für Teildatei DAT007 zulässig.                
                                         Ursache  . . . . :  Eine Ausgabe- oder Fortschreibungsoperation bei Teildatei               
                                           DAT007 konnte wegen eines doppelten Schlüssels in Teildatei DAT007 in Datei               
                                           DAT007 in Bibliothek RPTRADE nicht durchgeführt werden. Fehlerbeseitigung:                
                                           Anhand der vorher aufgeführten Nachricht CPF5009 feststellen, welcher Satz
    GG 4875

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Nein, die gibt es nicht. Auf Grund der Meldung wird ja " invalid key " ausgelöst.
    Würdest du die Meldung unterdrücken, wäre die Fehlerabfrage nicht mehr möglich.
    Im RPG ist das i.Ü. identisch.
    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
    Jan 2007
    Beiträge
    905
    Bau einen Monitor darum.
    :-)
    kf

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Den gibts in COBOL nicht.
    Bespiel Write COBOL:

    WRITE RECORD
    INVALID KEY mach was
    END-WRITE

    Write ILERPG

    WRITE(E) RECORD;
    if %error();
    mach was
    endif;

    In beiden Fällen wird die Nachricht ins Joblog geschrieben.
    In COBOL wird INVALID KEY ausgeführt, in ILERPG wird der %error()-Status gesetzt.
    Selbst in ILERPG verschwindet dann die Nachricht nicht.

    Um die Nachricht explizit zu entfernen benötigst du einen RCVMSG (oder das API dazu, ggf. QMHRCVM).

    Das Hauptproblem in solchen Fällen ist ins besonders bei Masseninserts und häufigen Konflikten, dass das Joblog sehr groß wird (und je nach Einstellung vor einem WRAP erst mal gedruckt wird) und auch die Performance nicht unerheblich beeinflusst wird.

    Aber selbst ein Prüflesen kann zu doppelten Schlüsseln führen, könnte allerdings die Anzahl der Konflikte reduzieren.
    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

  5. #5
    Registriert seit
    Dec 2009
    Beiträge
    314
    Naja so ganz direkt glaube ich das nicht. Ich kann auch in COBOL eine File-Status nach dem Write abfragen:

    COBOL select

    SELECT VIB1 ASSIGN TO DATABASE-LEAVIB1
    ORGANIZATION IS INDEXED
    ACCESS MODE IS DYNAMIC
    RECORD KEY IS EXTERNALLY-DESCRIBED-KEY
    FILE STATUS IS WS-STATUS.

    write Statement


    WRITE-VIB1-IND.
    INITIALIZE WS-FILE-NAME
    PERFORM FILL-KEY-VIB1 THRU FILL-KEY-VIB1-EX
    MOVE 1 TO WRK-FOUND.
    WRITE VIB1-SATZ
    INVALID KEY MOVE ZEROES TO WRK-FOUND.
    STRING CONST-DATEI-VIB1 DELIMITED BY SIZE
    CONST-TRENN-ZEICHEN DELIMITED BY SIZE
    INTO WS-FILE-NAME
    END-STRING
    PERFORM STD-FILSTAT THRU STD-FILSTAT-EX.
    WRITE-VIB1-IND-EX.
    EXIT.

    STD-FILSTAT.
    IF WS-STATUS NOT < '30'

    mache irgendwas


    END-IF.
    STD-FILSTAT-EX.

    Funktioniert bei uns seit 1990

    EXIT.
    Andreas
    Ein AS/400 Dinosaurier since 1989

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Das hat mit der MSG nichts zu tun.
    Invalid Key wird bei Fehler ausgelöst, über den Filestatus kann ich den Grund näher bestimmen.
    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. Ausgabe von RUNRMTCMD unterdrücken
    By dschroeder in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 08-04-16, 14:23
  2. Nachricht unterdrücken
    By woodstock99 in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 22-03-16, 07:40
  3. Kann ich CPI2417 unterdrücken?
    By systemer in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 26-02-03, 07:01
  4. Fehlermeldung
    By Hans Zuther in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 12-06-02, 08:45
  5. Systemmeldungen unterdrücken
    By klaus.haderer in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 09-08-01, 09:15

Berechtigungen

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