はじめまして すずめです。
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です。
forで回した後、
Table1.First;
で最初の行に戻してみるとかでだめですか?
SQLは、TQueryコンポーネントで使えます。
SELECT SUM(Field_3) FROM テーブル名
でできると思います。
にしのさんありがとうございます。
forで回すやり方では、レコードを参照する際はその動作が
必ず見えてしまうんですね。
SQLはTQueryコンポーネントを使うというのはわかっているんですが、
その後それをどう使うのかがわからないんですけど、
できたら具体的に教えてもらえないでしょうか。
よろしくお願いします。
ループで処理する場合にレコードの移動を隠す方法もありますよ。
with Table do
begin
SaveBookMark := BookMark; //今のレコード位置を確保
DisableControls; //データセットとコンポーネントを切断
First; //最初のレコードへ移動
try
while not Eof do
begin
//集計処理
Next;
end;
BookMark := SaveBookMark; //レコード位置を戻す
finally
EnableControls; //データセットとコンポーネントを接続
end;
end;
えびさんありがとうございます。
教えていただいた方法で希望の処理が実現しました。
ありがとうございました。
ツイート | ![]() |