DBGridに表示されたレコード数を得るには?

解決


サンプー  2005-03-22 09:32:57  No: 13872  IP: [192.*.*.*]

Del6Pro,BDE,XPProです。
TQuery,TDataSource、DBGridを関連付けてデータを表示しています
ここで、TQueryにFilterを記述して、Filterをかけています。
このFilter処理を行なった後のレコード数を求めたいのですが、よくわかりません。どなたかご教示ください。
ちなみに、TQuery.RecordCountを使うと、TQueryのSQL発行により生成されたデータ数しか取得できません。

編集    削除
HOta  2005-03-22 19:15:35  No: 13873  IP: [192.*.*.*]

Filterで処理する場合は、1レコードずつ数えます。
C/Sでは、TQueryでFilterではなく、Where句で処理する方が
一般的でしょう。これなら、そのままです。

編集    削除
サンプー  2005-03-22 20:50:49  No: 13874  IP: [192.*.*.*]

HOtaさんいつも早いレス有難うございます。
>Filterで処理する場合は、1レコードずつ数えます。

もう少し、具体的に教えていただけませんか。

>C/Sでは、TQueryでFilterではなく、Where句で処理する方が
一般的でしょう。これなら、そのままです。

Where句で処理した方法では、少し、時間がかかるようなので、
はじめ、Edit1  Edit2に日付を入力し、この日付に該当するレコードを選択するようにSQLを発行し、このデータから、担当者ごとのデータを取り出す、Filterを設定するイベントを記述したいと考えています)。SQL発行後のレコードはキャッシュに保持されていると思いますので、この操作が一番簡単かと思います。
他に、良い方法があったら教えていただけませんか。

編集    削除
@っしー  2005-03-22 20:54:37  No: 13875  IP: [192.*.*.*]

ShowMessage(IntToStr(DBGrid1.DataSource.DataSet.RecordCount));

これで、取得できませんか?

編集    削除
HOta  2005-03-22 22:09:37  No: 13876  IP: [192.*.*.*]

TDataSetのRecordCountはFilterの有無にかかわらず同じです。


Var
  BM : TBookmarkStr;
  Count:Integer;
Begin
  Query1.Filtered := true;
  BM := Query1.Bookmark;
  Query1.DisableControls;
  Count := 0;
  try
    Query1.First;
    While Not Query1.Eof do
    Begin
      Inc(Count);  //ここで数える
      Query1.Next;
    End;
  Finally
    Query1.Bookmark := BM ;
    Query1.EnableControls;
  End;
End;

C/Sの場合は、トラフィックを減らすために、選択結果をなるべく少なくするようにします。

編集    削除
@っしー  2005-03-22 22:26:10  No: 13877  IP: [192.*.*.*]

>C/Sの場合は、トラフィックを減らすために、選択結果をなるべく少なくするようにします。

こちらの環境:WinXP + Del7Ent + BDE + Paradox(ローカルDB)では、TDataSetのRecordCountで問題なく取得できます。
C/S環境では、どうなるか試験してませんが、、、

C/S or ローカル上に関わらず、HOtaさんのサンプルコードですと、確実に取得できますね。

編集    削除
サンプー  2005-03-22 23:30:57  No: 13878  IP: [192.*.*.*]

HOtaさん、っしーさん有難うございました。早速試してみます。

編集    削除
サンプー  2005-03-23 18:56:12  No: 13879  IP: [192.*.*.*]

HOtaサン有難うございました。何とか、行数を取得できました。しかしまた、問題が発生しました。DBGridを配置してあるフォームにDBNavigatorを貼り付けてあり、DBGridと関連付けてあります。このDBNabigatorを利用して、データを削除した場合、上記のコードをどのイベントを用いて、どのタイミングで記載すればよいのかわかりません。色々試してみたのですが・・・・
どなたか、ご教示下さい。

編集    削除
HOta  2005-03-23 22:40:30  No: 13880  IP: [192.*.*.*]

TQueryのAfterDeleteイベントはどうでしょうか?堂でしょうか?

編集    削除
サンプー  2005-03-24 18:14:45  No: 13881  IP: [192.*.*.*]

HOta さん  いつも有難うございます。やっぱりだめみたいです。
別の方法(SQLを発行する)で、やり直そうと思います

編集    削除
HOta  2005-03-24 19:16:38  No: 13882  IP: [192.*.*.*]

TQueryのAfterDeleteイベントは起こりませんか?

編集    削除
サンプー  2005-03-24 20:23:14  No: 13883  IP: [192.*.*.*]

イベントが起こっているのはどのようにして、判定するのですか??
初歩的な質問ですみません。ご教示願います

編集    削除
HOta  2005-03-24 22:39:40  No: 13884  IP: [192.*.*.*]

TQueryのAfterDeleteイベントを作成して、
そのイベントの中で数え直すことをしていますでしょうか?
そのイベントの中にブレークポイントでも置けば
分かります。

編集    削除
サンプー  2005-03-25 06:20:26  No: 13885  IP: [192.*.*.*]

HOtaさん色々ありがとうございました。afterDeleteイベントを使って、何とかできました。また、ご教示願います

編集    削除