Excel VBAメモ Accessデータベースの空文字列を許可のプロパティを取得してみる

VBA

Accessのデータベースファイルを取り扱うときにADODB.Connectionでは取得できず困ったのでメモしとくことに。

ポイントとしてはだいたいこんな感じ。

  • CreateObject(“ADOX.Catalog")でデータベースへアクセスするオブジェクトを作成する
    ※参照設定しないのでCreateObjectでCOMを使う必要がある
  • Properties(“Jet OLEDB:Allow Zero Length").Valueで空文字列の許可のプロパティを取得する

んで、サンプルとしてこんなデータベースを準備した。

テーブルとしてはこんな感じ。

それぞれのフィールドの定義はこんな感じ。

  1. IDってフィールドはこんな感じ。
  2. 名前ってフィールドはこんな感じ。
  3. 有無ってフィールドはこんな感じ。
  4. 何かの数字ってフィールドはこんな感じ。
  5. コメントってフィールドはこんな感じ。
    で、こいつだけ空文字列の許可ってのを「はい」にしてる。

コードはこんな感じ。

Public Sub Proto()

    ' プロシージャの変数を定義する
    Dim objCatalog As Object
    Dim strLocation As String

    ' テーブルのフィールドプロパティで"空文字の許可"のステータスを
    ' イミディエイトウィンドウに出力する
    ' ※エラーになったら終了処理をする
    On Error GoTo ProtoEnd
    
        ' Accessファイルへのパスを設定しておく
        strLocation = "C:\Users\tetsuyanbo\Desktop\Sample.accdb"
    
        ' DBへアクセスするためのオブジェクトを作成する
        Set objCatalog = CreateObject("ADOX.Catalog")
        
        ' DBへ接続する(この文字列はOffice2007以降でaccdbっていう拡張子で動く)
        objCatalog.ActiveConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strLocation
    
        ' 名前を指定してテーブルを取得する
        Set objTable = objCatalog.Tables("マスタ")
        
        ' イミディエイトウィンドウに出力する
        For Each objColumn In objTable.Columns
            Dim strResult As Boolean
            strResult = objColumn.Properties("Jet OLEDB:Allow Zero Length").Value
            Debug.Print objColumn.Name & ":" & strResult
        Next
    
ProtoEnd:

    ' オブジェクトを破棄する
    If Not objCatalog Is Nothing Then
        Set objCatalog = Nothing
    End If

End Sub

実際に動かしてみたらこんな感じ…フィールド名:プロパティの値って感じで表示してるんだけど、ちゃんと値が表示されとる。

ID:False
コメント:True
何かの数字:False
名前:False
有無:False

そんなこんなで、明日への自分へのメモってことで。

VBA(AllowZeroLength)