PDA

View Full Version : Datensätze werden erst nach *INLR geschrieben



Tobse77
31-08-11, 14:53
Hallo zusammen,

in einem RPG-Programm werden Datensätze in Schleife via WRITE-Befehl in eine Ausgabedatei geschrieben.

Nach erfolgreichem Schreiben weißt eine Nachricht in der DSPF den Benutzer darauf hin, dass er die erzeugten Daten in Excel importieren kann.
Nun ist aufgefallen, dass die Datei VOR verlassen des Programms (*INLR) weniger Datensätze beinhaltet, als nach Beenden des Programms.

Habe dies per strdbg auch nachvollziehen können: Breakpoint auf "MOVE *ON *INLR" VOR Ausführung des Statements: 4.956 Datensätze; NACH Ausführung des Statements: 4.961 Datensätze.

Stellt sich also die Frage: Was passiert da noch nachdem *INLR auf *ON gesetzt wird?

Art des Programms ist SQLRPG. Habe es jedoch auch schon testweise um die SQL-Statements erleichtert und als RPG umgewandelt und getestet. Gleiches Ergebnis.

Freundliche Grüße,
Tobias

Fuerchau
31-08-11, 15:00
In der Umwandlungsliste findest du einen Hinweis, dass die Datei geblockt geschrieben wird.
D.h., erst beim Close der Datei wird der letzte Puffer ausgegeben.
Bei z.B. Systemanfrage 2 erfolgt dies nicht!

Verhindern kannst du das z.B. mit UsrOpn (UC) und eigenen Open/Close oder als UF-Datei (fehlende IO-Befehle, die der Compiler anmeckert kann man ja in eine Pseudo-Routine legen).

Man kann auch irgendwo einstellen, dass nicht geblockt verarbeitet werden soll.

RobertMack
31-08-11, 15:02
FEOD hilft auch (Force End Of Data)

Tobse77
31-08-11, 15:07
Vielen Dank für die Antworten.

Habe mich für die UF-Variante mit Pseudo-READ entschieden, et voilà...

VIELEN DANK

Pikachu
01-09-11, 11:22
Etwas Literatur dazu:

Sequential-only processing of database files (SEQONLY) (http://publib.boulder.ibm.com/infocenter/iseries/v5r3/topic/dbp/rbafoseqop.htm)