ExcelでRDB(リレーショナルデータベース)を操作してみようという連載のその5です。前回の記事はこちらです。
Accessファイルの理解を深めよう
前回はAccessファイルで簡単なデータベースを作ってみました。でも、それはデータ形式が変わっただけで、Accessだからっていう利点はあまり感じられません。
Accessファイルの利点を活かすには、まずAccessファイルの仕組みを理解しないといけないですよね。そこでADOとADOXを使用して、Accessファイルの構造を見てみたいと思います。
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"を置いてください。
準備が出来たら、プロシージャを実行してみます。ミディエイトウィンドウに何やら出てきました。
テーブルとフィールドの構造
ミディエイトウィンドウには、以下のように表示されました。
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