MSysObjectsを使ったオブジェクト一覧の取得

目次

概要

Accessのオブジェクト一覧を取得する方法はいくつかありますが、ここでは、システムテーブル[MSysObjects]を使った方法を説明します。

なお、この方法では、オブジェクトの名前は取得できますが、オブジェクトの詳細については取得できません。

[MSysObjects]は、通常は表示されないシステムテーブルです。表示するには、[ナビゲーションオプション]-[表示オプション]の[システムオブジェクトと表示]にチェックを入れます。(非表示のままでも参照は可能です。)

Typeによるオブジェクトの種類の判別

[MSysObjects]の列のうち、[Type]がオブジェクトの種類を表します。

Typeオブジェクトの種類
1ローカルテーブル(システムテーブルを含む)
5クエリー
-32768フォーム
-32764レポート
-32766マクロ
-32761モジュール
Type一覧(抜粋)


Public Sub PrintAllObjectsBySysTable(ByRef db As DAO.Database)

    Dim sql As String
    Dim rs As DAO.Recordset
    
    'Table
    Debug.Print "----- Table -----"
    sql = "SELECT Name FROM MsysObjects WHERE Left([Name],4) <> ""Msys"" AND Type = 1 ORDER BY Name;"
    Set rs = db.OpenRecordset(sql)
    Do Until rs.EOF
        Debug.Print rs!name
        rs.MoveNext
    Loop

    'Query
    Debug.Print "----- Query -----"
    sql = "SELECT Name FROM MsysObjects WHERE Left([Name],1) <>""~"" AND Type = 5 ORDER BY Name;"
    Set rs = db.OpenRecordset(sql)
    Do Until rs.EOF
        Debug.Print rs!name
        rs.MoveNext
    Loop

    'Form
    Debug.Print "----- Form -----"
    sql = "SELECT Name FROM MsysObjects WHERE Type = -32768 ORDER BY Name;"
    Set rs = db.OpenRecordset(sql)
    Do Until rs.EOF
        Debug.Print rs!name
        rs.MoveNext
    Loop

    'Report
    Debug.Print "----- Report -----"
    sql = "SELECT Name FROM MsysObjects WHERE Type = -32764 ORDER BY Name;"
    Set rs = db.OpenRecordset(sql)
    Do Until rs.EOF
        Debug.Print rs!name
        rs.MoveNext
    Loop

    'Macro
    Debug.Print "----- Macro -----"
    sql = "SELECT Name FROM MsysObjects WHERE Type = -32766 ORDER BY Name;"
    Set rs = db.OpenRecordset(sql)
    Do Until rs.EOF
        Debug.Print rs!name
        rs.MoveNext
    Loop

    'Module
    Debug.Print "----- Module -----"
    sql = "SELECT Name FROM MsysObjects WHERE Type = -32761 ORDER BY Name;"
    Set rs = db.OpenRecordset(sql)
    Do Until rs.EOF
        Debug.Print rs!name
        rs.MoveNext
    Loop

End Sub

Flagsによるクエリーの種類の判別

Type=5:クエリーの場合、Flasgの値によりクエリーの種類を判別できます。

なお、隠しオブジェクトの場合は、各Flagsにさらに+8を加算したものになります。

Flagsクエリーの種類
16Cross Query
32Delete Query
48Update Query
64Insert Query
96Create Table / DLL?
128Union / Union All
(+8)(隠しオブジェクト)
Flags
Flagsクエリーの種類
80 (不明)
112Pass through Select Query?
144Pass through Action Query?
160(不明)
176(不明)
192(不明)
208(不明)
224 (不明)
240 (不明)
その他のFlags

その他のType・Flags(参考)

TypeFlagsName
-327570UserDefined
-327570SummaryInfo
Type=-32757
TypeFlagsName
2-2147483648MSysDb
Type=2
TypeFlagsName
3-2147483648Tables
3-2147483648Databases
3-2147483648 Relationships
30DataAccessPages
30Forms
30Modules
30Reports
30SysRel
30Scripts
Type=3
TypeFlagsName
62097152M_オブジェクトタイプ
Type=6
TypeFlagsName
80MSysNavPaneGroupCategoriesMSysNavPaneGroups
Type=8
よかったらシェアしてね!

この記事を書いた人

コメント

コメントする

目次
閉じる