項目を計算する
データセットの理解:インデックス への移動
項目エディタを使用すれば,データセットに計算項目を定義できます。データセットに計算項目が含まれている場合は,それらの項目の値を計算するコードを DB.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 状態に戻ります。