PDA

View Full Version : RPGLE SETLL READE auf Null-Values



harkne
06-07-21, 15:06
Hallo zusammen,

ich bräuchte mal wieder Eure Hilfe.

Ich habe eine Datei mit CREATE TABLE erzeugt. Darin befindet sich ein Datumsfeld bei dem NULL-Values erlaubt sind.

1. Ich war etwas überrascht dass diese bei der Sortierung am Ende stehen. Aber das scheint ja so zu sein.

Jetzt wollte ich auf meinen Index (Status DECIMAL 2,0 und eben das Datum) ein SETLL und READE machen damit ich alle bekomme die NULL sind

ist ILE-RPG nicht free

Schlüsselliste (Schlüsselfelder sind auch die Dateifelder)
K2MAIN_S_WD klist
kfld Status
kfld Datum

eval Status = 13
eval Datum = *loval

K2MAIN_S_WD setll MAIN_S_WD

do *hival

K2MAIN_S_WD reade MAIN_S_WD
if %eof
leave
endif

enddo

Bekommt er sofort EOF obwohl dass es den Wert gibt und der ist auch NULL das sehe ich über UPDDTA

Wie muss ich lesen damit ich all Sätze die in Datum NULL haben bekomme?

Selbst als ich vorher folgendes gemacht habe

eval Status = 13
Status setgt MAIN_S_WD
Status readpe MAIN_S_WD
if %eof
goto EndPgm
endif

K2Main_S_WD setll Main_S_WD

do *hival
K2MAIN_S_WD reade MAIN_S_WD
if %eof
leave
endif

enddo

endpgm tag
eval *inlr = *on

Bekommt er innerhalb der Schleife sofort einen EOF obwohl er die Werte ja oben außerhalb der Schleife selbst gelesen hat

Viele Grüße Harald

jajonowak
06-07-21, 15:20
Hallo Harald,

gibt es mehrere Datensätze mit dem gleichen Schlüssel ?
Versuche mal mit Teilschlüssel (ohne Datum) weiter zu lesen.

LG
HaJo

harkne
06-07-21, 15:40
Wenn ich aus dem K2MAIN_S_WD reade einen STATUS reade mache innerhalb der Schleife, dann liest er den ersten Satz aus der Datei mit Status 13. Also er positioniert anscheinend beim SETLL davor K2Main_S_WD auf den ersten Satz und nicht vor die NULL-Values. Kapier ich nicht. Ich habe jetzt auch mal noch einen %nullind(Datum) = *ON vor den SETLL gemacht. Aber gleiches Ergebnis.

In meinem Programm oben habe ich im DEBUG gesehen dass er beim Status SETGT und STATUS READPE auch wirklich im Datum 0001-01-01 stehen hatte und er hat ihn ja auch gelesen, dann kann er doch wenn ich genau mit diesen WErten einen SETLL und READE mache nicht %EOF bringen denn er hat sie ja gerade zuvor gefunden

mk
07-07-21, 07:30
Hallo zusammen,

bitte jetzt nicht missverstehen.

Aber SQL Tabelle mit RPG . ( Geht weiß ich )

Trotzdem
SQL bleibt SQL und so etwas macht man mit SQL und nicht mit RPG .

Gruß
Michael

harkne
07-07-21, 07:41
Hallo mk,

mache ich auch überwiegend. Aber ich denke es sollte trotzdem funktionieren.

prsbrc
07-07-21, 07:43
Hallo. Vielleicht hilft dir folgender Link weiter:
https://www.rpgpgm.com/2016/03/handling-null-in-rpg.html

B.Hauser
07-07-21, 07:47
Nur mal so eine Frage:
Hast Du Dein Schlüssel-Feld auch mit %NULLIND() auf *NULL gesetzt?

%NullInd(KeyName) = *ON;

... Mit NULL-Werten zu arbeiten ist sowohl mit SQL als auch RPG aufwändig. Es muss separat geprüft werden, ob eine Spalte einen NULL-Wert enthält oder nicht (%NULLIND, IS NULL, Indikator-Variable).

Birgitta

Fuerchau
07-07-21, 08:25
Da NULL's ja am Ende einsortiert wurden kannst du per *HIVAL mit dem Datum aufsetzen und ohne Datum mit READE weiterlesen.

harkne
07-07-21, 09:08
@alle

Vielen Dank für die Hilfe. So wie es Fuerchau am Ende geschrieben hat funktionierts.

Viele Grüße Harald