DBGRIDの計算

解決


岸田光明  2004-12-31 13:47:12  No: 12541

先日はありがとうござました。

今回、DBGERIDで計算した値を後ろのフィールドにリアルタイムに代入したくおもいまして探してみた所、CalcFieldsを使うようなことが描いてあり下記のようにしてみたんですが

------------------------------------------------------
procedure TForm1.Table1CalcFields(DataSet: TDataSet);
begin
showmessage('きてます。');
dataset.FieldByName('total').Asinteger :=
dataset.FieldByName('point').AsInteger+dataset.FieldByName('point2').AsInteger;
end;

procedure TForm1.Table1AfterOpen(DataSet: TDataSet);
begin
  with Table1 do
  begin
    OnCalcFields := Table1CalcFields;
    DisableControls;
    while (Eof = false) do
      Next;
    First;
    EnableControls;
    end;
  end;
--------------------------------------------------------------
どうやら、Table1CalcFields のほうには命令がとどいていないようで
反映されません

別の方法でもOKですので
           A   B    C
---------------------------
1  kuruma  10  30   40
2  densya  10  11   21
3  aruki   2    3    5
----------------------------
のようにA+Bのフィールドの合計をCに出して
表示させる方法はないでしょうか?


HOta  2004-12-31 16:41:49  No: 12542

OnCalcFieldsはTDataSetのイベントです。
使い方は、まずTDataSetにTDbGridで表示するFieldを計算項目として追加します。
たとえばTQueryを使った場合は、Query1右クリックから、[項目の設定]
をだし、項目エディターでさらに右クリックから[項目の新規追加]を選び、
Fieldの名前を設定して、Field型等を設定して、計算項目をクリックします。
これでOKすると、TDataSetに計算項目が追加されます。この後、TDataSetのOnCalcFieldsイベントを作成して、この中で、上記の計算を書きます。この計算は、計算項目しか操作できません。普通のDataFieldはEdit等で値を変更しなければいけません。OnCalcFieldsイベントは、そのレコードが呼ばれたときに発生します。この場合は、DbGridにそのレコードが表示されるときに発生します。
DbGridで計算する場合は、直接TDataSetに対して値を書き換えないといけません。


岸田光明  2005-01-01 07:47:08  No: 12543

HOtaさん、詳しい説明ありがとうございました。
自力だと、絶対にたどり着けないところでした(^_^;)

こんな設定の仕方があったんですね
安心して年をこせます。

どうもお世話になりました!!


岸田光明  2005-01-11 08:48:21  No: 12544

あつ、解決マーク付け忘れていました。
おそくなりましたが(^_^;)


岸田光明  2005-01-11 08:48:58  No: 12545

ピッ!!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加