Null-Felder und Null-Werte (Basic-Syntax)

Grundsätzlich wird in Crystal Reports die Auswertung einer Formel sofort abgebrochen und kein Wert zurückgegeben, wenn das Programm beim Auswerten einer Formel auf ein Feld mit einem Nullwert stößt. Wenn Sie in Ihrer Formel mit Nullwert-Feldern arbeiten möchten, verwenden Sie dazu eine der folgenden Spezialfunktionen, die für den Umgang mit NULL-Werten vorgesehen sind: IsNull, PreviousIsNull oder NextIsNull.

In Bezug auf die Operatoren geschieht bei der Auswertung der Bedingung in Crystal Reports Folgendes:

IsNull({Product.Color}) Or _
InStr({Product.Color}, " ") = 0

Zuerst wird IsNull ({Produkt.Farbe}) ausgewertet. Wenn das Programm feststellt, dass diese Teilbedingung wahr (True) ist, weiß es, dass die gesamte Bedingung wahr ist, und muss daher nicht mehr prüfen, ob die nächste Teilbedingung (siehe nächste Zeile) wahr ist.

InStr({Product.Color}, " ") = 0

Mit anderen Worten, die Auswertung eines booleschen Ausdrucks von Crystal Reports wird abgebrochen, sobald das Programm die Ergebnisse des gesamten Ausdrucks ableiten kann. Im folgenden Beispiel wird die Formel gegen den Versuch abgesichert, eine Teilung durch Null durchzuführen, falls der Teiler zu 0 wird:

Dim num As Number, denom As Number
...
If denom <> 0 And num / denom > 5 Then
...
NoteAnmerkung

In Visual Basic wird dieses Verfahren nicht unterstützt, da dort alle Teile eines booleschen Ausdrucks ausgewertet werden, auch diejenigen, die nicht ausgewertet werden müssten.

Das Feld {Produkt.Farbe} enthält sowohl Namen von Grundfarben wie "Rot" und "Schwarz" als auch ausgefallene Farbbezeichnungen wie "Grau, Stahl-" und "Grün, Juwelen-". Angenommen, Sie möchten eine Formel schreiben, in der für Grundfarben die Bezeichnung "Grundfarbe" und für alle anderen Farben die Bezeichnung "Farbton" ausgegeben wird.

If InStr({Product.Color}, " ") = 0 Then
formula = "basic"
Else
formula = "fancy"
End If

Mit dem Funktionsaufruf InStr wird in der Zeichenfolge {Produkt.Farbe} nach einem Leerzeichen gesucht. Wird eins gefunden, wird die Position des Leerzeichens zurückgegeben. Ansonsten wird 0 zurückgegeben. Da Grundfarben nur ein Wort ohne Leerzeichen haben, gibt InStr 0 für ale zurück.

Bei einigen Produkten wie beispielsweise dem Guardian Kettenschloß wurde keine Farbangabe in den Datensatz aufgenommen, weshalb in solchen Fällen im Feld {Produkt.Farbe} dieses Datensatzes in der Datenbank ein Nullwert enthalten ist. Daher wird neben dem Datensatz mit dem Kettenschloß keine Farbkategorie ausgedruckt.

Im folgenden Beispiel wird gezeigt, wie Sie das obenstehende Beispiel durch Verwendung von IsNull korrigieren können:

If IsNull({Product.Color}) Or _
InStr({Product.Color}, " ") = 0 Then
formula = "basic"
Else
formula = "fancy"
End If