各テーブルの列名を一覧で取得する関数

すごく面倒だったのでググった内容を基に関数を作成。

事前準備

  • テーブル「W_TABLE_LIST」の作成
    • table_name:テキスト型、テーブル名を格納
    • col_name:テキスト型、列名を格納
    • col_type:テキスト型、列の型名を格納
    • col_size:テキスト型、列のサイズを格納

ソース

'各クエリのSQL文をテーブルに格納する関数
Public Sub GetField()
On Error GoTo Err_GetField

    Dim DB As DAO.Database
    Dim Tableloop As DAO.TableDef
    Dim Fld As DAO.Field
    Dim strTablename As String
    Dim Tdf As DAO.TableDef

    Dim strSQL As String    'SQL文
    Dim strType As String   '型名

'''''''''''''''''''''''''''''''''''''''''''''''''''
''typeの置換は定数でselect case
'    '1:    dbBoolean
'    '2:    dbByte
'    '3:    dbInteger
'    '4:    dbLong
'    '5:    dbCurrency
'    '6:    dbSingle
'    '7:    dbDouble
'    '8:    dbDate
'    '10:   dbText
'    '11:   dbLongBinary
'    '12:   dbMemo
'    '15:   dbGUID
'    '18:   dbChar
'    '20:   dbDecimal
'    '21:   dbFloat
'
''確認用
'    Debug.Print dbBoolean & vbTab & ": dbBoolean"
'    Debug.Print dbByte & vbTab & ": dbByte"
'    Debug.Print dbInteger & vbTab & ": dbInteger"
'    Debug.Print dbLong & vbTab & ": dbLong"
'    Debug.Print dbCurrency & vbTab & ": dbCurrency"
'    Debug.Print dbSingle & vbTab & ": dbSingle"
'    Debug.Print dbDouble & vbTab & ": dbDouble"
'    Debug.Print dbDate & vbTab & ": dbDate"
'    Debug.Print dbText & vbTab & ": dbText"
'    Debug.Print dbLongBinary & vbTab & ": dbLongBinary"
'    Debug.Print dbMemo & vbTab & ": dbMemo"
'    Debug.Print dbGUID & vbTab & ": dbGUID"
'    Debug.Print dbChar & vbTab & ": dbChar"
'    Debug.Print dbDecimal & vbTab & ": dbDecimal"
'    Debug.Print dbFloat & vbTab & ": dbFloat"
'
'''''''''''''''''''''''''''''''''''''''''''''''''''
'レコード削除・追加時の警告メッセージOFF
    DoCmd.SetWarnings False

'テーブルのリストを初期化
    DoCmd.RunSQL "DELETE * FROM W_table_list"

'DBの各テーブル名を見て、システムテーブルで無いものを判別して処理
    Set DB = CurrentDb
    For Each Tableloop In DB.TableDefs

        strTablename = Tableloop.Name

        If Left(strTablename, 2) <> "MS" Then

            Set Tdf = DB.TableDefs(strTablename)

            For Each Fld In Tdf.Fields

                'typeの置換
                Select Case Fld.Type
                    Case 1
                        'dbBoolean
                        strType = "Boolean"

                    Case 2
                        'dbByte
                        strType = "Byte"

                    Case 3
                        'dbInteger
                        strType = "Integer"

                    Case 4
                        'dbLong
                        strType = "Long"

                    Case 5
                        'dbCurrency
                        strType = "Currency"

                    Case 6
                        'dbSingle
                        strType = "Single"

                    Case 7
                        'dbDouble
                        strType = "Double"

                    Case 8
                        'dbDate
                        strType = "Date"

                    Case 10
                        'dbText
                        strType = "Text"

                    Case 11
                        'dbLongBinary
                        strType = "OLEオブジェクト"
                    
                    Case 12
                        'dbMemo
                        strType = "Memo"

                    Case 15
                        'dbGUID
                        strType = "オートナンバー"

                    Case 18
                        'dbChar
                        strType = "Char"

                    Case 20
                        'dbDecimal
                        strType = "Decimal"

                    Case 21
                        'dbFloat
                        strType = "Float"

                    Case Else
                        'ERROR?
                        strType = "ERROR?(" & Fld.Type & ")"

                End Select

                'テーブルに格納
                strSQL = "INSERT INTO W_table_list (table_name, col_name, col_type, col_size) values (" & _
                            """" & strTablename & """, """ & Fld.Name & """, """ & strType & """, """ & Fld.Size & """)"

                DoCmd.RunSQL strSQL
            Next Fld

        End If

    Next Tableloop

'結果見たいからテーブル初期化しない

Exit_GetField:
'DBクローズ、レコード削除・追加時の警告メッセージON、処理完了
    DB.Close
    Set DB = Nothing

    MsgBox "完了しました。"
    Exit Sub

Err_GetField:
    MsgBox Err.Description
    Resume Exit_GetField

End Sub