在 ms-access 中获取表的外键约束列表?

Posted

技术标签:

【中文标题】在 ms-access 中获取表的外键约束列表?【英文标题】:Getting a list of foreign key constraints for a table in ms-access? 【发布时间】:2012-07-31 14:14:33 【问题描述】:

我正在尝试使用关系窗口来查看 MS-Access 数据库中表之间的关系。我隐藏了所有其他表,并在其中一个表中找到了一个外键,看起来它应该链接到另一个表,主键是我需要追踪的信息。

有没有办法在 Access 中列出表上现有的外键约束,就像 SHOW CREATE TABLE syntax in mysql 一样?

【问题讨论】:

【参考方案1】:

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

【讨论】:

有一个隐藏的系统表 MSysRelations 显示所有关系,但它是一个不受支持的功能:SELECT * FROM MSysRelations,不用说,但我会的,不要乱用它。 在 MS Access 内,是的,但它不太可能在 Access 之外工作。

以上是关于在 ms-access 中获取表的外键约束列表?的主要内容,如果未能解决你的问题,请参考以下文章

mysql数据库怎么删除一个表的外键

小议Oracle外键约束修改行为(一)

补12.关于mysql的外键约束

数据库

参照完整性-外键约束

oracle为表建立外键时没有命名FOREIGN KEY约束,现在想删外键怎么办??