Crystal Reports  

空字段和空值(Basic 语法)

一般情况下,Crystal Reports 在公式中遇到空值字段时,会立即停止公式求值而不产生任何值。若要处理公式中的空字段值,则必须使用专门用于处理空字段值的特殊函数进行显式处理。这些函数包括:IsNull、PreviousIsNull 或 NextIsNull。

当 Crystal Reports 对以下条件求值时,运算符与这些函数相关:

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

它首先对 IsNull ({产品.颜色}) 求值,当它确定该函数值为“真”时,便知道整个条件为“真”,因此不需要检查是否

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

换句话说,当 Crystal Reports 能够预知整个表达式的结果时,将停止对布尔表达式求值。在下例中,公式防止在分母为 0 的情况下被零除:

Dim num As Number, denom As Number
...
If denom <> 0 And num / denom > 5 Then
...
注意   Visual Basic 不支持该技术,因为在 Visual Basic 中即使不必要,也对布尔表达式的所有部分求值。

示例

{产品.颜色} 字段中既包含基本颜色名(如“red”和“black”),也包含两个单词构成的描述性颜色名(如“steel satin”和“jewel green”)。以下的示例是这样一个公式,当颜色为基本颜色时写出“基本”,为其他颜色时写出“流行”。

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

对 InStr 的函数调用搜索 {产品.颜色} 字符串中是否有空格。如果发现有空格,则该函数调用返回该空格的位置,否则返回 0。由于基本颜色只有一个单词,没有空格,所以 InStr 会对基本颜色返回 0。

对于某些产品(如 Guardian Chain Lock)不记录颜色值,因而 {产品.颜色} 字段在数据库中对该记录有一个空值。这样,Guardian Chain Lock 记录就不在它旁边打印任何文字。

下例说明如何处理上面使用 IsNull 的示例:

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

另请参见

运算符 | 公式编辑器