2016-06-09 91 views
1

我有一个数据录入程序,用于现场(无网络 - 海洋研究)的使用。当用户回到办公室时,他们将数据提交给服务器以导入主SQL数据库。然后它创建一个空的访问数据库文件并导出这些表(DoCmd.TransferDatabase),以便用户为其异地研究目的而拥有本地副本。我想要做的是使用DAO.Database.CreateRelation()重新创建新数据文件中的表关系。它工作,直到我需要一个表,需要两个领域作为PK或FK。如何使用vba创建多字段表关系?

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. 

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

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

+0

该表的布局似乎不合逻辑给我。为什么两个具有相同键(表2和表3)的表彼此连接而不是仅仅连接到第一个?我确信我在这里错过了一些东西,但我不明白你在做什么。我们能否看到更多的数据模型? – mrunion

+0

表1标识行程,表2标识该行程(2或3)上的行,表3标识行上的挂钩(10)。 –

回答

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 
+0

谢谢!这解决了我创建多领域关系的问题。我遇到的另一个问题是关系名称太长 - 超过64个字符。一旦我把它限制在64或更少,我的功能就很好。 –

相关问题