Bar

Access 2013 テーブル・クエリ等すべてのオブジェクトを取得する方法

調べ物をしている最中、Microsoft Access 2013の[MsysObjects]テーブルなる存在を知ったのでメモ。
ローカル・リンク テーブルの接続情報や、テーブル・クエリ等すべてのオブジェジェクトを取得する事ができます。
2013.10.29
余談にTableDefs(DAO)を追加

リンクテーブルの接続情報

MsysObjectsはシステム テーブルです。取扱に注意が必要です!
SELECT Name, Connect, ForeignName
FROM MsysObjects
WHERE Type = 4
画面左側のオブジェクト一覧にあるリンクテーブルは、[Name]カラムにテーブル名が表示されていますが、テーブル オブジェクトを削除する[~TMPCLPxxxxxx](xは数値)に変更されます。
image
変更後も接続情報等はそのまま残っています。
万が一テーブルを削除し接続情報が分からない・・・という時に[MsysObjects]テーブルは役立ちそうです。
2013-10-28_172124
なお、[MsysObjects]テーブルを変更しようとすると
このコントロールはレプリケーション システム フィールド’Name’に連絡しているため、編集できません。
というエラーが表示されます。

全テーブル名を取得する場合

SELECT Name
FROM MsysObjects
WHERE Type = 1 AND Flags = 0

全レポート名を取得する場合

SELECT Name
FROM MsysObjects
WHERE Type = -32764 AND Flags = 0

全クエリ名を取得する場合

SELECT Name
FROM MsysObjects
WHERE Type = 5 AND Flags = 0

全フォーム名を取得する場合

SELECT Name
FROM MsysObjects
WHERE Type = –32768 AND Flags = 0

全マクロ名を取得する場合

SELECT Name
FROM MsysObjects
WHERE Type = –32764 AND Flags = 0

全モジュール名を取得する場合

SELECT Name
FROM MsysObjects
WHERE Type = -32761 AND Flags = 0
余談:TableDefs(DAO)もありますね
DAO(Data Access Object)にTableDefsコレクションがあり、MsysObjectsのnameプロパティやconnectプロパティと同一の情報が取得できます。
Dim tbl AS DAO.TableDefs
For Each tbl In CurrentDb.TableDefs
Debug.Print tbl.Connect
Debug.Print tbl.Name
Next 
TableDefs コレクション (DAO)
Access Clubさんのテーブルの作成:DAO入門講座にある階層構造を見ればすぐにイメージできます。
テーブルの作成 : DAO入門講座