3

リレーションシップウィンドウを使用して、MS-Accessデータベース内のテーブル間のリレーションシップを表示しようとしています。他のすべてのテーブルを非表示にしたところ、追跡する必要のある情報を持つ主キーを持つ別のテーブルにリンクする必要があるように見えるテーブルの1つに外部キーが見つかりました。

MySQLのSHOWCREATETABLE構文のように、Accessのテーブルに既存の外部キー制約を一覧表示する方法はありますか?

4

1 に答える 1

9

DAOおよびADOSchemasのtabledefコレクションは、外部キーを表示します。

Dim tdf As TableDef
Dim db As Database
Dim ndx As Index

Set db = CurrentDb

For Each tdf In db.TableDefs
    For Each ndx In tdf.Indexes
        If ndx.Foreign = True Then
            Debug.Print tdf.Name, ndx.Name
            For Each fld In ndx.Fields
                Debug.Print fld.Name
            Next
        End If
    Next
Next

関係

Dim rel As DAO.Relation
Dim db As Database
Set db = CurrentDb

For Each rel In db.Relations
    Debug.Print rel.Name, rel.ForeignTable
    For Each fld In rel.Fields
        Debug.Print fld.Name
    Next
Next

ADOSchema

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset

Set cn = CurrentProject.Connection

Set rs = cn.OpenSchema(adSchemaForeignKeys)

Do While Not rs.EOF
    For i = 0 To rs.Fields.Count - 1
        Debug.Print rs.Fields(i).Name & ":- " & rs.Fields(i)
    Next
    rs.MoveNext
Loop

最後に、隠されたシステムテーブルがあります。

SELECT * FROM MSysRelationships
于 2012-07-31T14:16:48.127 に答える