仕事で用があったのでメモすることに。
ポイントはこんな感じかな。
- 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
んで、実際に動かしてみるとこんな感じ。
んまま、明日への自分へのメモってことで。

