Accessファイルの構造は?(ExcelでRDBその5)

ExcelRDB(リレーショナルデータベース)を操作してみようという連載のその5です。前回の記事はこちらです。

hirocom777.hatenadiary.org

Accessファイルの理解を深めよう

 前回はAccessファイルで簡単なデータベースを作ってみました。でも、それはデータ形式が変わっただけで、Accessだからっていう利点はあまり感じられません。
Accessファイルの利点を活かすには、まずAccessファイルの仕組みを理解しないといけないですよね。そこでADOとADOXを使用して、Accessファイルの構造を見てみたいと思います。

f:id:HiroCom777:20200829163512j:plain

Accessファイルの構造は?

 そもそも、Access形式のファイルってどんな内容が入っているんでしょうか?ざっくりと調べてみました。

・テーブル
 これは当たり前にありますね。データベース本体です。
・フォーム
 データの入力や検索、表示したりするフォーム。人向けのインターフェースのようです。
・クエリ
 データの操作を記述するオブジェクトらしいです。
・レポート
 で、操作した結果とか印刷するのがレポートオブジェクトだそうです。
・マクロとVBA
 Accessにもあるんですね、VBA。ExcelVBAと違うのは、上記4点を操作する機能が強化されているってことかな?

って、途中から”らしい”とか、"かな?"とか投げやり感満載ですいません。今回の目的(AccessファイルをExcelで使い倒す)からすると、テーブル以外はさして重要ではないという印象です。あえて言えばクエリは押さえておきたいかも。

テーブル構成を見てみる。

 それでは、ADOXを使ってAccessファイルのテーブル構成を見てみましょう。Excelファイルを用意して、以下のプロシージャを標準モジュールに入力してください。参照設定でMicrosoft ADO Ext.6.0 for DDL and Securityにチェックを入れておくのをお忘れなく。

Private Sub AccessFileCheck()
Dim connectString As String
Dim catalogObject As Object
Dim tableObject As Object
Dim columnObject As Object
Set catalogObject = CreateObject("ADOX.Catalog")
Set tableObject = New ADOX.Table
Set columnObject = New ADOX.Column
  connectString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
    & ThisWorkbook.Path & "\名簿.accdb"
  catalogObject.ActiveConnection = connectString

  For Each tableObject In catalogObject.Tables
    Debug.Print tableObject.Name & vbTab;
    Debug.Print tableObject.Type
    For Each columnObject In tableObject.Columns
      Debug.Print columnObject.Name & vbTab;
      Debug.Print columnObject.Type
    Next
  Next
End Sub

ADOXを使用して接続したデータベースからTablesコレクションを使用してテーブルの一覧と種類を表示します。テーブル内のフィールド名一覧、種類も表示します。
Excelファイルと同じ場所に、前回公開したデータベースシステムファイル内にある"名簿.accdb"を置いてください。

04_Accessデータベースを作ってみる.zip

準備が出来たら、プロシージャを実行してみます。ミディエイトウィンドウに何やら出てきました。

テーブルとフィールドの構造

ミディエイトウィンドウには、以下のように表示されました。

MSysACEs SYSTEM TABLE
MSysComplexColumns SYSTEM TABLE
MSysObjects SYSTEM TABLE
MSysQueries SYSTEM TABLE
MSysRelationships SYSTEM TABLE
Table_1 TABLE
  ID 3
  備考 203
  名前 202
  性別 202
  生年月日 7
  血液型 202

今回のプロシージャは、Accessファイルのテーブルとテーブル内のフィールドの一覧を表示するものです。テーブルの種類とフィールドの種類も表示します。でも、おかしいですね、"名簿.accdb"で作成したテーブルは"Table_1"だけです。その他のテーブルは何なんでしょうか?それ以外のテーブルの種類を確認すると"SYSTEM TABLE"となっています。これらのテーブルは、Accessファイル内のオブジェクト管理用のため実際のデータベース管理には使用しません。"Table_1"のテーブル種類は"TABLE"となっています。実際にはこの種類のテーブルだけ確認できればいいでしょう。

"Table_1"のフィールド名一覧はちゃんと取れているようです。フィールド名の後に続く数字はフィールドのデータ型です。以下の意味を持ちます。

3  整数型(adInteger)
7 日付型 (adDate)
202 文字列型(adVarWChar)
203 長文字列型(adLongVarWChar)

ばっちり取れていますね。

お次はキーかな?

 テーブルとフィールドの一覧が取れました。テーブルやフィールドの追加、削除も出来ます。ADOも併用すればテーブルの中身も確認、編集が出来ますね。さて、RDBにおいてもう一つ大事なものがあります。それは『キー』です。次回はこちらに取り組もうと思います。お楽しみに!!
hirocom777.hatenadiary.org


ExcelVBAでAccessファイルを操作する連載はコチラから