Accessのデータベースファイルを取り扱うときにADODB.Connectionでは取得できず困ったのでメモしとくことに。
ポイントとしてはだいたいこんな感じ。
- CreateObject(“ADOX.Catalog”)でデータベースへアクセスするオブジェクトを作成する
※参照設定しないのでCreateObjectでCOMを使う必要がある - Properties(“Jet OLEDB:Allow Zero Length”).Valueで空文字列の許可のプロパティを取得する
んで、サンプルとしてこんなデータベースを準備した。
テーブルとしてはこんな感じ。
それぞれのフィールドの定義はこんな感じ。
- IDってフィールドはこんな感じ。

- 名前ってフィールドはこんな感じ。

- 有無ってフィールドはこんな感じ。

- 何かの数字ってフィールドはこんな感じ。

- コメントってフィールドはこんな感じ。
で、こいつだけ空文字列の許可ってのを「はい」にしてる。

コードはこんな感じ。
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
そんなこんなで、明日への自分へのメモってことで。


