PDA

View Full Version : subfile im free-format lesen



kretzsch
19-01-12, 11:32
Hallo liebe Leute,
Habe folgende Phänomene im RPGLE-Free-Format:
1. Mit Befehl readc wird(werden) nicht nur der(die) geänderte(n) Subfilesatz(sätze) gelesen, sondern es werden alle Sätze (vom ersten bis letzten Satz)gelesen. Woran könnte das liegen? Was muss ich evtl. zusätzlich irgendwo definieren?
2. Wird der ausgewählte Satz gelesen und die anschließende Subroutine verarbeitet, wird in der DOU-Schleife der nächste Subfilesatz gelesen. Unmittelbar vor dem readc-Befehl ist die Variable *inkl aus und nach diesem Lesevorgang ist die Variabel *inkl plötzlich an! Ich versteh die Welt nicht mehr!

readc bildf01;
dou %eof; <O:p
if not %eof;
select; <O:p></O:p>
when sfausw = '1';
<O:psfausw = ' ';
update bildf01;
exsr $uebl; <O:p></O:p>
when sfausw = '6';
sfausw = ' ';
update bildf01;
exsr $tag;
endsl;
readc bildf01; (hier passiert das mir unverständliche)
<O:pendif;
enddo;

Hat jemand eine Lösung oder muss ich zu fix-format zurück?

Pikachu
19-01-12, 11:43
Wie ist die Subfile-Definition, also die komplette DDS-Beschreibung? Vielleicht gibt es ein Problem mit Bezugszahlen in der Subfile (unterschiedliche Positionen der Felder im Eingabepuffer und Ausgabepuffer)? Ist das Schlüsselwort INDARA in der DDS-Beschreibung angegeben?

ExAzubi
19-01-12, 12:08
Eventuell ist im DSPF das Keyword SFLNXTCHG immer gesetzt? Wäre auch mal eine Prüfung wert.

kretzsch
19-01-12, 12:25
Schlüsselwort INDARA ist nicht definiert. Bezugszahlen habe ich schon geprüft.

Habe versucht die Subfile hochzuladen .....

kretzsch
19-01-12, 12:29
Ja, Keyword SFLNXTCHG ist gesetzt (irgendwo abgekupfert) bevor ich nachsehe, was bedeutet dieser Schlüssel?

kretzsch
19-01-12, 12:40
habe doch nachgesehen und denke bezüglch des readc befehls muss ich mich mit dem Keyword SFLNXTCHG beschäftigen (zB. Bezugszahl) das löst aber sicher meine *inkl nicht

kretzsch
19-01-12, 13:21
Der Tip mit dem SFLNXTCHG war goldrichtig, habe sogar die *inkl-Problematik damit lösen können. Allerdingst verstehe ich es nicht, muss man vielleicht auch nicht.

Mich würde mal interessiern ob das Hochladen meines Word-Dokuments geklappt hat und wo man es sieht??????

Fuerchau
19-01-12, 13:51
Wenn SFLNXTCHG ohne Bezugszahl verwendet wird, zeigt sich genau das Verhalten, da das Flag automatisch immer ON ist.

Mit Bezugszahl werden wirklich nur geänderte Sätze gelesen.

Wichtig ist daher, wie die BZ beim WRITE/UPDATE gesetzt ist.
*ON = Satz ist als geändert markiert
*OFF = Satz ist nicht geändert
Das hat den Grund, fehlerhafte Eingaben mit *ON markieren zu können, damit sie beim nächsten Verarbeitungszyklus auch wieder gelesen werden.

Beispiel:

dow 1=1;
readc MySubfile;
if %eof;
leave;
endif;
*inNN = *off;
if Fehler<FEHLERBEDINGUNG>;
*inNN = *on;
update MySubfile;
leave;
endif;
<VERARBEITUNG>
update MySubfile;
enddo;

Übrigens:
Wenn du deine Schleife so durchführst, kannst du jederzeit per "iter" am Anfang der Schleife aufsetzen.
Hast du den READ aber am Ende, musst du kompliziertere Logik verwenden.

Was nun deine *INKL angeht, so wird diese bei jedem READC wieder gesetzt, wenn du die Verarbeitung auch bei gesetzter *INKL durchführst.
Normalerweise sollte aber eine F-Taste andere Aufgaben haben.
*INK-Bezugszahlen werden erst beim WRITE+READ/EXFMT neu ermittelt.

Pikachu
19-01-12, 14:45
SFLNXTCHG (Subfile Next Changed) keyword for display files (http://publib.boulder.ibm.com/infocenter/iadthelp/v7r1/topic/com.ibm.etools.iseries.langref2.doc/rzakc/rzakcmstdfsfnch.htm)