【ACCESS VBA】DAO.DataTypeEnumで生成できるデータ型一覧、生成できないデータ型一覧

DAOを使ったテーブル生成については、指定パラメータ(DataTypeEnum)のバリエーションが多く、一方で参考文献でなかなか良いものが見つからなかった。
そこで試しに検証用コードを作成し実行してみた。(Access 2013 64bit環境)
実行結果より、DataTypeEnumの総定数数30のうち22までは作成可能だった。
なお生成できるがサポート対象外であるものもあるので注意が必要となる。
(参照:データ型の比較)
検証用ソースコード
   Option Compare Database
‘参照設定 Microsoft Scripting Runtime
Dim Dic As Dictionary
Sub CreateDataTypeEnumAndName()
    Set Dic = New Dictionary
    Dic.Add DataTypeEnum.dbAttachment, "添付ファイル データ"
    Dic.Add DataTypeEnum.dbBinary, "バイナリ型データ"
    Dic.Add DataTypeEnum.dbBoolean, "ブール型 (True または False) データ"
    Dic.Add DataTypeEnum.dbByte, "バイト型 (8 ビット) データ"
    Dic.Add DataTypeEnum.dbChar, "テキスト型データ (固定幅)"
    Dic.Add DataTypeEnum.dbComplexByte, "複数値バイト型データ"
    Dic.Add DataTypeEnum.dbComplexDecimal, "複数値 10 進型データ"
    Dic.Add DataTypeEnum.dbComplexDouble, "複数値倍精度浮動小数点型データ"
    Dic.Add DataTypeEnum.dbComplexGUID, "複数値 GUID 型データ"
    Dic.Add DataTypeEnum.dbComplexInteger, "複数値整数型データ"
    Dic.Add DataTypeEnum.dbComplexLong, "複数値長整数型データ"
    Dic.Add DataTypeEnum.dbComplexSingle, "複数値単精度浮動小数点型データ"
    Dic.Add DataTypeEnum.dbComplexText, "複数値テキスト型データ (可変幅)"
    Dic.Add DataTypeEnum.dbCurrency, "通貨型データ"
    Dic.Add DataTypeEnum.dbDate, "日付型データ"
    Dic.Add DataTypeEnum.dbDouble, "倍精度浮動小数点型データ"
    Dic.Add DataTypeEnum.dbGUID, "GUID 型データ"
    Dic.Add DataTypeEnum.dbInteger, "整数型データ"
    Dic.Add DataTypeEnum.dbLong, "長整数型データ"
    Dic.Add DataTypeEnum.dbLongBinary, "バイナリ型データ (ビットマップ)"
    Dic.Add DataTypeEnum.dbMemo, "メモ型データ (拡張テキスト)"
    Dic.Add DataTypeEnum.dbSingle, "単精度浮動小数点型データ"
    Dic.Add DataTypeEnum.dbText, "テキスト型データ (可変幅)"
    Dic.Add DataTypeEnum.dbBigInt, "多倍長整数型データ"
    Dic.Add DataTypeEnum.dbDecimal, "10 進型データ (ODBCDirect のみ)"
    Dic.Add DataTypeEnum.dbFloat, "浮動小数点型データ (ODBCDirect のみ)"
    Dic.Add DataTypeEnum.dbNumeric, "数値型データ (ODBCDirect のみ)"
    Dic.Add DataTypeEnum.dbTime, "時刻形式のデータ (ODBCDirect のみ)"
    Dic.Add DataTypeEnum.dbTimeStamp, "時刻および日付の形式のデータ (ODBCDirect のみ)"
    Dic.Add DataTypeEnum.dbVarBinary, "可変長バイナリ型データ (ODBCDirect のみ)"
   
End Sub
Sub CreateTableUsingDao()
    Dim dbsCurrent As DAO.Database
    Dim tdfNew As DAO.TableDef
    Dim errDB As DAO.Error
    Dim F As DAO.Field2
    Dim Var As Variant
   
    Set dbsCurrent = OpenDatabase(CurrentDb.Name)
    ‘新しい TableDef オブジェクトを作成します。
    Set tdfNew = dbsCurrent.CreateTableDef("テストテーブル")
   
    ‘ディクショナリ作成
    Call CreateDataTypeEnumAndName
   
    ‘とりあえずダミーフィールドでテーブルを生成
    Call AppendToTableDef(tdfNew, "テーブル生成のために作成したダミーフィールド", dbGUID)
    dbsCurrent.TableDefs.Append tdfNew
    ‘ディクショナリ分ループ
    For Each Var In Dic
        Call AppendToTableDef(tdfNew, Dic.Item(Var), Var)
    Next Var
   
    ‘ダミーフィールド削除
    Call tdfNew.Fields.Delete("テーブル生成のために作成したダミーフィールド")
   
    ‘生成結果 統計
    Debug.Print "★—————————★"
    Debug.Print "総定数数:" & Dic.Count
    Debug.Print "うち生成数:" & tdfNew.Fields.Count
    ‘生成結果 フィールド毎
    Call ShowFields("テストテーブル", Dic)
End Sub
Sub AppendToTableDef(ByRef TD As DAO.TableDef, ByVal Name As String, ByVal TypeENum As DAO.DataTypeEnum)
   
On Error GoTo ERROR_EXIT
   Dim F As DAO.Field2
   Dim errDB As DAO.Error
   
   Set F = TD.CreateField(Name, TypeENum)
   TD.Fields.Append F
 
    Exit Sub
ERROR_EXIT:
   For Each errDB In DBEngine.Errors
        Debug.Print "■テーブル未作成———————■"
        Debug.Print "NG Name: " & Name
        Debug.Print "NG DataTypeEnum(DataTypeEnumName):" & TypeENum & "(" & Dic(TypeENum) & ")"
        Debug.Print "NG Source: " & errDB.Source
        Debug.Print "NG Description: " & errDB.Description
        Debug.Print "NG HelpContext: " & errDB.HelpContext
        Debug.Print "NG HelpFile: " & errDB.HelpFile
        Debug.Print "NG Number: " & errDB.Number
    Next
End Sub
Sub ShowFields(ByVal TableName As String, ByRef Dic As Dictionary)
    Dim Database As DAO.Database
    Dim Field As DAO.Field
    Dim i As Integer
    Set Database = CurrentDb
    For Each Field In Database.TableDefs(TableName).Fields
        Debug.Print "★テーブル作成済———————★"
        Debug.Print "OK Name:"; Field.Name
        Debug.Print "OK DataTypeEnum(DataTypeEnumName):" & Field.Type & "(" & Dic(Field.Type) & ")"
        Debug.Print "OK Size:" & Field.Size
    Next
End Sub
結果

 

作成できたデータ型
OK Name:添付ファイル データ
OK DataTypeEnum(DataTypeEnumName):101(添付ファイル データ)
OK Name:バイナリ型データ
OK DataTypeEnum(DataTypeEnumName):9(バイナリ型データ)
OK Name:ブール型 (True または False) データ
OK DataTypeEnum(DataTypeEnumName):1(ブール型 (True または False) データ)
OK Name:バイト型 (8 ビット) データ
OK DataTypeEnum(DataTypeEnumName):2(バイト型 (8 ビット) データ)
OK Name:複数値バイト型データ
OK DataTypeEnum(DataTypeEnumName):102(複数値バイト型データ)
OK Name:複数値 10 進型データ
OK DataTypeEnum(DataTypeEnumName):108(複数値 10 進型データ)
OK Name:複数値倍精度浮動小数点型データ
OK DataTypeEnum(DataTypeEnumName):106(複数値倍精度浮動小数点型データ)
OK Name:複数値 GUID 型データ
OK DataTypeEnum(DataTypeEnumName):107(複数値 GUID 型データ)
OK Name:複数値整数型データ
OK DataTypeEnum(DataTypeEnumName):103(複数値整数型データ)
OK Name:複数値長整数型データ
OK DataTypeEnum(DataTypeEnumName):104(複数値長整数型データ)
OK Name:複数値単精度浮動小数点型データ
OK DataTypeEnum(DataTypeEnumName):105(複数値単精度浮動小数点型データ)
OK Name:複数値テキスト型データ (可変幅)
OK DataTypeEnum(DataTypeEnumName):109(複数値テキスト型データ (可変幅))
OK Name:通貨型データ
OK DataTypeEnum(DataTypeEnumName):5(通貨型データ)
OK Name:日付型データ
OK DataTypeEnum(DataTypeEnumName):8(日付型データ)
OK Name:倍精度浮動小数点型データ
OK DataTypeEnum(DataTypeEnumName):7(倍精度浮動小数点型データ)
OK Name:GUID 型データ
OK DataTypeEnum(DataTypeEnumName):15(GUID 型データ)
OK Name:整数型データ
OK DataTypeEnum(DataTypeEnumName):3(整数型データ)
OK Name:長整数型データ
OK DataTypeEnum(DataTypeEnumName):4(長整数型データ)
OK Name:バイナリ型データ (ビットマップ)
OK DataTypeEnum(DataTypeEnumName):11(バイナリ型データ (ビットマップ))
OK Name:メモ型データ (拡張テキスト)
OK DataTypeEnum(DataTypeEnumName):12(メモ型データ (拡張テキスト))
OK Name:単精度浮動小数点型データ
OK DataTypeEnum(DataTypeEnumName):6(単精度浮動小数点型データ)
OK Name:テキスト型データ (可変幅)
OK DataTypeEnum(DataTypeEnumName):10(テキスト型データ (可変幅))
作成できなかったデータ型
NG Name: テキスト型データ (固定幅)
NG DataTypeEnum(DataTypeEnumName):18(テキスト型データ (固定幅))
NG Description: 無効な処理です。
NG Name: 多倍長整数型データ
NG DataTypeEnum(DataTypeEnumName):16(多倍長整数型データ)
NG Description: フィールドのデータ型が正しくありません。
NG Name: 10 進型データ (ODBCDirect のみ)
NG DataTypeEnum(DataTypeEnumName):20(10 進型データ (ODBCDirect のみ))
NG Description: フィールドのデータ型が正しくありません。
NG Name: 浮動小数点型データ (ODBCDirect のみ)
NG DataTypeEnum(DataTypeEnumName):21(浮動小数点型データ (ODBCDirect のみ))
NG Description: フィールドのデータ型が正しくありません。
NG Name: 数値型データ (ODBCDirect のみ)
NG DataTypeEnum(DataTypeEnumName):19(数値型データ (ODBCDirect のみ))
NG Description: フィールドのデータ型が正しくありません。
NG Name: 時刻形式のデータ (ODBCDirect のみ)
NG DataTypeEnum(DataTypeEnumName):22(時刻形式のデータ (ODBCDirect のみ))
NG Description: フィールドのデータ型が正しくありません。
NG Name: 時刻および日付の形式のデータ (ODBCDirect のみ)
NG DataTypeEnum(DataTypeEnumName):23(時刻および日付の形式のデータ (ODBCDirect のみ))
NG Description: フィールドのデータ型が正しくありません。
NG Name: 可変長バイナリ型データ (ODBCDirect のみ)
NG DataTypeEnum(DataTypeEnumName):17(可変長バイナリ型データ (ODBCDirect のみ))
NG Description: フィールドのデータ型が正しくありません。
【参考】MSDNのサイトから抜粋 URLはコレ 

データ型の比較

 
      

       
                Office 2013 and later
            

      

   

 
 
 

Access データベース エンジンは、いくつかの重なり合うデータ型セットを認識します。Access では、テーブルのデザイン ビュー、[クエリ パラメーター] ダイアログ ボックス、Visual Basic、およびクエリの SQL ビューでデータ型を設定することができます。

次の表で、各見出しに対する 5 組のデータ型を比較します。最初の列は、テーブル デザイン ビューで利用可能な Type プロパティの設定の一覧と、数値型のデータに対する FieldSize/ファイル サイズプロパティの 5 つの設定の一覧です。2 番目の列は、[クエリ パラメーター] ダイアログ ボックスでパラメーター クエリをデザインするときに使用可能な、最初の列に対応するクエリ パラメーターのデータ型です。3 番目の列は、最初の列に対応する Visual Basic のデータ型の一覧です。4 番目の列は、ADO の Field オブジェクトのデータ型の一覧です。5 番目の列は、Access データベース エンジンで定義される Jet データベース エンジンの SQL データ型およびその有効な同義語です。

   

テーブルのフィールド

クエリ パラメーター

Visual Basic

ADO のデータ型プロパティの定数

Access データベース エンジンの SQL および同義語

サポートしません

バイナリ型 (Binary)

サポートしません

adBinary

BINARY (メモを参照)
(同義語: VARBINARY)

はい/いいえ型

はい/いいえ型

ブール型 (Boolean)

adBoolean

BOOLEAN
(同義語: BIT, LOGICAL, LOGICAL1, YESNO)

数値型
(フィールドサイズがバイト型)

バイト型 (Byte)

バイト型 (Byte)

adUnsignedTinyInt

BYTE
(同義語: INTEGER1)

オートナンバー型
(FieldSize が長整数型)

長整数型 (Long Integer)

Long 型 (Long)

adInteger

COUNTER
(同義語: AUTOINCREMENT)

通貨型 (Currency)

通貨型 (Currency)

通貨型 (Currency)

adCurrency

CURRENCY
(同義語: MONEY)

日付/時刻型 (Date/Time)

日付/時刻型 (Date/Time)

日付型 (Date)

adDate

DATETIME
(同義語: DATE, TIME, TIMESTAMP)

数値型
(フィールドサイズ
倍精度浮動小数点型)

倍精度浮動小数点型 (Double)

倍精度浮動小数点型 (Double)

adDouble

DOUBLE
(同義語: FLOAT, FLOAT8, IEEEDOUBLE, NUMBER, NUMERIC)

オートナンバー型/GUID (FieldSize
レプリケーション ID)

レプリケーション ID 型 (Replication ID)

サポートしません

adGUID

GUID

数値型
(フィールドサイズ
長整数型)

長整数型 (Long Integer)

Long 型 (Long)

adInteger

LONG (メモを参照)
(同義語: INT, INTEGER, INTEGER4)

OLE オブジェクト型 (OLE Object)

OLE オブジェクト型 (OLE Object)

文字列型 (String)

adLongVarBinary

LONGBINARY
(同義語: GENERAL, OLEOBJECT)

メモ型 (Memo)

メモ型 (Memo)

文字列型 (String)

adLongVarWChar

LONGTEXT
(同義語: LONGCHAR, MEMO, NOTE)

数値型
(フィールドサイズ
単精度浮動小数点型)

単精度浮動小数点型 (Single)

単精度浮動小数点型 (Single)

adSingle

SINGLE
(同義語: FLOAT4, IEEESINGLE, REAL)

数値型
(フィールドサイズ
整数型)

整数型 (Integer)

整数型 (Integer)

adSmallInt

SHORT (メモを参照)
(同義語: INTEGER2, SMALLINT)

テキスト型 (Text)

テキスト型 (Text)

文字列型 (String)

adVarWChar

TEXT
(同義語: ALPHANUMERIC, CHAR, CHARACTER, STRING, VARCHAR)

ハイパーリンク

メモ型 (Memo)

文字列型 (String)

adLongVarWChar

LONGTEXT
(同義語: LONGCHAR, MEMO, NOTE)

サポートしません

バリアント型 (Variant)

adVariant

VALUE (メモを参照)

メモ メモ
  • Access 自体は BINARY データ型を使用しません。BINARY データ型は、このデータ型をサポートするほかのデータベース製品のリンク テーブルのクエリで使う場合にのみ認識されます。

  • Access データベース エンジン SQL の INTEGER データ型は、テーブルのフィールド、クエリ パラメーター、または Visual Basic の 整数型 (Integer) とは対応しません。SQL の INTEGER 型は、テーブルのフィールドおよびクエリ パラメーターの長整数型 (Long Integer)、および Visual Basic の Long 型 (Long ) に対応します。

  • 予約語 VALUE は、Access データベース エンジンで定義されるデータ型を表すものではありません。しかし、Access または SQL クエリでは、予約語 VALUE は Visual Basic のバリアント型 (Variant ) の有効な同義語と見なすことができます。

  • Visual Basic のコードの中でデータ アクセス オブジェクト (DAO) のデータ型を設定する場合は、そのオブジェクトの Type プロパティを設定する必要があります。

 

 

コメント

タイトルとURLをコピーしました