15 クエリ系 - SQL文の中に特定の文字列を含むクエリを収集する

カレントデータベース内にあるクエリのSQL文を探索し、その中に特定の文字列を含むクエリ名とSQL文の一覧を収集します。
  1. まず「Database」オブジェクトの変数である「dbs」に”カレントデータベース”をセットします。

  2. そのデータベース内にあるすべてのクエリのコレクションである「QueryDefs」の中から、For Each〜Nextステートメントでひとつずつクエリ情報を取り出し、「QueryDef」オブジェクトの変数「qdf」にセットしていきます。

  3. VBAで扱うQueryDefsコレクションには、ナビゲーションウィンドウに表示されるクエリの他、フォームのレコードソースやコンボボックス等の値集合ソースプロパティに直接記述されているSQL文なども含まれています。

    それらのクエリは名前の先頭に「~sq_」という4文字が内部的に付加されていますので、ここではそれを判別してIf文で除外します。

    ※もしそれらのクエリも収集対象とするのであれば、このIfの条件式を抹消します。

  4. 取り出されたひとつクエリについて、そのSQL文を「QueryDef」オブジェクトの「SQL」プロパティから取得し、特定の文字列(ここでは”商品コード”)が含まれているかどうかを検査します。

    ※ここでは「InStr」関数を使っています。この関数は指定文字列が見つかった場合はその位置を返し、見つからなければ”0”を返しますので、”0より大きければその文字列が含まれている”と判定することができます。

  5. 指定文字列を含んでいたら、そのクエリの名前である「Name」プロパティの値、およびSQL文をイミディエイトウィンドウに出力します。

    ※このサンプルでは、見つかった文字列のマーキングとしてその前後に”●”を付けています。

Sub Sample_2_05()
'SQL文の中に特定の文字列を含むクエリを収集する

  Dim dbs As Database
  Dim qdf As QueryDef
  Dim strFind As String

  strFind = "商品コード"

  Set dbs = CurrentDb
  For Each qdf In dbs.QueryDefs
    With qdf
      If Left$(.Name, 4) <> "~sq_" Then
        If InStr(.SQL, strFind) > 0 Then
          Debug.Print "■" & .Name
          Debug.Print Replace(.SQL, strFind, "●" & strFind & "●")
          Debug.Print "------------------"
        End If
      End If
    End With
  Next qdf

End Sub

実行例:
| Index | Prev | Next |



Copyright © T'sWare All rights reserved