如何使用vba创建多字段表关系?

时间:2016-06-09 20:13:54

标签: ms-access-2013

我有一个用于野外(无网络 - 海洋研究)的数据输入程序。当用户返回办公室时,他们将数据提交给服务器以导入主sql数据库。然后,它创建一个空的访问数据库文件并导出表(DoCmd.TransferDatabase),以便用户具有本地副本用于其非现场研究目的。我要做的是使用DAO.Database.CreateRelation()在新数据文件中重新创建表关系。它一直有效,直到我找到一个需要两个字段作为PK或FK的表。

Table1                    Table2                    Table3
SampleNumber  1--------M  SampleNumber  1--------M  SampleNumber
.                         LineNumber    1--------M  LineNumber
.                         .                         HookNumber
.                         .                         .
.                         .                         .

Table1_PK -> SampleNumber
Table2_PK -> SampleNumber+LineNumber
Table3_PK -> SampleNumber+LineNumber+HookNumber

当我在我的函数中使用它时:

Set newRelation = db.CreateRelation(relationUniqueName, _
                        primaryTableName, foreignTableName, relAttr)

它会返回错误:

3001: Invalid argument.

但只有当我尝试创建上述关系时。所有其他关系都可以正确创建。

有没有办法做到这一点,或者我应该不担心它并让他们弄明白?

1 个答案:

答案 0 :(得分:1)

如果您正在寻找创建这样的关系:

Relationships.png

然后你应该能够这样做:

Dim cdb As DAO.Database, rel As DAO.Relation, fld As DAO.Field
Set cdb = CurrentDb

Set rel = cdb.CreateRelation("Table2Table3", "Table2", "Table3")

Set fld = New DAO.Field
fld.Name = "SampleNumber"
fld.ForeignName = "SampleNumber"
rel.Fields.Append fld

Set fld = New DAO.Field
fld.Name = "LineNumber"
fld.ForeignName = "LineNumber"
rel.Fields.Append fld

cdb.Relations.Append rel

Set fld = Nothing
Set rel = Nothing
Set cdb = Nothing