パラメータを変更したクエリを同名で作成する際に、すでに同じ名前のクエリが存在して処理が止まってしまう時の方法です。そんな時に、先に存在するクエリを削除する方法です。
目次
使いどころとポイント
モジュールで、クエリを作成するたびに、同名のクエリを事前に削除する作業を繰り返すのが面倒という場合を想定しています。私はパラメータクエリを基にクロス集計を行うと、エラーになるために元になるクエリを都度作成するために使いました。
この方法はポイントは
- 1.対象クエリの存在を確認する
- 2.存在すれば削除する
ということです。
サンプルソース
“クエリ名”のところを実際ののクエリ名称に置き換えてください。
[vb] Sub del_query() Dim str_query As String Dim Obj As AccessObject str_query = "クエリ名" For Each Obj In CurrentData.AllQueries If Obj.Name = str_query Then DB.QueryDefs.Delete str_query Exit Sub End If Next End Sub [/vb]
1回限りでしたら、これでよいですが、アプリケーション内で何度も使うような場合には、あらかじめ関数にしてしまうのが便利だと思います。
[vb] Function del_query(str_query As String) Dim Obj As AccessObject For Each Obj In CurrentData.AllQueries If Obj.Name = str_query Then DoCmd.DeleteObject acQuery, str_query Exit Function End If Next End Function [/vb]
上記をVBAのモジュールに貼り付ければとりあえずOKです。
実際に、クエリ「Q訪問件数」を削除した場合には、こんな記載でOKです。
del_query (“Q訪問件数”)
関連する処理を1つにすることで、プログラムの修正や呼び出しが簡単になります。
削除をした後に、同名のクエリを作成する処理を加えて、便利に使っています。
クエリ削除用のサンプルDB
アイテム名を選択してクエリ出力ボタンを押すと、
1.既存のクエリを削除
2.パラメータを変更して同名で作成
3.クエリを開く
という、削除しては、同名で作成するという単純なサンプルになっています。
他サンプル
【AccessVBA】 インストール済みプリンタ名をテーブルに書き出す方法
【AccessVBA】フォルダ内のCSVファイルをテーブルにインポートするサンプル