MS Access - 关系

时间:2011-08-18 09:04:32

标签: sql-server ms-access relational-database

我在Microsoft Access 2000中继承了一个具有代码,表格和功能的项目。查询。我需要将其转换为SQL。

我看到INNER JOINS使用Select命令的几个查询。所以我猜这些表有关系吗?

我使用了关系工具(图形工具)&添加所有表格。关系没有出现。

如何建立关系? 如何检索已设置的关系?

2 个答案:

答案 0 :(得分:1)

无论是否已为连接表定义关系,数据库引擎都将接受JOIN语句。因此,那些INNER JOIN查询并不一定意味着您的数据库已定义任何关系。

有关关系的信息存储在隐藏的系统表,MSysObjects和MSysRelationships中。您可以使用数据库的Relations集合来查看该信息。

Public Sub InspectRelations()
    Dim rel As DAO.Relation
    Dim fld As DAO.Field
    For Each rel In CurrentDb.Relations
        Debug.Print "Relationship Name: " & rel.name
        If rel.Attributes And dbRelationDontEnforce = dbRelationDontEnforce Then
            Debug.Print "Relationship not enforced"
        Else
            Debug.Print "Relationship enforced"
        End If
        Debug.Print "Table: " & rel.Table
        Debug.Print "ForeignTable: " & rel.ForeignTable
        For Each fld In rel.Fields
            Debug.Print "Field Name: " & fld.name
            Debug.Print "ForeignName: " & fld.ForeignName
        Next fld
        Debug.Print String(10, "-")
    Next rel
    Set fld = Nothing
    Set rel = Nothing
End Sub

编辑:您可以检查关系的属性。我在示例中包含了dbRelationDontEnforce。其他属性(如dbRelationDeleteCascade和dbRelationUpdateCascade)可能很有用。查看RelationAttributeEnum Enumeration的帮助主题以查看可用属性的完整列表。

Edit2 :要使用该代码,请在Access中打开您的数据库。然后使用Ctrl + g快捷方式在Visual Basic编辑器中打开立即窗口。然后从VBE主菜单中选择Insert-> Module。复制代码并将其粘贴到模块中。保存模块,接受名称(这将类似于“Module1”)访问提供,或给它一个对你更有意义的不同名称......但是不要将模块命名为InspectRelations ---模块和程序应该有不同的名字。

通过从主菜单中选择Debug-> Compile,确保编译器接受代码。由于您使用的是Access 2000,因此可能需要为“Microsoft DAO 3.6 Object Library”设置引用。在列表中找到它并在其旁边放置一个复选标记,然后单击“确定”。然后再次编译。

如果编译时没有错误,可以通过将光标定位在过程体内并按F5运行它来运行该过程。 Debug.Print语句将其输出发送到立即窗口。

答案 1 :(得分:0)

如果未使用关系工具来指示关系并强制执行参照完整性,那么您就不走运了,因为您可以在不使用关系工具的情况下在表之间建立关系。

联接向您显示所涉及表的主键/外键,因此您可能必须对查询中JOIN子句的关系进行反向工程。