2016-06-09 6 views
1

Ich habe ein Programm zur Dateneingabe für Feld (kein Netzwerk - Meeresforschung) verwenden. Wenn der Benutzer zurück ins Büro kommt, sendet er die Daten zum Import in die master sql Datenbank an den Server. Anschließend erstellt es eine leere Access-Datenbankdatei und exportiert die Tabellen (DoCmd.TransferDatabase), sodass der Benutzer eine lokale Kopie für seine Offsite-Forschungszwecke zur Verfügung hat. Ich versuche, die Tabellenbeziehungen in der neuen Datendatei mithilfe von DAO.Database.CreateRelation() neu zu erstellen. Es funktioniert, bis ich zu einer Tabelle komme, die zwei Felder als PK oder FK benötigt.Wie erstelle ich Multi-Feld-Tabellen-Beziehungen mit 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 

Wenn ich dies in meiner Funktion:

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

es gibt einen Fehler zurück:

3001: Invalid argument. 

Aber nur, wenn ich versuche, die über Beziehungen zu erstellen. Alle anderen Beziehungen werden korrekt erstellt.

Gibt es eine Möglichkeit, dies zu tun, oder sollte ich mir einfach keine Sorgen machen und sie herausfinden lassen?

+0

Das Tabellen-Layout für mich unlogisch erscheint. Warum zwei Tabellen mit den gleichen Schlüsseln (Tabelle 2 und Tabelle 3) durcheinander anstatt nur mit dem ersten? Ich bin mir sicher, dass ich hier etwas verpasse, aber ich verstehe nicht, wonach Sie suchen. Können wir mehr vom Datenmodell sehen? – mrunion

+0

Tabelle 1 identifiziert die Auslösung, Tabelle 2 identifiziert eine Linie auf dieser Auslösung (2 oder 3), Tabelle 3 identifiziert Haken (10) auf der Leitung. –

Antwort

1

Wenn Sie suchen eine Beziehung wie diese zu erstellen:

Relationships.png

dann sollten Sie in der Lage sein, es so zu tun:

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

Danke !!! Dies hat mein Problem beim Erstellen der Multi-Field-Relation behoben. Das andere Problem, das ich hatte, war der Name der Beziehung war zu lang - über 64 Zeichen. Sobald ich es in meiner Funktion auf 64 oder weniger beschränkt habe, hat es großartig funktioniert. –