最新トピック
1
1 ヶ月前
排他制御 1 ヶ月前
2
2 ヶ月前
Hatena様にご質問 2 ヶ月前
6
4 ヶ月前
モジュールでカレントフォームのコントロールを使うには 4 ヶ月前
7
5 ヶ月前
日付のテキストボックスからフォームが開けません 5 ヶ月前
9
5 ヶ月前
レポートにおける数値の間隔を広げる方法 5 ヶ月前
12
5 ヶ月前
リストボックスから複数選択しそれをテーブルに格納したい 5 ヶ月前
タグリスト
Markdown テーブル生成
Accessのテーブルやクエリのデータを貼り付ける場合は下記で、Markdown書式のテーブルに変換して貼り付けてください。
知識が幅広く必要なためか、あまりうまいこと解説しているところはないですね。
VBAとSQL
VBAはプログラミング言語です。
SQLは構造化照会言語(データベースを扱うための所定の書式)です。
VBAにはSQLを実行する機能がありますが、実行そのものはデータベースエンジンに丸投げします。なので、「SQL構文を文字列で指示する」までがVBAで出来ることです。そして、この文字列がSQLの文法として正しいかどうかすらチェックしません。ダメだったらダメだったときにエラーだと返ってくるだけです
SQL構文の例
VBAでSQLを実行する例
入力ミスをしてみましょう
VBAでSQLを実行する例(入力ミス)
実行しようとするSQL構文
単独の文字列としか見ないVBAではわかりにくいですが、SQL構文を色を付けてくれるエディタでみると間違っていることが分かりやすいですね。
実際には様々な部分を変数にしたいとなると思うので、ワンステップ置いて内容を確認するようにするといいです
&もあちこちに出ていますが、VBAでもSQLでも前後の文字列を連結するという役割をします。SQL構文を作るためのVBAの&なのか、SQLとして処理されるときの&(VBA上ではただの文字)なのか、これもコードの色分けがあるとわかりやすいと思います。
もちろん、SQLで処理するときでもただの文字として見たいということもあり得ます。
#や'リテラルのデータ型を表す文字です。
リテラルとはコード内に直打ちされた値のことです。
VBAではリテラルのデータ型によって
数値型 => 数値をそのまま
文字型 => 「"」で囲む ※「'」は使えない
日付型 => 「#」で囲む
(ACCESS)SQLではリテラルのデータ型によって
数値型 => 数値をそのまま
文字型 => 「"」または「'」で囲む
日付型 => 「#」で囲む
というように決まっています。
そしてこの(ACCESS)SQLでの「#」はかなりローカルな仕様です。
SQLとは単にそういった場合、本来、国際規格で決まっているモノで、それには日付型に「#」を使うルールはありません。そのため、SQLを勉強しようとしてもこの「#」についての解説はACCESSに言及しているようなところでしか見ることができません。
SQL構文を確認する
VBAならDebug.Printで実行直前の文字列を取得できます。フォームのテキストボックスなんかの場合はとりあえず「
="購入日=#" & [最新購入日] & "#"」のように確認したい部分だけの式にするといいでしょう後はそれで表示された文字列をコピーして色分け表示すればいいです。
この掲示板ならコードブロックを使うと色分け表示できます。(上の誤りなSQLの表示を見ると今一歩な感じ)
Webサービスを探してもいいでしょう(SQL Fiddle(sqlfiddle.com)とか)
※ローカルルールな「#」にどのように対応しているのかは気に掛ける必要があります
そもそものもとになるSQL構文はクエリデザインから作成するのも手です。
適当な抽出条件を設定したクエリを作って、表示できることを確認したあとSQLビューを確認すればもとになるSQLが作れます。あとは「適当な抽出条件」としたところを変数に置き換えていけば動的に変化するSQL文が作れます。
デザインビューからの表示を通すことによって、データ型による囲み文字の補完、型不一致のエラーのチェックなんかができます