Kontakt
DSVGO
Bei der Datenbank-Programmierung trifft man sehr häufig auf Null-Felder, also Felder, die absolut leer sind. VB kennt für diesen Zustand die Konstante Null, welche nur selten für sinnvolle Operationen benutzt werden kann, im Gegensatz zu Empty, das sich wie ein neutrales Element (bzgl. Addition) verhält.
So ergibt z.B. Null + 5 einfach nur Null. Eine Zuweisung von Null an einen nicht-Variant erzeugt sogar einen Fehler.
Microsoft Access kennt die sogenannte NZ-Funktion, welche ein Null ggf. in einen unkritischen Wert (default: Empty) übersetzt. So können in Access leicht die obigen Probleme vermieden werden.
In dem unten gezeigten Quelltext einer NZ-Funktion wird genau dies realisiert, so dass auch in "purem" Visual Basic komfortabel mit Null-Werten umgegangen werden kann.
Die NZ-Funktion kann sowohl mit Strings als auch mit Zahlen umgehen:
Dim s As String s = NZ("XYZ") 'ergibt "XYZ" s = "ABC" & NZ(Null) 'ergibt "ABC" s = NZ(Null) 'ergibt "" (Leerstring) s = NZ(Null, "(leer)") 'ergibt "(leer)" s = Null 'erzeugt Error!
Dim n As Long s = NZ(7) 'ergibt 7 n = 4 + NZ(Null) 'ergibt 4 n = NZ(Null) 'ergibt 0 n = NZ(Null, -1) 'ergibt -1 n = Null 'erzeugt Error!
Die NZ-Funktion könnte ggf. auch durch Verwendung der IIf-Funktion ersetzt werden (sieht man oft als Empfehlung):
y = NZ(x) y = IIf(IsNull(x), Empty, x)
Beide Zeilen machen das gleiche, allerdings ist die NZ-Funktion im (voll optimiert) kompilierten Programm etwa doppelt so schnell und zudem deutlich besser lesbar.
Für Strings kann durch Anhängen eines Leerstrings ein potenzielles Null in ein Leerstring umgewandelt werden:
y = NZ(x) y = x & ""
Beide Zeilen machen wieder das gleiche, diese Methode ist sogar etwa doppelt so schnell wie der Aufruf der NZ-Funktion. Allerdings: Selbstdokumentierend würde ich diese Methode nicht nennen, und sie funktioniert nur für Strings!
Der Algorithmus ist sehr einfach, insbesondere da der Default-Ersatzwert auf Empty gesetzt wurde, welches ja gerade als neutrales Element interpretiert wird. So können umständliche Prüfungen auf den Datentyp entfallen (für Zahlen ist das neutrale Element eine 0, für Strings dagegen ein Leerstring ""):
Public Function NZ( _ ByVal Value As Variant, _ Optional ByVal ValueIfNull As Variant = Empty _ ) As Variant If IsNull(Value) Then NZ = ValueIfNull Else NZ = Value End If End Function
© Jost Schwider, 23.11.2001-23.11.2001 - http://vb-tec.de/nz.htm