AccessのVBAでプログラムを作る場合、保存済みのクエリ名を指定して開くのではなく、SQL文自体をコードの中に埋め込んで記述する場合も多々あります。
AccessのSQLを熟知していればその場(VBEのコードウィンドウ上)でSQL文を書いていくこともできますが、あまりSQLに詳しくない場合、あるいは多くのテーブルを結合したりといった複雑なSQL文を書く場合には、いったんクエリのデザインビューでクエリを作り、それをSQLビューに切り替え、そこに表示されたSQL文をコピー&ペーストでVBAのコード上に貼り付けて使うという作業方法が効率的です。
例:



SELECT T売上.伝票番号, T売上.売上日付, T売上明細.商品コード, T売上明細.数量
FROM T売上 INNER JOIN T売上明細 ON T売上.伝票番号 = T売上明細.伝票番号
WHERE (((T売上.売上日付) Between #1/1/2009# And #12/31/2009#))
ORDER BY T売上明細.商品コード;
しかし、Accessのクエリのデザインビューから自動生成されるSQL文はかなり冗長な内容になっています。クエリのデザインビューでデザインしてそのまま保存して使うならそれでも問題ありませんが、VBAのプログラム上に書き込む場合には少々分かりづらいものになってしまいますので、不要な記述は取り除いてなるべくシンプルにしておくとあとのメンテナンスが楽です。
その場合のポイントとして、次のような点が挙げられます。
- すべての「テーブル名.フィールド名」という構文になっているので、もしそのフィールドと同名のものが他のテーブルになければ、「テーブル名.」という記述は削除する
- WHERE句については、必ずカッコが付いているので、AND/OR等で優先順位を指定する必要がある場合を除いて削除する
- SQL文がかなり長くなる場合には、VBA上では行継続文字(_)を使って、適当なところで改行して記述する
書き換え例:
SELECT T売上.伝票番号, 売上日付, 商品コード, 数量
FROM T売上
INNER JOIN T売上明細 ON T売上.伝票番号 = T売上明細.伝票番号
WHERE 売上日付 Between #1/1/2009# And #12/31/2009#
ORDER BY 商品コード;
|