- ベストアンサー
アクセス DCountの返り値が必ず0になる
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> DCount("[" & ColName & "]", "test", "[" & ColName & "] = '" & ColName & "'") これは何を得たいのでしょう。 ColName = "あああ" なら DCount("[あああ]", "test", "[あああ] = 'あああ'") になると思いますが、添付された図内に [あああ] = 'あああ' は無いですね。 単に DCount("[あああ]", "test") であれば、図の見えている範囲では 5 が返ってくると思いますが・・・・
その他の回答 (1)
- DexMachina
- ベストアンサー率73% (1287/1744)
先日はねぎらいのお言葉を戴き、ありがとうございました。 http://okwave.jp/qa/q7900814.html さて、本題ですが・・・ テキスト型のフィールドを絞り込み条件としたDCount関数 では、確かに第3引数は「[フィールド名]='検索文字列'」に なることが多いですが、それ以外の形を使用する場面も あります。 今回提示されたコード上の式から私が推測する、「想定した 式」に近く、かつ「意図した(と思われる)結果」が得られるのは、 以下に示す式です。 但し、Accessでテキスト型のフィールドを作成したときに 既定の値となる「Null」は特殊な値で、「=」では同じ値か どうかの判定ができません。 (イミディエイトウィンドウで「?Null=Null」の結果を確認する と、「True」ではなく「Null」が返ります) PVTETEJPB8さんが、この点をどう想定していたかによって 「意図した結果」も変わるため、以下のように、結果が 異なる2通りの式が考えられます: a) Debug.Print DCount("[" & ColName & "]", "test", "[" & ColName & "]=[" & ColName & "]") b) Debug.Print DCount("[" & ColName & "]", "test", "Nz([" & ColName & "])=Nz([" & ColName & "])") 上記の2つの式のうち、 a)の場合は『あああ』の値が「Null」以外のものの全件数が、 b)の場合は『あああ』の値に関係なく、テーブルの全件数が、 それぞれ返されます。 (第2引数を省略したNz関数では、対象がテキスト型なら 空文字("")、数値型の場合は「0」に変換されます。 Nullと違い、「""=""」の比較結果は、通常の文字列と 同様に「True」となるため、テーブルの全件数がカウント される結果となります) 但し、上記の結果を得たい場合、通常はそれぞれ以下のように 「第3引数を省略した式」を使用します: a) Debug.Print DCount("[" & ColName & "]", "test") または b) Debug.Print DCount("*", "test") http://office.microsoft.com/ja-jp/access-help/HA001228817.aspx (ページ中ほどの「+ヒント」(青文字の折り畳み)以降を特に参照) ・・・以上、長くなりましたが、参考まで。
お礼
ご回答ありがとうございます。
お礼
フィールド名も検索文字も変数に入れてましたね。ありがとうございました。