Frage:
Ich versuche, das folgende Programm zu debuggen, aber außer dem Feld SLSMN# haben alle Felder meiner Datenstruktur SLSMNDS keinen Inhalt. In der Datei befinden sich jedoch definitiv Werte. Warum werden die Felder als leer ausgewiesen?
FSLSMN IF E K DISK
D SlsMnDs E DS EXTNAME(SLSMN)
D SaveSlsMn# s like(SlsMn#)
/Free
Setll *Loval RSlsmn;
Read RSlsmn;
Dow Not %Eof (Slsmn);
EVAL SaveSlsMn# = SlsMn#;
Read RSlsmn;
Enddo;
*Inlr = *On;
/End-Free
Antwort:
RPG lädt, um die Performance des Programms zu verbessern, nur diejenigen Felder, die im Programm auch tatsächlich verwendet werden. In Ihrem Programm ist SLSMN# das einzige benutzte Feld und somit auch das einzige Feld, das RPG in den Speicher lädt.
Würden Sie das EVAL Statement aus Ihrem Programm entfernen, würde im Programm keines der Felder verwendet werden und der Debugger würde alle Felder als leer ausweisen.
Man kann den Compiler aber veranlassen, alle Felder zu laden, indem die H-Spezifikation um das Schlüsselwort DEBUG erweitert werden. Das folgende Programm beispielsweise würde alle Felder in die Datenstruktur laden, obwohl nur das Feld SLSMN# im Programm benutzt wird.
H DEBUG
FSLSMN IF E K DISK
D SlsMnDs E DS EXTNAME(SLSMN)
D SaveSlsMn# s like(SlsMn#)
/Free
Setll *Loval RSlsmn;
Read RSlsmn;
Dow Not %Eof (Slsmn);
EVAL SaveSlsMn# = SlsMn#;
Read RSlsmn;
Enddo;
*Inlr = *On;
/End-Free


