如何使用 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
我有一个用于现场(无网络 - 海洋研究)的数据输入程序。当用户回到办公室时,他们将数据提交到服务器以导入主 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