• ベストアンサー

Null値件数をカウントする式について

あるテーブル(UserLog)から、「LogOffTime」フィールドの値が空欄(Null)のデータを探す式ですが、 Access_97で・・・ DCount("*", "UserLog", "[LogoffTime] = Null") ・・・としていたのを、Access2000にしたら上手く動きません。 アレコレ試行錯誤して・・・ DCount("[UL_Id]", "[UserLog]", "[LogoffTime] is Null") ・・・だと上手く行くのですが、資料類を見ても「=」が使えるハズなんですけど、なぜダメなんでしょう?

質問者が選んだベストアンサー

  • ベストアンサー
  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.2

Accessは2種類の空白の値を使って区別します。空白値にはNull値(データが存在しないこと、またはデータが不定であることを示すために使用する値。)と 長さ0の文字列(文字を1つも含まない文字列。意図的にフィールドに値がないようにしていることを示すことができる。)がありますよね。 =Nullや<>Nullのようなこの状況ではTrue(真)と評価される式でもFalse(偽)になります。 Null値を含む式はすべて式自体がNull値となりFalse(偽)と評価されるためです。 2000以降はIsNull関数でNull値を厳密に?判定しているのでNullの判定はIsNull関数でやらなければだめであるという事だと思いますが。

KonaCoast
質問者

補足

ありがとうございました。 Ac97とAc2000で、同じ条件式で試した処・・・ 式                 Ac97 Ac2000 =IIf([xxx]=Null,"○","□")     ○  □ =IIf([xxx] Is Not Null,"□","○")  ○  ○ =IIf([xxx] Is Null,"○","□")    ○  ○ ・・・の様な結果を示しました。 「[xxx]<>Null」と書いても「[xxx]Is Not Null」と 勝手に変換されてしまうので、やっぱり「=」が クセモノなんでしょうかネェ? Ac2000のHelpでも、そんな事明記されてなかった様な。。。 これを元に、書き換え初めます。。。 ありがとう御座いました!

その他の回答 (1)

回答No.1

基本的に振る舞いが似ていても、ISと=の仕様は違います。 おそらく、原因はその辺かと思います