PDA

View Full Version : Probleme mit e DS und nullvalue ?



harkne
06-08-15, 09:00
Hallo,

ich habe Probleme nachdem ich in meinem Programm eine Datei als externe Datenstruktur eingefügt habe.

Situation vorher:

Datei CHTRNP ist in den F-Bestimmungen angegeben und wird mit WRITE im Programm ausgegeben.
Keine Probleme
Die Datei hat allerdings Datumsfelder mit DATFMT(*ISO) und ALWNULL

Situation nachher:
Ich füge eine externe Datenstruktur mit Name DS@CHTRNP e DS extname(CHTRNP) ein und das Programm stürzt mir beim WRITE ab wegen Dezimaldatenfehler.

Muss ich irgendwas angeben wegen der NULL-Values ?

Vielen Dank

Viele Grüße harkne

B.Hauser
06-08-15, 09:12
Hast Du Deine Datenstruktur auch initialisiert?

Wenn nicht solltest Du sie unbedingt in den D-Bestimmungen initialisieren oder bevor Du sie befüllst zumindest mit CLEAR bereinigen.

Sollte das nicht helfen, musst Du die NULL-Werte explizit mit %NULLIND(YourField) setzen.

Birgitta

harkne
06-08-15, 09:34
Ich habe in den H-Bestimmungen ALWNULL(*USRCTL) angegeben. Jetzt geht es.

Fuerchau
06-08-15, 09:56
Das hat mit NULL-Values nichts zu tun, sondern tatsächlich mit nicht initialisierten Feldern der DS.
%nullind() muss vor jedem Write explizit gesetzt werden, da der Status immer auf dem letzten Wert stehen bleibt.

ExAzubi
06-08-15, 10:11
Die num. Felder sind bei einer uninitalisierten DS ebenfalls mit *BLANKS gefüllt (x'040404') daher der Dezimaldatenfehler.
clear DS@CHTRNP sollte die Probleme lösen. Aber Achtung mit den Datumsfelder, die können (wenn das PGM mit CVTOPT *DATETIME gewandelt wurde) dann auch *BLANKS sein...

Fuerchau
06-08-15, 10:43
Ein Clear initialisiert Typ-Gerecht.
Bei OPM ist ein Datumsfeld ja vom Typ CHAR, bei ILE vom Typ L.

harkne
06-08-15, 12:47
Danke für alle Antworten, aber es hat in diesem Fall ausschließlich mit ALWNULL zu tun.
Das Programm lief die ganze Zeit fehlerfrei. Unsere NULL-Felder werden immer vor dem Schreiben gesetzt und auch vor dem Update. Es ist auch nie ein Fehler aufgetreten, erst als ich jetzt die externe DS eingefügt habe. Ich habe es auch mit einem clear auf die Datenstruktur zuvor probiert, aber wie ich mir bereits gedacht habe, hat das nichts geändert da wir beim Schreiben eh alle Felder einzeln initialisieren. Das Programm lief ja auch wieder als ich die e ds auskommentiert hatte. So nach dem ALWNULL läuft das Programm auch wieder richtig.

Vielen Dank für die Hilfe

Pikachu
06-08-15, 13:24
Note: When the INZ parameter is not specified:

Static standalone fields and subfields of initialized data structures are initialized to their RPG default initial values (for example, blanks for character, 0 for numeric).

Subfields of uninitialized data structures (INZ not specified on the definition specification for the data structure) are initialized to blanks (regardless of their data type).

ILE RPG - INZ{(initial value)} (http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzasd/dinz.htm)



Danke für alle Antworten, aber es hat in diesem Fall ausschließlich mit ALWNULL zu tun.
Das Programm lief die ganze Zeit fehlerfrei. Unsere NULL-Felder werden immer vor dem Schreiben gesetzt und auch vor dem Update. Es ist auch nie ein Fehler aufgetreten, erst als ich jetzt die externe DS eingefügt habe. Ich habe es auch mit einem clear auf die Datenstruktur zuvor probiert, aber wie ich mir bereits gedacht habe, hat das nichts geändert da wir beim Schreiben eh alle Felder einzeln initialisieren. Das Programm lief ja auch wieder als ich die e ds auskommentiert hatte. So nach dem ALWNULL läuft das Programm auch wieder richtig.

Vielen Dank für die Hilfe