微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MS Access:如何在 VBA 中设置外连接约束?

如何解决MS Access:如何在 VBA 中设置外连接约束?

当我在 Database Tools > Relationships 处手动创建两个表之间的关系时,Access 允许我设置联接属性,使其成为内联接或左外联接或右外联接加入

enter image description here

但是当我在 VBA 中创建关系时:

ssql = "ALTER TABLE [" & sTable1 & "] ADD CONSTRAINT [" & sTable1 & "] " & _
                "FOREIGN KEY ([" & sKey & "]) REFERENCES [" & sTable2 & "]([" & sKey & "]);"
oDB.Execute ssql

它将关系创建为内部联接。我可以通过转到 Database Tools > Relationships 并查看 VBA 创建的关系来看到这一点:

enter image description here

我没有看到告诉 VBA 使用什么连接属性方法,它显然自己决定进行内部连接。 (另一个问题是连接线左侧的小无穷大符号意味着Access认为这是一对多关系,但由于链接字段是主键,因此是一对一的,如图所示在上面的第一张图片中。)

Microsoft 在以下位置提供了有关此过程的文档:

还有关于如何在 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 举报,一经查实,本站将立刻删除。