我在Microsoft Access 2000中继承了一个具有代码,表格和功能的项目。查询。我需要将其转换为SQL。
我看到INNER JOINS
使用Select命令的几个查询。所以我猜这些表有关系吗?
我使用了关系工具(图形工具)&添加所有表格。关系没有出现。
如何建立关系? 如何检索已设置的关系?
答案 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
子句的关系进行反向工程。