解決済み

ACCESSクエリエラーの原因

  • すぐに回答を!
  • 質問No.5721298
  • 閲覧数837
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 71% (286/398)

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の参照元のテーブルでは
全てのフィールドについて数値型にしています。

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

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

  • 回答No.1

ベストアンサー率 75% (678/900)

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

weightは数値型なのに、[weight]<>""
はweightをテキスト型として評価しています。
お礼コメント
seiiiichi

お礼率 71% (286/398)

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

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

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

数値型の場合/テキスト型の場合のNULL判定方法の使い分けがあいまいでしたので、
勉強になりました。
ありがとうございました。
投稿日時 - 2010-03-04 05:42:32
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

ピックアップ

ページ先頭へ