プロが教える店舗&オフィスのセキュリティ対策術

ACCESS2007を使用しています。

作成時はうまくいってたはずのクエリが最近きちんと動作しなくなり
原因を探してますが分からず皆様のお知恵をお借りしたいと思っています。


問題のクエリではクエリ実行時にある条件のフィールドに「#error」と出力されています。
(英語版のACCESSですので、もしかしたら日本語版だと少し違うかもしれません。)
そのクエリフィールドの内容は、

IIf([weight]<>"",IIf([weight]<[SD3n],3,IIf([weight]<[SD2n],2,IIf([weight]<[SD2p],1,IIf([weight]<[SD3p],4,5)))),9)

このクエリで参照しているのは1つのクエリで、その中に
weight, SD3n, SD2n, SD2p, SD3p
というフィールドがあります。

簡単に説明すると、各人の体重(weight)を元にその体重がどのレベル(太りすぎとか痩せ気味とか)にあるかを
1~5のグループに分けるというものです。
各人の年齢や性別によってSD3n, SD2n, SD2p, SD3pは違うものが入っています。

また、体重が入力されていないものは「9」を返します。

で、問題の「#error」が返されるのは、体重が入力されている全てで、体重が空白のレコードには
きちんと「9」を返してくれます。

ちなみに、最初にIIF関数の条件部分を「is Null」に変えて、

IIf([weight] is Null,IIf([weight]<[SD3n],3,IIf([weight]<[SD2n],2,IIf([weight]<[SD2p],1,IIf([weight]<[SD3p],4,5)))),9)

とした場合は、体重が入力されているレコードについて全て「5」が返されます。
本来はデータの内容的には全て「3」を返すはずです。

また、元のクエリのweight, SD3n, SD2n, SD2p, SD3pの参照元のテーブルでは
全てのフィールドについて数値型にしています。

最初、ダミーデータ等でテストをしていたときはうまくいっていたので、何かがおかしくなったのだと
思うのですが、よくわからず、もしも、アドバイス等ありましたら教えて下さい。

A 回答 (1件)

IIf([weight]<>"",


ではなく、
IIf(IsNull([weight]),
です。

weightは数値型なのに、[weight]<>""
はweightをテキスト型として評価しています。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
結果から報告しますと、うまくいきました。

教えていただいた方法でやると、
 IIf([weight] is Null,
でやった場合と同じ結果が出ました。

よく確認すると、もともとの条件文は「""でない場合」なので、
「[weight] is Null」や「IsNull([weight])」では反対の条件になってしまってました。
それで、IIf関数の2番目と3番目を入れ替えると正常に期待した値が返ってきました。

数値型の場合/テキスト型の場合のNULL判定方法の使い分けがあいまいでしたので、
勉強になりました。
ありがとうございました。

お礼日時:2010/03/04 05:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!