フィールドの合計を取得したい

解決


すずめ  2003-04-04 19:01:55  No: 3263

はじめまして すずめです。

Field_1  Field_2 Field_3
03/01/03 AAA          10
03/02/03 BBB          50
03/03/03 CCC          20
というテーブル(Paradox)があったとします。
これをTTable、TDataSource、TDBGridを使ってTDBGridに表示しています。
このデータのField_3の合計を求めたいんですが、
現在は
procedure TForm1.Button1Click(Sender: TObject);
var
  Rec:Integer;
begin
Rec:= 0;
Table1.First;
while not Table1.Eof do
begin
  Rec:= Rec + Table1.FieldByName('Field_3').AsInteger;
  Table1.Next;
end;
Label1.Caption:= IntToStr(Ret);
end;

としてるんですが、TDBGridのレコードのフォーカスが、
最終行に移動してしまいます。(当然でしょうが...)
SQLを使うという方法もあるというのはわかったんですが、
どれをどのようにすればいいのかまったくわかりません。
具体的にどうしたらいいかご伝授ください。

Delphi5です。


にしの  2003-04-04 21:19:06  No: 3264

forで回した後、
Table1.First;
で最初の行に戻してみるとかでだめですか?
SQLは、TQueryコンポーネントで使えます。

SELECT SUM(Field_3) FROM テーブル名

でできると思います。


すずめ  2003-04-08 02:22:18  No: 3265

にしのさんありがとうございます。
forで回すやり方では、レコードを参照する際はその動作が
必ず見えてしまうんですね。

SQLはTQueryコンポーネントを使うというのはわかっているんですが、
その後それをどう使うのかがわからないんですけど、
できたら具体的に教えてもらえないでしょうか。

よろしくお願いします。


えび  2003-04-08 03:08:10  No: 3266

ループで処理する場合にレコードの移動を隠す方法もありますよ。

with Table do
begin
  SaveBookMark := BookMark;  //今のレコード位置を確保
  DisableControls;  //データセットとコンポーネントを切断
  First;  //最初のレコードへ移動
  try
    while not Eof do
    begin
      //集計処理
      Next;
    end;
    BookMark := SaveBookMark;  //レコード位置を戻す
  finally
    EnableControls;  //データセットとコンポーネントを接続
  end;
end;


すずめ  2003-04-08 19:41:28  No: 3267

えびさんありがとうございます。

教えていただいた方法で希望の処理が実現しました。
ありがとうございました。


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

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






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