tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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 となりえます。ご注意あれ。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。