Null-Felder und Null-Werte (Crystal-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 TRUE ist, weiß es, dass die gesamte Bedingung TRUE ist, und muss daher nicht mehr prüfen, ob die nächste Teilbedingung (siehe nächste Zeile) TRUE 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:

Local NumberVar num;
Local NumberVar denom;
...
If denom <> 0 And num / denom > 5 Then
...

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
"basic"
Else
"fancy"

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 vorherige Beispiel durch Verwendung von IsNull korrigieren können:

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

Siehe auch