#620 全テーブル/全フィールドからデータを検索する方法の例 VBA

すべてのテーブル(ナビゲーションウィンドウに表示されているもの)を検索し、該当するデータがどのテーブルのどのフィールドに保存されているかをピックアップするプログラム例です(いわゆる全文検索的なものです)。

ユーザーインタフェースにおける処理ではなく、開発中のデータ内容による不具合を調査するために作ったもので、テーブルの検索機能やクエリの抽出処理では特定のテーブルや特定のフィールドしか対象にできないので、このようなプログラムを作ってみました。実際には「"検索キーワード"」と記述されている部分を適宜書き換えて使ってください。

Dim dbs As Database
Dim tdf As TableDef
Dim fld As Field
Dim rst As Recordset
Dim fvalue As Variant

Set dbs = CurrentDb
'すべてのテーブルのループ
For Each tdf In dbs.TableDefs
  With tdf
    If ((.Attributes And dbSystemObject) Or _
        (.Attributes And dbHiddenObject)) = 0 Then
      '現在のテーブルを開く
      Set rst = dbs.OpenRecordset(.Name)
      '開いたテーブルの全レコードのループ
      Do Until rst.EOF
        '開いたテーブルの全フィールドのループ
        For Each fld In .Fields
          'カレントレコード・フィールドの値を取得
          fvalue = rst(fld.Name).Value
          If InStr(fvalue, "検索キーワード") Then
            'フィールド値に指定ワードを含んでいるとき
            Debug.Print .Name, fld.Name, fvalue
          End If
        Next fld
        rst.MoveNext
      Loop
      rst.Close
    End If
  End With
Next tdf


※【注】「添付ファイル型」や、「複数の値の許可」が設定されているなど、一部の特殊なフィールドについては上記のような簡便な方法ではフィールド値を取得できないため、”InStr”関数の行でエラーが発生します。適宜エラートラップなどの対応が必要となります。
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved