AccessVBAでクエリ(SQL)を作成・削除する

スポンサーリンク

AccessVBAでクエリを作成・削除できるとクエリ一覧がすっきりする

少し複雑なデータベースを作成し、クエリを作りっぱなしにしていると、ちょっとした条件違いのクエリが大量にできあがり、管理が面倒になってしまいます。

AccessVBAでクエリをすべて操作できるようになると、自動で使用するクエリを作成し、不要になれば削除できるので管理がしやすくなります。
今回はAccessVBAでできるクエリの操作のうち、クエリを作成・削除するVBAコードを紹介します。

AccessVBAでクエリを作成

AccessVBAでクエリを作成するサンプルコードは以下のような形式になります。
このサンプルコードでは「T_仕入一覧」というテーブルのID、店番、取引先コードを抜き出す「Q_お試し」という選択クエリを作成するコードです。

Sub クエリ作成()

Dim Qdf As Object
Dim SQL As String
SQL = “SELECT ID,店番,取引先コード FROM T_仕入一覧”

Set Qdf = CurrentDb.CreateQueryDef(“Q_お試し”, SQL)
Set Qdf = Nothing

End Sub

スポンサーリンク

AccessVBAでクエリを削除

VBAでクエリを削除するにはクエリの名前を指定する必要があります。
「Q_お試し」というクエリを削除するVBAコードは以下のようなものになります。

Sub クエリ削除1()

Dim SQL As String
Dim Obj As AccessObject

DoCmd.DeleteObject acQuery, “Q_お試し”
’CurrentDb.QueryDefs.Delete “Q_お試し”’これでもOK

End Sub

一度作成したものを削除する場合には通常あり得ないことですが、例えば「Q_お試し」というクエリが存在するかどうか不明で、存在していた場合にのみ削除するというVBAコードは以下のようになります。

すべてのクエリに対してクエリ名を確認し、該当の名前のクエリを削除するという流れです。

Sub クエリ削除2()

Dim Obj As AccessObject

For Each Obj In CurrentData.AllQueries
If Obj.Name = “Q_お試し” Then
DoCmd.DeleteObject acQuery, “Q_お試し”
’CurrentDb.QueryDefs.Delete “Q_お試し”’これでもOK
Exit Sub
End If
Next

End Sub

クエリの削除については、DoCmd.DeleteObject acQuery, “クエリ名”かコメントで記しているCurrentDb.QueryDefs.Delete “クエリ名”のいずれを使用しても削除できます。

削除した際のAccess上の挙動は微妙に変わっていて、DoCmd.DeleteObject acQuery, “クエリ名”を使用した場合はすぐにAccessオブジェクトの一覧から削除したクエリが消されますが、CurrentDb.QueryDefs.Delete “クエリ名”を使用した場合、オブジェクト一覧を最小化したり更新しないと表示が残ったままになるようです。

ただ、消えていないわけではないのでどちらを使用しても大きな違いはないと思います。

コメント