パラメータクエリによるデータの抽出

 前の節ではさまざまなデータ型やAnd、Or条件に対応したデータの抽出の例を見てきましたが、いずれも条件となる値を("東京都"とか#2016/12/31#といったように)直接指定するというものでした。
 しかし実際には、クエリを開くたびに抽出条件となる値を指定したい、という場合があります。その都度デザインビューで値を指定すればいいのですが、操作がちょっと難しいですし、そもそも操作のためにデザインビューを開かせることになりますので(他者に操作させる場合に)思わぬ設定変更をされてしまう心配もあります。
 そこで、抽出条件となる値を未確定にしておき、クエリを開くたびに簡易なウインドウで値を指定させるという方法があります。これをパラメータクエリといいます。

f:id:accs2014:20170731143404p:plain:right:w600

 以下では例としてこのようなテーブルを用いるものとします。


テキスト型の列での設定例

f:id:accs2014:20170731143400p:plain:right:w600

 クエリのデザインビューです。
 ここで抽出条件に「[職業を指定]」と入力します。通常であれば「"戦士"」とか「"僧侶"」といったように直接値を指定しますが、このように[]で適当な名前を囲むだけでパラメータクエリの設定は完了です。
 なお、[]内の名前は既存の列名と重複しないようにしてください。


f:id:accs2014:20170731143354p:plain:right:w600

 このクエリをデータシートビューで開こうとすると検索値を入力させるためのウインドウが現れます。
 ここではじめて具体的に検索値を設定します。ここでは「戦士」と入力してみます。ダブルクォーテーション(")は必要ありません。


f:id:accs2014:20170731143352p:plain:right:w500

 するとその検索値に基づいてクエリが実行されます。


f:id:accs2014:20170731153826p:plain:right:w600

 さて、豆知識ですが、ウインドウに値を何も入力しないとデータは何も抽出されません。
 そこで、何も入力しない場合にすべてのレコードを抽出するようにするには、抽出条件欄に次のように入力すればOKです。

Like Nz([職業を指定],"*")


日付型/数値型の列での設定例

f:id:accs2014:20170731143458p:plain:right:w600

 日付型や数値型のフィールドでの設定例についてです。基本的にテキスト型の場合と同じですが、これらの型では不等号(>や>=など)を多用するのが特徴ですので、そのような例を示します(それ以外に特に違いはありませんので、ここでは日付型の例のみ示します)。
 上記の例と同じクエリのデザインビューで「誕生日」列の抽出条件欄に次のように入力します。

>=[誕生日いつから] And <=[誕生日いつまで]

 これにより、クエリを開くたびに一定の期間を指定し、誕生日がその期間内である者を抽出することができます。

f:id:accs2014:20170731143454p:plain:right:w600

 データシートビューで開こうとすると、ウインドウが2回出てきますので、それぞれ期間の初日と終日を指定します。
 日付を指定する際もナンバーサイン(#)で囲む必要はありません。


f:id:accs2014:20170731143449p:plain:right:w600

 1998/1/1から2000/12/31の期間をしたときのデータシートビューです。


f:id:accs2014:20170731143440p:plain:right:w600

 なお、値を入力しないときにすべての日付を抽出対象とするには、次のように設定すればOKです。
 入力がないときは極端に古い(未来の)日付に置き換える、というわけです。

>=Nz([誕生日いつから],#1900/01/01#) And <=Nz([誕生年いつまで],#2999/12/31#)


演算フィールドでの設定例

f:id:accs2014:20170731143444p:plain:right:w600

 さて、パラメータクエリは演算フィールドに対しても適用できます。
 この例では「誕生日」列に基づく演算フィールド「誕生年」を作成し、それに対しパラメータクエリを設定しています。
 これにより西暦だけを指定してデータを抽出することができます。



複数の列に対する設定例(And,Or条件)

f:id:accs2014:20170731160426p:plain:right:w600

 最後になりますがパラメータクエリは複数の列に対して設定することも出来ます。
 And、Or条件等の考え方に関しては先に解説しておりますのでので、詳しくは次の記事(中段の「より複雑な抽出条件の記し方」の部分)をご覧ください。



www.accessdbstudy.net