Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 8.1 Pro : Microsoft 365)
クエリにて空白の場合は全て抽出したい
投稿日時: 22/02/25 16:16:18
投稿者: jimusyo

昨日はお世話になりました。
 
 昨日からの続きとはなってしまうのですが、
 
 フォーム上で非連結のテキストがあり「から」「まで」としております。
 
 日付「から」「まで」が必ず入力されている場合、Betweenにて抽出できるようになりました。
 
 ここで、フォーム上の検索日付の「まで」が入力されていない場合、
 クエリにて全ての日付を抽出したく、クエリの条件式に
 
 iif([Forms]![Fデータ検索]![まで] = "", Like "*",Between [Forms]![Fデータ検索]![から] and [Forms]![Fデータ検索]![まで])
 
 と入力しましたが、日付「から」「まで」を入れていようが、どちら側も指定しないでも
 「式が正しく入力されていないか、複雑すぎるため評価できません」
 
 とのエラーが返ってきます。
 
 ちなみに
 Between [Forms]![Fデータ検索]![から] And [Forms]![Fデータ検索]![まで]
 とクエリ条件式に入力しますと、
 ・フォーム上の「から」が空白でも、「まで」が指定されていればデータを抽出する
 ・フォーム上の「まで」も空白にすると、先のエラー表示が出る
 
 クエリ上でどのような条件式を記述すればよろしいでしょうか。
 
 欲を言えば
 ・「から」「まで」両方指定されている場合は、その範囲を抽出
 ・「から」が指定されていない場合は、「まで」までの指定範囲で抽出
 ・「まで」が指定されていない場合は、「から」の日付以降全てを抽出
 したいです。
 
よろしくお願いします。

回答
投稿日時: 22/02/25 16:33:20
投稿者: sk

引用:
フォーム上で非連結のテキストがあり「から」「まで」としております。

引用:
Between [Forms]![Fデータ検索]![から] and [Forms]![Fデータ検索]![まで]

引用:
・「から」「まで」両方指定されている場合は、その範囲を抽出
・「から」が指定されていない場合は、「まで」までの指定範囲で抽出
・「まで」が指定されていない場合は、「から」の日付以降全てを抽出

・[から]と[まで]の値が共に Null である場合は全てのレコードを表示
 
という条件も加えるのであれば、次のようなクエリを作成なさればよいのではないかと。
 
( SQL ビュー)
---------------------------------------------------------------------
PARAMETERS [Forms]![Fデータ検索]![から] DateTime, [Forms]![Fデータ検索]![まで] DateTime;
SELECT [table_A].*
FROM [table_A]
WHERE (IIf([Forms]![Fデータ検索]![から] Is Null,True,DateSerial([年],[月],[日])>=[Forms]![Fデータ検索]![から])=True)
  AND (IIf([Forms]![Fデータ検索]![まで] Is Null,True,DateSerial([年],[月],[日])<=[Forms]![Fデータ検索]![まで])=True);
---------------------------------------------------------------------

投稿日時: 22/02/25 16:57:43
投稿者: jimusyo

sk様
 
 早々なるご回答いただきありがとうございます。
 
 ・「から」「まで」指定 → OK
 ・「から」「まで」指定せず → OK
 ・「まで」だけの指定 → OK
 ・「から」だけの指定 → NG(ん?エラーが返ってくる)でしたが、
  テーブルを見たら年・月・日にNullだけでなく、0(ゼロ)が入っているため
  エラーが返ってきたようです。
  Null,ゼロを対象外としたところ、無事望むデータ抽出ができました。
 
 本当に感謝しかございません。
 
大変ありがとうございました。