13 クエリ系 - 選択クエリ内に含まれるフィールドを収集する

カレントデータベース内にある”選択”クエリで出力されるフィールド名(=SELECTされたフィールド名)を収集します。
  1. まず「Database」オブジェクトの変数である「dbs」に”カレントデータベース”をセットします。

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

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

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

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

  4. 取り出されたクエリ情報のうち、そのクエリの種類を表す「Type」プロパティの値を調べます。

  5. それが「選択クエリ/dbQSelect」であるクエリだけをIf文で分岐処理して扱います。

  6. 取り出されたクエリ情報のうち、クエリ名である「Name」プロパティの値をイミディエイトウィンドウに出力します。

  7. 選択クエリ内にある出力対象のフィールドのコレクションである「Fields」から、For Each〜Nextステートメントでフィールドひとつずつを「Field」オブジェクトの変数「fld」にセットしていきます。

  8. 取り出されたフィールドごとに、そのフィールド名である「Name」プロパティの値をイミディエイトウィンドウに出力します。

Sub Sample_2_03()
'選択クエリ内に含まれるフィールドを収集する

  Dim dbs As Database
  Dim qdf As QueryDef
  Dim fld As Field

  Set dbs = CurrentDb
  For Each qdf In dbs.QueryDefs
    With qdf
      If Left$(.Name, 4) <> "~sq_" Then
        If .Type = dbQSelect Then
          Debug.Print "■" & .Name
          For Each fld In .Fields
            Debug.Print fld.Name
          Next fld
          Debug.Print "------------------"
        End If
      End If
    End With
  Next qdf

End Sub

実行例:


| Index | Prev | Next |



Copyright © T'sWare All rights reserved