Variant コンポーネント
Variantコンポーネントは、バリアント値の格納に使用できます。
Variantコンポーネント・クラス#PRIM_VARを使用してバリアント・コンポーネント変数を作ることができます。Variantコンポーネント変数は、どのようなタイプのデータも含むことができます(文字列、整数、小数、ブール値、コンポーネント)。
Variantコンポーネントには、コンポーネントに含まれる値の種類を確認するプロパティがあります。
値は、数値、文字列、またはブール値などの変換された形式で取得することができます。バリアントを使えば、コンポーネントは、静的に判別不可能なタイプの値にアクセスできるようになります。例えば、グリッド内のセルの値を静的に定義することはできません。それはセルの列のタイプに依存するからです。グリッド制御は、バリアントを返してセル値へのアクセスを可能にします。宣言された値のタイプに関するコンパイル・エラーは発生しません。この場合は、グリッドの値のタイプを識別できるようにプログラムを記述することが必要です。
バリアントは動的プログラミングにも使用されます。コンパイル時にコンポーネントのタイプ情報を決定できない場合 (特にActiveX) があります。この場合、実行時に処理する必要があります。バリアントを使用する場合、Visual LANSAコンパイラはメソッドやプロパティの解決を試みません。バリアントに格納されているコンポーネントのタイプがわからないためです。このすべての情報を解決するには実行時まで待つ必要があります。この動作により、ActiveXコントロールは不明なタイプのコンポーネントを提供することができます。そして、このコンポーネントが呼び出された時にだけ、タイプ情報が要求されます。
以下のステートメントでは、#MYVARIANTと呼ばれるバリアント型変数を定義します。
Define_Com Class(#PRIM_VAR) Name(#MYVARIANT)
バリアント型変数には、そのValueプロパティを使用して値を割り当てることができます (この場合、値のタイプは不明なタイプです)。
RDMLコマンドでこの変数を使用する場合、明示的に値のタイプを割り当てる方法が必要です。例えば、変数にタイプを割り当てなければCHANGEとIFステートメントを使用できません。RDMLXコマンドでは、タイプを不明とすることができます。
変数値を読み取るときに、値は自動的に値を受け取るフィールドのタイプに変換されます。
Set Com(#Out_INTEGER) Value(#myvariant)
また、値のタイプを明示的に指定することもできます。
Set Com(#Out_INTEGER) Value(#myvariant.Integer)
バリアントの値をサポート可能な値とするため、変数のValueTypeプロパティを使用します。
または、バリアント・データ型の変数を作成することができます。
Define_Com Class(*Variant) Name(#lclVariant)
バリアント変数の作業を行う場合は、バリアント関数を使用します。