2016-06-09 74 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或更少,我的功能就很好。 –

相關問題