PDA

View Full Version : Verwendung von NULL bzw. NULLIND



MrBonZai
18-06-04, 14:33
Hallo,

Ich habe im Handbauch nur die Verwendung von NULL/NULLIND bei Datenbanken gafunden.

Kann ich NULL auch bei normalen Variablen verwenden? Falls ja, wie?
bzw. kann ich die Unterscheidung von NULL und 0 z.B. auch bei Display-Files verwenden?

gruss Alex

BenderD
18-06-04, 14:50
Hallo,


Hallo,

Ich habe im Handbauch nur die Verwendung von NULL/NULLIND bei Datenbanken gafunden.

Kann ich NULL auch bei normalen Variablen verwenden? Falls ja, wie?
bzw. kann ich die Unterscheidung von NULL und 0 z.B. auch bei Display-Files verwenden?

gruss Alex

in RPG nein, in ordentlichen Programmiersprachen, wie Java, SQL und co. aber ja.

Dieter Bender

Fuerchau
19-06-04, 14:29
Mit etwas Umstand gehts auch bei RPGLE !

Lege eine Datei mit den benötigten Variablen für die Verwendung als PF an.

Definiere die Datei in den F-Bestimmungen mit USROPN und codiere den OPEN und einen Zugriff in einer Unterroutine die du nie ansprichst (Compilerbefriedigung).

Und schon kannst du alle diese Variablen sowie deren %nullind(var) verwenden ohne diese Datei zu öffnen oder E/A's auszuführen.

@Dieter
Zugegeben, die bescheuertste Variante eines merkwürdigen Programmierstils, aber wo ein Wille ist ......... gibts auch entsprechende Entwickler.

BenderD
19-06-04, 15:29
@Baldur :
irgendwie habe ich diesen Trick nicht durchschaut, kannst Du mal ein Code Snippet aufschreiben, für die Landbevölkerung?
In RPG gibt es durchaus das Problem, dass eine Variable null enthält, z.B.: ein Parameter, der bei einem dynamic call nicht übergeben wurde und da könnte ich in Java durchaus abfragen:

if (irgendEine Variable == null)
machWas();
else
lassEs();

mfg

Dieter


Mit etwas Umstand gehts auch bei RPGLE !

Lege eine Datei mit den benötigten Variablen für die Verwendung als PF an.

Definiere die Datei in den F-Bestimmungen mit USROPN und codiere den OPEN und einen Zugriff in einer Unterroutine die du nie ansprichst (Compilerbefriedigung).

Und schon kannst du alle diese Variablen sowie deren %nullind(var) verwenden ohne diese Datei zu öffnen oder E/A's auszuführen.

@Dieter
Zugegeben, die bescheuertste Variante eines merkwürdigen Programmierstils, aber wo ein Wille ist ......... gibts auch entsprechende Entwickler.

B.Hauser
20-06-04, 21:29
@Dieter
Wenn mit der Funktion %NullInd() gearbeitet werden soll, muss in den H-Bestimmungen ALWNULL(*USRCTL) angegeben werden. Nur dann kann auch mit NULL-Feldern bzw. NULL-Werten gearbeitet werden.

In DDS-beschriebenen Dateien kann das Schlüsselwort ALWNULL angegeben werden, um ein NULL-fähiges Feld zu definieren. (In SQL sind NULL-Werte sowieso Standard)
Wird eine Datei, die Felder mit ALWNULL zulässt, in die F-Bestimmungen eingebunden, kann bei diesen Feldern mit NULL gearbeitet werden.

Die Funktion %NullInd(MyNullFld) ist *ON, wenn in dem Feld NULL-Werte stehen, anderenfalls liefert die Funktion *OFF.



H AlwNull(*UsrCtl)
FMyNullPF IF E DISK
/Free
If %NullInd(MyNullFld); //Feld hat NULL-Inhalt
%NullInd(MyNullFld) = *Off; //Keine NULL-Werte
EndIf;

MyNullFld = 'ABC';
/End-Free


Um ein Feld mit NULL-Inhalt zu füllen, muss die Funktion auf *On gesetzt werden.


/Free
%NullInd(MyNullFld) = *On // Setzen Feld auf NULL
/End-Free


Die Anzahl der übergebenen Parameter kann mit der Funktion %Parms() abgefragt werden. In einer Main-Procedure entspricht %Parms() *PARMS aus der Programm-Status-Datenstruktur.

Parameter, die im Prototyp mit *OMIT definiert wurden, können auf NULL abgefragt werden. Bei Angabe von *OMIT im Aufruf wird ein NULL-Wert übergeben. %Parms() zählt in diesem Fall jedoch die ommitteten Parameter mit.



/Free
If %Addr(MyParm3) = *NULL //Parameter übergeben
MyPtrParm3 = %Addr(MyField);
Endif;
/End-Free


@Fuerchau
Für Dateien, die in den F-Bestimmungen definiert wurden, sind im Gegensatz zu RPGIII keine Dummy-Aktionen erforderlich.
Die Felder können direkt angesprochen werden.

Birgitta

MrBonZai
21-06-04, 07:33
Thanx für die Antworten.

Habe ich das nun richtig verstanden, dass ich in Bildschirmdateien, definitiv keinen NULL-Wert abfragen bzw. zulassen kann?

ich wollte eine Unterscheidung zwischen Eingabe von "0" und "Nichts" bei numerischen Feldern.
Über das Schlüsselwort "Change" wollte ich in diesem Fall nicht gehen, da es einen erheblichen Aufwand darstellt, bzgl. Bezugszahlen usw.

gruss Alex.

Fuerchau
21-06-04, 11:24
Ausser per CHANGE gibt es keine Möglichkeit dies zu realisieren !
NULL ist SQL-Spezifisch.

Ausserdem: was habt ihr bei DSPF's denn gegen Bezugszahlen ?