如何解决MS Access:如何在 VBA 中设置外连接约束?
当我在 Database Tools > Relationships
处手动创建两个表之间的关系时,Access 允许我设置联接属性,使其成为内联接或左外联接或右外联接加入:
但是当我在 VBA 中创建关系时:
ssql = "ALTER TABLE [" & sTable1 & "] ADD CONSTRAINT [" & sTable1 & "] " & _
"FOREIGN KEY ([" & sKey & "]) REFERENCES [" & sTable2 & "]([" & sKey & "]);"
oDB.Execute ssql
它将关系创建为内部联接。我可以通过转到 Database Tools > Relationships
并查看 VBA 创建的关系来看到这一点:
我没有看到告诉 VBA 使用什么连接属性的方法,它显然自己决定进行内部连接。 (另一个问题是连接线左侧的小无穷大符号意味着Access认为这是一对多关系,但由于链接字段是主键,因此是一对一的,如图所示在上面的第一张图片中。)
Microsoft 在以下位置提供了有关此过程的文档:
- ALTER TABLE statement (Microsoft Access SQL)
- CONSTRAINT clause (Microsoft Access SQL)
- Modify a table's design using Access SQL
- Create Foreign Key Relationships
还有关于如何在 DAO 而非 sql 中执行此操作的文档:
我需要表关系是外连接,以便它包括一个表的所有记录,并且只包括主键相等的第二个表的记录。如何在 VBA 中创建这种关系?
解决方法
更新:
再看这个,你将需要关系对象的属性值。 问题是,属性常量是按位的,在文档中有点难以捉摸。 0 是您看到的默认值,其余的必须相加。
所以你可以这样做:
以您想要的方式(左连接、右连接等)在您的数据库中创建关系并保存。假设 Northwind 是您的数据库,在函数或模块中:
Set dbsNorthwind = OpenDatabase("Northwind.mdb")
With dbsNorthwind
' Display the attributes of the Northwind database's
' relations.
Debug.Print "Attributes of relations in " & _
.Name & ":"
For Each relLoop In .Relations
Debug.Print " " & relLoop.Name & " = " & _
relLoop.Attributes
Next relLoop
.Close
End With
您创建的关系应显示您需要的属性值。 您还可以使用 here 参考。
现在,当您要创建自己的关系时,只需使用 CreateRelation 函数(如文档中所述)并像这样设置所需的属性:
Set dbsNorthwind = OpenDatabase("Northwind.mdb")
With dbsNorthwind
Set relNew = .CreateRelation(Name,Table,ForeignTable,Attributes)
' Add join fields
relNew.Fields.Append relNew.CreateField("newFieldName")
relNew.Fields!newFieldName.ForeignName = "joinfieldName"
.Relations.Append relNew
.Close
End With
例如,如果您想要左连接,则您为“属性”设置的值将是 dbRelationLeft + 另一个表示为一个数值的属性常量的组合。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。