こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Access2000 null処理

Accessのデータベースで商品管理のシステムを作っています。
フォーム上で検索条件を入力し、商品管理のテーブルから商品データを検索するというフォーム、クエリを作ります。

商品管理テーブルの中に 「売上日」という項目があります。
検索項目の1つに売上日があるのですが、以下の状況下でレコードを抽出します。

(1)フォーム上には [売上日S]と[売上日F]があり、[売上日S]以上[売上日F]以下でレコードを抽出。
(2)[売上日S]と[売上日F]がともにnullの場合は全件を表示。
(3)テーブルでは、売上日がnullのことがある。nullは最小値とする。
例えば、フォーム上で [売上日S]がnull [売上日F]が07/01/01ならば、
07/01/01、またはそれ以前に売り上げた商品と、売上日がnullのレコードを抽出。(つまり、 <= 07/01/01 or null になる)

よく
>= iif(IsNull([forms]![form名]![売上日S]),#1950/01/01#,[forms]![form名]![売上日S]) And <= iif(IsNull([forms]![form名]![売上日F]),#2050/12/31#,[forms]![form名]![売上日F])
を抽出条件にしてnull対応するのですが、これでは、売上日Sがnullのときにnullが含まれず、nullが最小値になりません。

なので
クエリ上でもう1つ項目を作り
iif(IsNull([売上日]),#1950/01/01#,[売上日])
とし、
この項目を上の抽出条件で抽出するようにしました。

これでうまくいくと思ったのですが、だめでした。
[売上日S]と[売上日F]がともにnullのときはすべて項目が表示されます。
しかし、[売上日S]=null,[売上日F]=07/01/01 のような場合、売上日がnullのものが表示されません。

直接、抽出条件に 
>= #1950/01/01# And <= #07/01/01# と打てば、ちゃんと動くし、
売上日S = 07/01/01 売上日F = 07/01/10 のようなときは、ちゃんと抽出されます。

売上日S がnull、売上日Fが非ヌルのときにもちゃんと抽出されるようにするにはどうすればよいのでしょうか? ところで、この不具合は私の記述ミスではないと思うのですがコレはAccess2000の不備でしょうか?
どなたかアドバイスをお願いします。

投稿日時 - 2007-11-04 00:28:44

QNo.3487133

すぐに回答ほしいです

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

>[売上日S]と[売上日F]がともにnullのときはすべて項目が表示されます。
そんなはずないと思いますよ

Between Nz([forms]![form名]![売上日S],#1950/01/01#) and Nz([forms]![form名]![売上日F],#2050/12/31#) or [forms]![form名]![売上日S] is null

投稿日時 - 2007-11-06 20:54:31

お礼

回答ありがとうございます。
そんなことはなくはなかったのですが…笑

昨日解決したのですが、
上記の記述の 1950/01/01を全部2000/01/01に書き換えたら、
自分の思うようにプログラムが動きました。

access97だと、1950/01/01で正常に動くので、同じ方法でやったのですが、
2000ではだめでした

投稿日時 - 2007-11-06 21:17:48

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問