プロが教えるわが家の防犯対策術!

Access 2003です。
[Start Date], [End Date]を入力するフォームで日付が入力されていなければ、

iif([Start Date] is null,<[End Date],>[Start Date])

のようにクエリ条件を設定したいのですが、
iif [Start Date] is null
を使うと、続く条件の中で<>がうまく働かないという現象が起きます。
(クエリでなにも抽出されない)

iif([Start Date] is nullの条件を入れなければ(つまり[Start Date],[End Date]はブランクにならないという前提ならば)
1. >[Start Date]
2. <[End Date]
3. Between [Start Date] And [End Date]

などどれも問題なく動きますし、
iif([Start Date] is null~の条件を入れても続く条件の中で<>を使わなければ

iif([Start Date] is null,[End Date],[Start Date])

はちゃんと動きます。
どうしてこのような現象が起こるのか、また回避する方法をご存知のかたがいらっしゃいましたら、どうぞご教示ください。
よろしくお願いします。

A 回答 (2件)

回避方法については回答出てますので、どうしてこのような現象が起こるのか、について。



クエリのデザインビューの抽出条件では、式の左辺を省略しますが、実際のSQL文に直した場合、自動的に左辺が追加されます。

例えば、あるフィールド([A]とします)の条件が下記だった場合、

>[Start Date]

実際のSQL文での条件は、左辺が追加され、下記の様になります。

WHERE [A] > [Start Date]


抽出条件が質問の式だった場合、

iif([Start Date] is null,<[End Date],>[Start Date])

実際の条件式は下記の様になります。

WHERE [A]=iif([Start Date] is null,[A]<[End Date],[A]>[Start Date])


[Start Date]がnullだった場合、

WHERE [A]=([A]<[End Date])

と評価され、期待通りの結果とはなりません。


クエリのデザインビューは便利ですが、万能ではありません。
(全てのSQL文を表現できる訳ではない)

クエリの実体はSQL文です。複雑なクエリの場合、SQL文についての知識が必要になってきます。

興味があれば、SQL文について勉強してみて下さい。
    • good
    • 0
この回答へのお礼

はー、なるほど。
確かにSQLでみるとおっしゃるようなクエリになってます。
デザインビューは万能ではないんですね。
とても参考になりましたし、これから自分でも調べてみようと思います。
たいへん分かりやすい解説どうもありがとうございました!

お礼日時:2007/10/02 08:20

これでは駄目でしょうか


Between Nz([Start Date],#1900/1/1#) And Nz([End Date],#2087/12/31#)

Nz関数は変数がNullの時の代替値を設定します。
    • good
    • 0
この回答へのお礼

あ、すごい!できました!
Nzっていう関数があるんですね、知りませんでした。
これからもっと勉強して知識を増やしていこうと思います。
どうもありがとうございました!!

お礼日時:2007/10/02 08:12

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A