フィールド名、フィールド名のデータ型を取得する

フィールドのデータ型を取得する

Sub フィールドのデータ型取得()
Dim myCon As New ADODB.Connection, myRS As New ADODB.Recordset
Dim FileName As String, i As Integer, DataType As Long
FileName = ThisWorkbook.Path & "\mdb\2-sampleDB.mdb"
myCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FileName
myRS.Open "伝票履歴", myCon, adOpenForwardOnly, adLockReadOnly

'フィールド名を書き出す
For i = 1 To myRS.Fields.Count
  Cells(1, i) = myRS.Fields(i - 1).Name
Next

For i = 1 To myRS.Fields.Count
  DataType = myRS.Fields(i - 1).Type
  Cells(2, i) = DataType   'フィールドのデータ型(数値)を書き出す
  Cells(3, i) = getDataType(DataType)  'フィールドのデータ型(文字列)を書き出す
Next

myRS.Close: Set myRS = Nothing
myCon.Close: Set myCon = Nothing

End Sub
Function getDataType(tmpLng As Long) As String
Dim tmpStr As String

'定数に応じた文字列を返す
Select Case tmpLng
  Case adInteger: tmpStr = "数値型"
  Case adDate: tmpStr = "日付/時刻型"
  Case adBoolean: tmpStr = "Yes/No型"
  Case adVarWChar: tmpStr = "文字列型"
  Case Else: tmpStr = "その他のデータ型"
End Select

getDataType = tmpStr

End Function

フィールドのデータ型を取得するにはFieldオブジェクトのTypeプロパティを使用する。
Typeプロパティにはデータ型を表す定数が格納されているが、わかりにくいので「getDataType」関数で文字列に変換している。

Type プロパティの値 ( DataTypeEnum )
定数 説明
adArray
(ADOX には適用せず。)
0x2000 常に別のデータ型定数と組み合わされ、そのデータ型の配列を示すフラグ値です。
adBigInt 20 8 バイトの符号付き整数を示します (DBTYPE_I8)。
adBinary 128 バイナリ値を示します (DBTYPE_BYTES)。
adBoolean 11 ブール値を示します (DBTYPE_BYTES)。
adBSTR 8 Null で終了する Unicode 文字列を示します (DBTYPE_BSTR)。
adChapter 136 子行セットの行を識別する 4 バイト チャプタ値を示します (DBTYPE_HCHAPTER)。
adChar 129 文字列値を示します (DBTYPE_STR)。
adCurrency 6 通貨値を示します (DBTYPE_CY)。通貨型は小数点以下 4 桁の固定小数点の数値です。スケールが 10,000 の、8 バイトの符号付き整数で格納します。
adDate 7 日付値を示します (DBTYPE_DATE)。日付型は倍精度浮動小数点数型 (Double) で格納され、整数部分は 1899 年 12 月30 日からの日数を、分数部分は日数の分数を表します。
adDBDate 133 日付値 (yyyymmdd) を示します (DBTYPE_DBDATE)。
adDBTime 134 時刻値 (hhmmss) を示します (DBTYPE_DBTIME)。
adDBTimeStamp 135 日付/時刻スタンプ (yyyymmddhhmmss および 10 億分の 1 桁までの分数) を示します (DBTYPE_DBTIMESTAMP)。
adDecimal 14 固定精度およびスケールの正確な数値を示します (DBTYPE_DECIMAL)。
adDouble 5 倍精度浮動小数点値を示します (DBTYPE_R8)。
adEmpty 0 値を指定しません (DBTYPE_EMPTY)。
adError 10 32 ビット エラー コードを示します (DBTYPE_ERROR)。
adFileTime 64 1601 年 1 月 1 日からの時間を示す 64 ビット値を 100 ナノ秒単位で示します (DBTYPE_FILETIME)。
adGUID 72 固有のグローバル識別子 (GUID) を示します (DBTYPE_GUID)。
adIDispatch 9 COM オブジェクトの IDispatch インターフェイスへのポインタを示します (DBTYPE_IDISPATCH)。
注意 このデータ型は、現在は ADO ではサポートされていません。使用すると予期しない結果になることがあります。
adInteger 3 4 バイトの符号付き整数を示します (DBTYPE_I4)。
adIUnknown 13 COM オブジェクトの IUnknown インターフェイスへのポインタを示します (DBTYPE_IUNKNOWN)。
注意 このデータ型は、現在は ADO ではサポートしていません。使用すると予期しない結果になることがあります。
adLongVarBinary 205 長バイナリ値を示します (Parameter オブジェクトのみ)。
adLongVarChar 201 長文字列の値を示します (Parameter オブジェクトのみ)。
adLongVarWChar 203 Null で終了する Unicode 文字列値を示します (Parameter オブジェクトのみ)。
adNumeric 131 固定精度およびスケールの正確な数値を示します (DBTYPE_NUMERIC)。
adPropVariant 138 オートメーション PROPVARIANT を示します (DBTYPE_PROP_VARIANT)。
adSingle 4 単精度浮動小数点値を示します (DBTYPE_R4)。
adSmallInt 2 2 バイトの符号付き整数を示します (DBTYPE_I2)。
adTinyInt 16 1 バイトの符号付き整数を示します (DBTYPE_I1)。
adUnsignedBigInt 21 8 バイトの符号なし整数を示します (DBTYPE_I8)。
adUnsignedInt 19 4 バイトの符号なし整数を示します (DBTYPE_I4)。
adUnsignedSmallInt 18 2 バイトの符号なし整数を示します (DBTYPE_I2)。
adUnsignedTinyInt 17 1 バイトの符号なし整数を示します (DBTYPE_I1)。
adUserDefined 132 ユーザー定義の変数を示します (DBTYPE_UDT)。
adVarBinary 204 バイナリ値を示します (Parameter オブジェクトのみ)。
adVarChar 200 文字列値を示します (Parameter オブジェクトのみ)。
adVariant 12 オートメーション バリアント型 (Variant) を示します (DBTYPE_VARIANT)。
注意 このデータ型は、現在は ADO ではサポートされていません。使用すると予期しない結果になることがあります。
adVarNumeric 139 数値を示します (Parameter オブジェクトのみ)。
adVarWChar 202 Null で終了する Unicode 文字列を示します (Parameter オブジェクトのみ)。
adWChar 130 Null で終了する Unicode 文字列を示します (DBTYPE_WSTR)。