2014年5月22日木曜日

Accessのパラメータクエリ

データベースで条件をつけてレコードを抽出する場合、
通常ならSQLでクエリをその場で作って実行してしまいます。
動的に条件が変わるような場合でも文字列操作でクエリを生成します。
ウェブアプリケーションでもみんなそうしているので、
ちゃんと考えておかないとSQLインジェクションされてしまいます。

さて、Microsoft Accessの場合クエリは固定的に定義してしまうので、
その場でチョコチョコ直すのが非常に面倒なのですが、
実はパラメータクエリなる機能があります。
これは抽出条件をパラメータにしておき、
実際に実行する直前にユーザにパラメータを入力してもらうことで
クエリを動的に編集するようになっています。
まあ引数付きストアドプロシージャと理解してもいいのではないでしょうか。

そのパラメータクエリ、結構便利なので使い方を紹介しましょう。
クエリをデザイン ビューで開き、
特定のフィールドの"抽出条件"(あるいは"または"以降)行に
何か入力を促すようなメッセージを[]で囲んで入力するだけです。
"[...]"がパラメータの名前で、
生成時にそれを実際の値と差し替えることができるということです。
パラメータは複数指定でき、デザイン ビューでの同一行はAND、
他の行はORで処理されるので、うまく位置を調整すると細かいこともできます。
なんなら"[...] Or [...]"のように2つのパラメータを1つの枠に書いてOR検索できますし、
"Between [...] And [...]"のように範囲指定することもできます。

クエリを開くと"パラメータの入力"ダイアログボックスが
先の[]で囲んだメッセージと共に現れ、抽出条件をテキストボックスに入力できます。
パラメータが複数あればダイアログボックスが順番に出てきます。
すべてのパラメータが入力できればその条件に従いクエリの結果が表示されます。
そのクエリをレコードソースとするフォーム等を開いた場合も同様の動作となります。

パラメータの入力ダイアログボックスの出現順を制御したり、
各パラメータのデータ型を指定することもでき、
クエリのデザイン ビューでコンテキストメニュー(右クリックメニュー)から
[パラメータ]をクリックすると設定ウィンドウが出てくるので、そこで設定できます。

なお、詳細はMicrosoftのヘルプページを見るといいでしょう。

0 件のコメント:

コメントを投稿