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

How do i create multi-field table relationships using vba?

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

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)

它returns一个错误:

3001: Invalid argument.

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

有没有办法做到这一点,或者我应该不要担心,让他们自己解决?

如果您希望建立这样的关系:

那么你应该可以这样做:

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