フィールドを計算する
データセットの理解:インデックス への移動
フィールド エディタを使用して、データセットの計算フィールドを定義することができます。データセットに計算フィールドがある場合、Data.DB.TDataSet.OnCalcFields イベント ハンドラで、それらのフィールドの値を計算するためのコードを用意します。
AutoCalcFields プロパティは、OnCalcFields がいつ呼び出されるかを決定します。AutoCalcFields が True の場合、OnCalcFields は次のときに呼び出されます:
- データセットが開かれた
- データセットが編集モードになった
- レコードがデータベースから抽出された
- フォーカスがあるビジュアル コンポーネントから別のコンポーネントへ、またはデータ対応グリッド コントロールのある列から別の列に移り、現在のレコードが編集された
AutoCalcFields が False の場合、レコード内の個々のフィールドが編集されても(上の4番目の状態)、OnCalcFields は呼び出されません。
警告: OnCalcFields は頻繁に呼び出されるため、これに記述するコードは簡潔でなければなりません。また、AutoCalcFields は True の場合、OnCalcFields は、データセット(または、マスタ/詳細関係の一部である場合にリンクされたデータセット)を修正するアクションを実行してはいけません。再帰を引き起こす可能性があります。たとえば、OnCalcFields が Post を実行するとします。AutoCalcFields が True の場合、OnCalcFields は再び呼び出され、別の Post 呼び出しを発生され、それが繰り返されます。
OnCalcFields が実行されると、データセットは dsCalcFields モードに入ります。この状態では、ハンドラが編集するよう設計されている計算フィールド以外のレコードへの変更、追加は抑制されます。他の変更を制限するのは、OnCalcFields が、計算フィールドの値を得るために他のフィールドの値を使用するためです。それら他のフィールドへの変更は、さもなければ、計算フィールドへ入れる値を不正なものにしてしまいます。OnCalcFields が終了したのち、データセットは dsBrowse の状態に戻ります。