タイトル : Re: 該当レコードが存在しない場合にRecordcount=1と返される 投稿日 : 2014/07/10(Thu) 20:47 投稿者 : 魔界の仮面弁士
> VB6.0とACCESS2000にて10数年ぶりに過去の遺産を修正しております。 お疲れ様です……!! > そもそもRecordcountを判断材料にするのは間違っているのか? 基本的には、RecordCount プロパティを使用するべきではありません。 ここで具体的な理由について言及することは避けますが、ざっくり言えば レコードの存在確認なら EOF プロパティを用いるべきですし、 総件数を求めるなら、COUNT 集計関数を用いる方が望ましいです。 > 該当レコードが存在しない場合にもRecordcount=1と返される事です。 ここで重要なのは「該当レコード」ではなく「結果レコード」です。 今回は、『集計関数』を使っているため、集計対象のデータが 0 件であっても、 集計結果のレコードは生まれることになります。 取得した Recordset において、.EOF と .BOF のプロパティが共に True であるならば、 .RecordCount プロパティが返す値は 0 となります。 しかし .EOF と .BOF のいずれかが False の場合、少なくともその Recordset は 1 行以上のデータを含んでいることになります。(たとえば null 値しか持たない行であっても) 本当に 0 行にしてみたいのであれば、検索するクエリーの最後に 『 HAVING MAX(hoge) IS NOT NULL 』を加えてみて下さい。 今度は .RecordCount が 1 を返さなくなるでしょうし、また、 .Fields(0).Value から値が返されることも無くなるはずです。 (Access のクエリデザイナで、両方の実行結果を比較してみて下さい) > 該当レコードがなければ=0(とかマイナス値?)になるような気が ちなみに、総レコード数をカウントしないタイプのカーソルの場合は、 実際のデータ数に関係なく、RecordCount = -1 となりえます。ご注意あれ。 |