仕事で用があったのでメモすることに。
ポイントはこんな感じかな。
- 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 Const adInteger = 3
Public Const adBoolean = 11
Public Const adWChar = 130
Public Const adVarChar = 200
Public Const adVarWChar = 202
' 参照設定しないので自分で型の定数を定義する必要がある... ' 今回は必要な分だけを定義しとく 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
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
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
んで、実際に動かしてみるとこんな感じ。
んまま、明日への自分へのメモってことで。