通常,當 Crystal Reports 碰到公式中的空值欄位時,會立刻停止驗算公式,而且不產生任何值。如果您想要在公式中處理空欄位值,必須明確地使用專門設計來控制它們的函式來處理:IsNull、PreviousIsNull 或 NextIsNull。
與運算子相關,在 Crystal Reports 驗算下列條件時:
IsNull({Product.Color}) Or InStr({Product.Color}, " ") = 0
它會先驗算 IsNull ({Product.Color}),如果判斷出結果為 True,就表示整個條件都為 True,就不用繼續檢查下列條件:
InStr({Product.Color}, " ") = 0
換句話說,Crystal Reports 在演算出整個運算式的結果後,就會停止驗算布林運算式。在下列的範例中,在 denom 為 0 的情況下,公式不會以零來當除數:
Local NumberVar num; Local NumberVar denom; ... If denom <> 0 And num / denom > 5 Then ...
範例
{Product.Color} 欄位包含「紅」及「黑」等基本色彩,和花式的複合字色彩,例如「絲綢銀」和「寶石綠」。假設您想要撰寫一個公式,如果是基本色彩便印出「基本」,如果是其他色彩則印出「花式」。
If InStr({Product.Color}, " ") = 0 Then "basic" Else "fancy"
函式呼叫 InStr 會去搜尋 {Product.Color} 字串中的空格。假如它找到空格,就會傳回空格的位置;否則傳回 0。由於基本色彩都只有一個英文字,不含任何空格,因此 InStr 碰到它們就會傳回 0。
對於 Guardian Chain Lock 這類產品,並不會記錄它的色彩值,所以在資料庫中該筆資料錄的 {Product.Color} 欄位具有空值。因此,Guardian Chain Lock 資料錄的旁邊不會印出任何文字。
下列範例說明如何用 IsNull 修正前一個範例:
If IsNull({Product.Color}) Or InStr({Product.Color}, " ") = 0 Then "basic" Else "fancy"