Del6Pro,BDE,XPProです。
TQuery,TDataSource、DBGridを関連付けてデータを表示しています
ここで、TQueryにFilterを記述して、Filterをかけています。
このFilter処理を行なった後のレコード数を求めたいのですが、よくわかりません。どなたかご教示ください。
ちなみに、TQuery.RecordCountを使うと、TQueryのSQL発行により生成されたデータ数しか取得できません。
Filterで処理する場合は、1レコードずつ数えます。
C/Sでは、TQueryでFilterではなく、Where句で処理する方が
一般的でしょう。これなら、そのままです。
HOtaさんいつも早いレス有難うございます。
>Filterで処理する場合は、1レコードずつ数えます。
もう少し、具体的に教えていただけませんか。
>C/Sでは、TQueryでFilterではなく、Where句で処理する方が
一般的でしょう。これなら、そのままです。
Where句で処理した方法では、少し、時間がかかるようなので、
はじめ、Edit1 Edit2に日付を入力し、この日付に該当するレコードを選択するようにSQLを発行し、このデータから、担当者ごとのデータを取り出す、Filterを設定するイベントを記述したいと考えています)。SQL発行後のレコードはキャッシュに保持されていると思いますので、この操作が一番簡単かと思います。
他に、良い方法があったら教えていただけませんか。
ShowMessage(IntToStr(DBGrid1.DataSource.DataSet.RecordCount));
これで、取得できませんか?
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の場合は、トラフィックを減らすために、選択結果をなるべく少なくするようにします。
>C/Sの場合は、トラフィックを減らすために、選択結果をなるべく少なくするようにします。
こちらの環境:WinXP + Del7Ent + BDE + Paradox(ローカルDB)では、TDataSetのRecordCountで問題なく取得できます。
C/S環境では、どうなるか試験してませんが、、、
C/S or ローカル上に関わらず、HOtaさんのサンプルコードですと、確実に取得できますね。
HOtaさん、っしーさん有難うございました。早速試してみます。
HOtaサン有難うございました。何とか、行数を取得できました。しかしまた、問題が発生しました。DBGridを配置してあるフォームにDBNavigatorを貼り付けてあり、DBGridと関連付けてあります。このDBNabigatorを利用して、データを削除した場合、上記のコードをどのイベントを用いて、どのタイミングで記載すればよいのかわかりません。色々試してみたのですが・・・・
どなたか、ご教示下さい。
TQueryのAfterDeleteイベントはどうでしょうか?堂でしょうか?
HOta さん いつも有難うございます。やっぱりだめみたいです。
別の方法(SQLを発行する)で、やり直そうと思います
TQueryのAfterDeleteイベントは起こりませんか?
イベントが起こっているのはどのようにして、判定するのですか??
初歩的な質問ですみません。ご教示願います
TQueryのAfterDeleteイベントを作成して、
そのイベントの中で数え直すことをしていますでしょうか?
そのイベントの中にブレークポイントでも置けば
分かります。
HOtaさん色々ありがとうございました。afterDeleteイベントを使って、何とかできました。また、ご教示願います
ツイート | ![]() |