[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Feb 2001
    Beiträge
    20.241

    Thumbs down V7R1 Compiler-Fehler?

    Das hat mich nun doch einiges an Zeit gekostet:
    Aus der OPM-Welt kennt man das ja, man definiert die F-Bestimmung und zusätzlich eine externe DS derselben Datei um beim READ/CHAIN alle Felder gelesen zu bekommen, damit man im Debugger auch nicht verwendete Felder ansehen kann.
    Im ILERPG mit V7R1 funktioniert das nun nicht mehr.
    In der externen DS werden tatsächlich nur die Felder gefüllt, die vom RPGLE referenziert, also benutzt werden.
    Wenn man das alte Verfahren benötigt, muss man nun eine DS (ohne extern) mit LIEKREC(Format:*input) definieren und beim READ/CHAIN dann diese DS als Ziel angeben.
    Nun kann man erst alle Felder betrachten.
    Was ich noch nicht ausprobiert habe ist, ob der Compiler anders reagiert, wenn man diese DS dann als CALL-Parameter verwendet. Wenn nicht wäre das an dieser Stelle fatal und man kann dann von einem CVTRPGSRC nur abraten.
    Kleiner Nachteil: die DS ist automatisch qualified, was ein Menge Codeänderungen bedeutet.
    Dies bekommt man leider auch nicht mit irgendeiner Optimized-Methode/Option weg.
    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

  2. #2
    Registriert seit
    Jan 2012
    Beiträge
    1.120
    Ich kann dein Problem nicht nachvollziehen. Wahrscheinlich habe ich das falsch verstanden.
    Wir haben V7R2. Da haben wir keine Probleme.

    Es ist allerdings (ich denke schon immer) so, dass nicht benutzte Variablen vom Compiler aus dem Programm herausoptimiert wurden (CPF7031 in der Wandlungsliste). Das heißt, eine reine Deklaration des Datensatzes als externe Struktur bringt nichts, wenn die externe Struktur im weiteren Programm nicht verwendet wird.

    Wenn du irgendwo im Programm eine unproblematische Verwendung des Datensatzes arrangierst, kannst du auch alle Felder sehen.

    Hier sieht man den Inhalt nicht:
    Code:
         FKUNDE     IF   E           K DISK
           dcl-ds KUNDESatz extname('KUNDE') end-ds;
         C                   READ      KUNDE
           *inlr = *on;
           return;
    Hier kann man den Inhalt von KUNDESatz (alle Felder) im Debugger sehen:
    Code:
         FKUNDE     IF   E           K DISK
           dcl-ds KUNDESatz extname('KUNDE') end-ds;
         C                   READ      KUNDE
           if KUNDESatz = *loval;
           endif;
           *inlr = *on;
           return;
    Das "if KUNDESatz = *loval" ist natürlich inhaltlich sinnlos, da im if nichts gemacht wird. Aber es sorgt dafür, dass der Compiler KUNDESatz nicht herausoptimiert.

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Ok, das mag als Hinweis gelten, werde ich mal ausprobieren.
    Allerdings ist damit das einfache CVTRPGSRC noch nicht der Weisheit letzter Schluss.
    Denn wenn die DS als solche nicht referenziert wird würden nicht alle Felder der DS gefüllt und das ILERPG läuft anders als das OPMRPG.
    Ich werde da noch mal einen Test machen.
    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

  4. #4
    Registriert seit
    Apr 2005
    Beiträge
    385
    Also Kollege Schroeder hat Recht, es muss nur zumindest einmal die Datenstruktur im Programm verwendet werden (Wie ist egal) weil sonst die DS auch ein RNF7031 ist.
    Also bau ruhig mal ein Dummy - IF ein und dann sollte alles gut sein...

  5. #5
    Registriert seit
    Jan 2012
    Beiträge
    1.120
    Ein Einzeiler anstatt des if geht natürlich auch:
    KUNDESatz = KUNDESatz;

    Dieter

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Soviel zum Thema einfach mal einen CVTRPGSRC automatisieren.
    Aber ich denke, dass ist ggf. kein großer Akt.
    Vielen Dank an alle.
    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

  7. #7
    Registriert seit
    Nov 2003
    Beiträge
    2.307
    Probier mal ab V5R4 mit DEBUG(*INPUT)

    V5R4 RPG Enhancements

    DEBUG(*INPUT) tells the compiler to retain unused input fields (the ones flagged with error 7031 in the compilation listing) in the program object. If you exclude unused fields, you will not be able to see the values of those fields while debugging.

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    DAS ist der beste Hinweis überhaupt! Das kann man globalisieren und erleichtert ungemein.
    Die Performance ist da nämlich nicht relevant bzw. ein paar moves mehr sind da jenseits der Nachweisgrenze.
    Im Absturzfall (Dump) aber eine extreme Hilfe.
    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. Antworten: 7
    Letzter Beitrag: 23-03-15, 17:21
  2. V7R1 Fehler Umwandlung SQLRPGLE
    By Peet in forum NEWSboard Programmierung
    Antworten: 9
    Letzter Beitrag: 29-10-14, 07:54
  3. RPG compiler
    By RGP_compiler in forum NEWSboard Programmierung
    Antworten: 13
    Letzter Beitrag: 04-09-14, 16:40
  4. AS/400 & iSeries - RPG / ILE - Compiler !!
    By Ron in forum NEWSboard Server & Hardware Markt
    Antworten: 1
    Letzter Beitrag: 29-06-05, 14:47
  5. Cobol-Compiler
    By infomio in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 03-04-03, 12:58

Berechtigungen

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