式の結果、つまり、式をレポートに配置したときに出力される値を、“式が返す値”または“戻り値”と呼びます。Crystal Reports
の式は、どれも値を返す必要があります。Basic 構文では、特殊変数 formula に値を設定することによって値を返します。たとえば、次の例は、値 10 を返す簡単な Basic 構文の式です。
formula = 10
式が返す値は、サポートされている単純な 7 つのデータ型(数値、通貨、文字列、論理値、日付、時刻、日時)のいずれかになります。Crystal Reports は、範囲変数と配列変数もサポートしますが、範囲と配列の値を式から返すことはできません。
変数 formula に値を代入しないと、完全な Basic 構文の式にはなりません。
いくつかのグローバル変数を宣言して初期化するだけの式を必要とする場合があります。そのような式は、通常、レポートのレポート ヘッダー セクションに挿入されます。その場合も、特殊変数 formula に何らかの値を代入します。式が返す値を使用する必要がない場合でも、式は必ず値を返す必要があるからです。
例
Rem いくつかのグローバル変数を宣言する Rem 'formula' には必ず値を設定する Global x As String, y As Number, z As DateTime x = "hello" y = 10.5 z = #Aug 6, 1976# formula = 10
formula 変数の値は、1 つの式の中で何度も設定できます。たとえば、ある会社では、出荷の際に 1,000 ドルを超える注文には保険をかけ、それ以下の注文には保険をかけないという方法をとっているとします。
Rem 文字列値を返す式 If {Orders.受注額} >= 1000 Then formula = "保険付き出荷" Else formula = "通常出荷" End If
上の式は、データベース フィールド{Orders.受注額}の値が 1000 以上の場合は、テキスト文字列値“保険付き出荷”を返し、そうでない場合は、テキスト文字列値“通常出荷”を返します。上の例では、formula 変数が 2 度使用されていることに注目してください。
formula 変数にある型の値を設定した後に、同じ式の中でその変数に別の型の値を設定することはできません。たとえば、上の例で、文字列型の値“通常出荷”を数値型の値 10 で置き換えると、エラーになります。これは、特殊変数 formula には、最初に文字列型の値“保険付き出荷”が設定されているからです。
このような制限を設ける理由は、Crystal Reports
が式の戻り値の型をあらかじめ認識して、戻り値を格納するために十分な領域を割り当てる必要があるからです。これは、型が異なると、必要な格納領域も異なることによります。また、別の理由として、式フィールドで利用できる書式設定オプションが戻り値の型によって異なることがあります。たとえば、数値フィールドには、小数点以下の桁数などの数値の書式設定オプションがあります。しかし、このようなオプションは、文字列型のフィールドでは意味がありません。
注 Basic 構文の式で使用するほかの変数とは異なり、特殊変数 formula は宣言してはいけません。
Basic 構文では、大文字と小文字が区別されません。たとえば、formula、Formula、および FORMULA はすべて同じと見なされます。これは、Basic 構文の式で使用されるすべての変数名、関数、およびキーワードに対して適用されます。
注 文字列に関しては例外です。文字列“Hello”と“hello”は同じではありません。
ここで取り上げる例のほとんどは、Xtreme サンプル データベースを参照しています。このデータベースは Java Developer Zone からダウンロードできます。Xtreme サンプル データベースは、http://www.businessobjects.com/products/dev_zone/java/default.asp からダウンロードできます。