度々、すみません。
DL6Pro,XPにてデータベースを作成しています。以前使用していたデータベースparadoxをインターベースへ拡張しようとしています。プログラムのなかで行数を取得するのにparadoxの時には、RecordCountを使ってうまく動作していたのですが、IBにすると行数を取得できないようです。
取得したい画面にDBGridを貼り付け、DatasourceとDataSet、DataBaseを関連付け、スクロールバーで移動させた後、取得するとうまくいくようです。本来、DBGridは必要ない画面ですのが・・・!?
IBQueryでRecordCount関数を利用するには、何か特別の注意かコーディング上の注意が必要なのでしょうか?
どなたかご教示下さい。
ヘルプ
TIBSQLのRecordCount プロパティ
では、
RecordCount プロパティを使うと,問い合わせで返されるレコード数を調べることができます。
結果セットで 100 行を返す場合には,すべてのレコードがアクセスされたときにだけ,
RecordCount は 100 になります。
つまり,最初のレコードにアクセスした後では RecordCount は 1,といった具合になります。
とあります。
InterBase使える環境ではないのですが
例えば
IBQuery → TDataSetProvider → TClientDataSet
でつなげたり出来ますか?
出来るならばこれでClientDataSet.RecordCountでレコード件数は拾えるはずです。
Ruさん、IGYさんたびたびありがとうございます。igyさん御指摘のヘルプは一応目を通してはいたのですが、はっきりとは理解できていませんでした。Ruさんの方法でIBQueryにはつなぐことが出来ました。
また、Client.RecordCountでレコード件数は拾うことが出来ようです。
ただし、結果としては、初期に設定したIBQueryで取得した行数でした。IBQueryのSQLを途中で変更して、select文をを発行した後のRecordCountを取得したいのですが、IBQuery → TDataSetProvider → TClientDataSetの関係をSQL発行後、切断、再接続する必要があるのでしょうか?また、どのようにすれば、良いのでしょうか?あつかましい質問ですがよろしくご教示下さい。
一般的なRDBMSでRecordCountは保証されていません。Count文を発行して取得しましょう。
HOTAさん、有難うございました。
Count文を発行して取得することができました。
期待通りの結果が得られました。
まだまだの知識のようなので、今後ともよろしくお願いいたします。
ツイート | ![]() |