AccessVBAでクエリ(SQL)を修正する

スポンサーリンク

SQLの文字列をVBAで修正する

前回AccessVBAでクエリを作成・実行するでクエリを作成したり、削除したりするAccessVBAコードを紹介しましたが、AccessVBAではその他にも作成したクエリを修正することも可能です。
今回はクエリを修正するVBAコードを紹介します。

クエリは大きく2つに分けられる

選択クエリ・集計クエリ・更新クエリ・削除クエリなど、クエリの種類はたくさんありますが、AccessVBAでクエリの修正を行うにあたっては、これらのクエリが大きく2つに分類されることを把握しておかなければなりません。

その分類は「実行することでデータベースに格納されているデータを変更するかどうか」ということです。

選択クエリ・集計クエリなどは今のデータの中で必要なレコードを抜き出したり、または集計したりするクエリなので、これらは「実行する」というステップがありません。

クエリを設計し、開くと値が表示されますが、データベースのレコードに影響はないからです。

それに対し、更新クエリ・削除クエリなどはデータベースのレコードを変更するもので、これらのクエリは設計後、実行することで機能するものになります。

スポンサーリンク

AccessVBAでクエリを修正する意味

個人的な意見かもしれませんが、選択クエリ・集計クエリなどは、AccessVBAで修正する必要がない場合がほとんどです。

強いていうなら色々な人がデータベースを扱う中で勝手にクエリを変更されたり、壊されたりしないように修正するコードは作れますが、そこまで意味がないと思います。
(そもそもクエリを編集できないようにしておけば問題にならないため。)

AccessVBAでクエリを修正することに価値を見出しやすいのは更新クエリ・削除クエリなど、実行することで初めて機能するクエリです。

これらのクエリについてはAccessVBAを用いることで、条件を変更したクエリを複数連続で実行するなどの機能が使えるようになるため、より柔軟な処理が可能になります。

クエリを実行するコードについてはこちらのページで紹介しています。

AccessVBAでクエリを修正するコード

AccessVBAでクエリを修正するコードは以下のようなものになります。

Sub クエリを修正する()

Dim StrSQL As String
StrSQL = “SELECT ID,店番,取引先コード,日付 FROM 仕入伝票一覧;”
CurrentDb.QueryDefs(“Q_お試し”).SQL = StrSQL

End Sub

今回のサンプルコードは既存のクエリをAccessVBAで指定したSQLに置き換えるコードとなります。
下記のように削除クエリに修正することも可能で、もともとのクエリの種類にかかわらず、置き換えることができます。

Sub クエリを修正する()

Dim StrSQL As String

StrSQL = “DELETE [仕入伝票一覧].[店番] ” & _
“FROM [仕入伝票一覧] ” & _
“WHERE [仕入伝票一覧].[店番]=””01″”;”

CurrentDb.QueryDefs(“Q_お試し”).SQL = StrSQL

End Sub

こちらは仕入伝票一覧というテーブルから、店番の値が「01」(文字列)のレコードを削除するというコードです。
コードを記載するにあたっては下記を参考にしてください。

AccessVBAでクエリを修正する際の注意点

AccessVBAでSQLを記載する場合、下記の点に注意が必要です。

①複数行の場合、改行前もしくは改行後に半角のスペースが必要

SQLは単語と単語の間には半角スペースが入ります。
改行は単語と単語の間になりますので、どちらかに半角のスペースがないとクエリがきちんと作成できません。

②SQLの中で「”」を使う場合「””」のように二重にするもしくは「’」を使用する

SQLを文字列で表すので、すでに開始位置、終了位置にダブルコーテーション「”」が入っています。

SQLの中でさらに「”」を使用する場合は、二重にするかシングルコーテーション「’」を使用してください。
Where条件式などでよく使われます。

条件式が数字を表す場合はダブルコーテーション「”」やシングルコーテーション「’」は不要ですので、こちらも逆に注意が必要です。

条件式を変数で置き換えることで自由度が高い処理が可能になります。
その手順についてはAccessVBAでクエリを実行するで紹介します。

コメント