フォーラム


ゲスト  

ようこそ ゲスト さん。このフォーラムに投稿するには 登録が必要です。

ページ: [1]
トピック: IBX では RecordCount を使ってはいけない
DEKO
管理者
投稿数: 2645
IBX では RecordCount を使ってはいけない
on: 2013/08/12 09:38 Mon

よく知られた話なのですが、一応書いておきます。
例えば以下のようなコードでは RecordCount() はレコードの数を正しく返しません。

  IBQuery1.Open;
RecCnt := IBQuery1.RecordCount;
while not IBQuery1.Eof do
begin
...
IBQuery1.Next;
end;
IBQuery1.Close;

 
BDE では RecordCount() がよく使われていたかと思いますが、BDE から IBX へ移行する場合にはこの部分をどうにかする必要があります。簡単に済ますには Open() の直後にコードを追加します。

  IBQuery1.Open;
IBQuery1.FetchAll; // 追加
RecCnt := IBQuery1.RecordCount;
while not IBQuery1.Eof do
begin
...
IBQuery1.Next;
end;
IBQuery1.Close;

 
または

  IBQuery1.Open;
IBQuery1.Last; // 追加
IBQuery1.First; // 追加
RecCnt := IBQuery1.RecordCount;
while not IBQuery1.Eof do
begin
...
IBQuery1.Next;
end;
IBQuery1.Close;

 
このようにします。ですが、これらの方法だとレコード件数が多い場合にはレコード件数を取得するのにやたらと時間が掛かってしまいます。レコード件数を得るには "Select Count(*) From ~" を別に実行するのがいいでしょう。

See Also:
[InterBase & IBX ヘルプ]
http://www.geocities.jp/kimura804/rdb/InterBaseFAQ/IBandIBX_FAQandTutorials_j.htm#RecordCount

ページ: [1]
WP Forum Server by ForumPress | LucidCrew
バージョン: 1.7.5 ; ページロード: 0.02 sec.