Excel VBAメモ Accessファイルで定義したフィールドの型を調べてみる
仕事で用があったのでメモすることに。
ポイントはこんな感じかな。
- 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
んで、実際に動かしてみるとこんな感じ。
んまま、明日への自分へのメモってことで。
ディスカッション
コメント一覧
まだ、コメントがありません