Excel VBAメモ Accessファイルで定義したフィールドの型を調べてみる

VBA

仕事で用があったのでメモすることに。
ポイントはこんな感じかな。

  • ADODB.Connection.Openでデータベースへ接続する
  • ADODB.Recordset.Openでクエリを実行する
  • ADODB.Recordset.Fieldsでフィールドのコレクションを取得する
  • コレクションそれぞれのTypeプロパティでフィールドの型を取得する

んで、今回用意したファイルはこんな感じ。

Accessのデータベースファイルの内容は前に書いた記事と同じ(記事はここ)。

COMを参照する設定しないんでタイプの定数を自前で定義しとく。
今回は必要な分だけをグローバル定数として定義しといた。

' 参照設定しないので自分で型の定数を定義する必要がある...
' 今回は必要な分だけを定義しとく
Public Const adInteger = 3
Public Const adBoolean = 11
Public Const adWChar = 130
Public Const adVarChar = 200
Public Const adVarWChar = 202

んで、コードはこんな感じ。

Public Sub Proto()

    ' プロシージャの変数を定義する
    Dim objConnector As Object
    Dim objRecordset As Object
    Dim strLocation As String
    Dim strProvider As String

    ' Accessデータベースのフィールド型を判定する
    On Error GoTo ProtoEnd
    
        ' Accessデータベースへ接続するために必要な文字列を準備する
        strLocation = "C:\Users\tetsuyanbo\Desktop\Sample.accdb"
        strProvider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
        strQuery = "SELECT * FROM マスタ"
    
        ' Accessデータベースに接続する
        Set objConnector = CreateObject("ADODB.Connection")
        objConnector.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strLocation
    
        ' クエリを実行する
        Set objRecordset = CreateObject("ADODB.Recordset")
        objRecordset.Open strQuery, objConnector
        
        ' フィールドの型を判定してフィールド名と型をイミディエイトウィンドウに出力する
        Dim objField As Variant
        For Each objField In objRecordset.Fields
        
            ' タイプを判定する
            Dim strType As String
            If objField.Type = adInteger Then
                strType = "adInteger"
            ElseIf objField.Type = adBoolean Then
                strType = "adBoolean"
            ElseIf objField.Type = adWChar Then
                strType = "adWChar"
            ElseIf objField.Type = adVarChar Then
                strType = "adVarChar"
            ElseIf objField.Type = adVarWChar Then
                strType = "adVarWChar"
            Else
                strType = "Unknown"
            End If
            
            ' イミディエイトウィンドウに出力する
            Debug.Print objField.Name & ":" & strType
            
        Next
        
ProtoEnd:

    ' オブジェクトを破棄する
    If Not objRecordset Is Nothing Then
        Set objRecordset = Nothing
    End If
    If Not objConnector Is Nothing Then
        ' エラーのときのためにデーターベースとはここで接続をやめる
        objConnector.Close
        Set objConnector = Nothing
    End If

End Sub

んで、実際に動かしてみるとこんな感じ。

んまま、明日への自分へのメモってことで。

VBA(FieldsType)