パラメータクエリで値を入力しないときにすべてのレコードを返す

f:id:accs2014:20170801231135p:plain:right:w450

 入力された値をそのまま抽出条件とするような単純なパラメータクエリの場合、何か値を入力しないと…


f:id:accs2014:20170801231131p:plain:right:w400

 レコードは1つも抽出されません。
 さて、このクエリにおいて、何も入力しない場合にすべてのレコードを返す(つまり無条件とする)には、抽出条件をどのように設定すればよいでしょうか。
 値が入力された場合にどう扱うかによって答えは異なりますが、以下では2つの例を示します。
 また、備考として値の大小比較を伴う場合についても触れておきます。



値を入力すれば完全一致検索、入力しなければすべてのレコードを返す場合

 次のように設定します。

Like Nz([出身地を指定],"*")

 こうすると、「東京都」と入力された場合の検索条件は「Like "東京都"」となり、つまり「"東京都"」という条件と同じ結果になります。
 一方、何も入力されない場合の検索条件は「Like "*"」となりますのですべてのレコードが抽出されます。


値を入力すれば部分一致検索、入力しなければすべてのレコードを返す場合

 次のように設定します。

Like "*" & [出身地を指定] & "*"

 こうすると、「京」と入力された場合の検索条件は「Like "*京*"」なり、「京」の字を含むレコードがすべて抽出されます。
 一方、何も入力されない場合の検索条件は「Like "**"」となりますのですべてのレコードが抽出されます。

大小比較を行う場合

 画像は省略しますが、例えば日付型の列に対し「>=[開始日]」というパラメータを設定するような場合があります。
 この場合は上記のような設定ではうまくいきませんので、例えば次のように設定します。

>=Nz([開始日],#1900/01/01#)

 何も入力されない場合の検索条件は「>=#1900/01/01#」となりますので(1800年代以前の古い日付が含まれていない限りは)すべてのレコードが表示されます。ただし設定値には注意してください。