Crystal Reports  

Null フィールドと Null 値(Crystal 構文)

Crystal Reports が式の中に NULL 値のフィールドを見つけた場合は、通常、その式の評価を直ちに中止し、値を算出しません。式の中で NULL フィールド値を処理する必要がある場合は、それを目的とした特殊な関数である IsNull、PreviousIsNull、またはNextIsNull の 1 つを使って明示的に処理する必要があります。

演算子に関して、次の条件

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

演算子に関して、次の条件 が評価される場合は、最初に IsNull({Product.色})が評価されます。これが真であると判定された場合は、条件全体が真になることがわかるので、次のもう 1 つの条件を検査する必要はありません。

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

つまり、Crystal Reports は、式全体の結果を判定できた場合、そこで論理式の評価を中止します。次の例では、denom が 0 の場合に 0 による除算が行われないようにしています。

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

{Product.色}フィールドには、“red”や“black”などの基本色と、“steel satin”や“jewel green”など、2 つの単語から成る凝った色が入っています。基本色の場合は“basic”と出力し、それ以外の色の場合は“fancy”と出力する式を作成するとします。

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

InStr 関数を呼び出すと、{Product.色}文字列内でスペースが検索されます。スペースが見つかった場合、この関数はそのスペースの位置を返します。見つからなかった場合は、0 を返します。基本色の場合は、どれもスペースのない単語で表されるため、InStr は 0 を返します。

Guardian Chain Lock などの一部の製品には色の値が記録されていないので、データベース内のそのレコードの{Product.色}フィールドは NULL 値になっています。したがって、Guardian Chain Lock レコードの横には何も文字が出力されません。

ここでは、IsNull を使って上の例を修正します。

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

参照

演算子 | 式エディタ