Relationenen setzten in Access mittels VBA (Access)

SteffiB777 @, Dienstag, 03.12.2019, 12:51 (vor 184 Tagen)

Hallo Zusammen,

ich würde gerne in meiner DB Relationen setzten, jedoch finde ich den Fehler nicht. Folgender Fehler Code wird mir ausgegeben: "Der Datensatz kann nicht hinzugefügt oder geändert werden, da ein Datensatz in der Tabelle "" mit diesem Datensatz in Beziehung stehen muss.

Primärtabelle: Anfertigungsteil (Schlüssel: Material)
Fremdtabelle: yprst (Schlüssel: Material)

Sub yprst()
Dim db As DAO.Database
Dim tdfY As DAO.TableDef
Dim tdfA As DAO.TableDef
Dim rsY As DAO.Recordset
Dim fldY As DAO.Field
Dim relNew As DAO.Relation

Set db = CurrentDb 'DB definieren
Set tdfY = db.TableDefs("yprst")
Set tdfA = db.TableDefs("Anfertigungsteil")
'Eine bestehende Beziehung zwischen den Tabellen wird gelöscht
For Each relNew In db.Relations
If relNew.Table = tdfA.Name And relNew.ForeignTable = tdfY.Name Then
db.Relations.Delete relNew.Name
End If
Next relNew

Set tdfY = db.TableDefs("yprst")
Set tdfA = db.TableDefs("Anfertigungsteil")

'Beziehung zwischen Anfertigungsteile und yprst setzten
Set relNew = db.CreateRelation("yprstAnfertigungsteil")
relNew.Table = tdfA.Name
relNew.ForeignTable = tdfY.Name
relNew.Attributes = dbRelationUpdateCascade
'zwischen welche Spalten die Relation erstellt werden soll
Set fldY = relNew.CreateField("Material")
fldY.ForeignName = "Material"
'Set relNew = db.CreateRelation("yprstAnfertigungsteil", tdfA.Name, tdfY.Name, dbRelationUpdateCascade)
'relNew.Fields.Append relNew.CreateField("Material")
'relNew.Fields("Material").ForeignName = "Material"
'Setzen der Relation
relNew.Fields.Append fldY
db.Relations.Append relNew
db.Relations.Refresh
db.Close
dbY.Relations.Refresh
Set relNew = Nothing
Set db = Nothing
Set tdfY = Nothing
Set tdfA = Nothing
Set fldY = Nothing
End Sub

Relationenen setzten in Access mittels VBA

Martin Asal @, Dienstag, 03.12.2019, 14:00 (vor 184 Tagen) @ SteffiB777

Hallo Steffi,

ich verstehe nicht, was du eigentlich bezwecken willst? Du löschst eine Beziehung - nur um genau diese Beziehung im nächsten Moment wieder zu erstellen?

Set tdfY = db.TableDefs("yprst")
Set tdfA = db.TableDefs("Anfertigungsteil")

Diese Zeilen finden sich sinnfreier Weise doppelt in deinem Code.

dbY.Relations.Refresh

Möglicherweise verursacht das deinen Fehler? "dbY" gibt es nicht. Wenn das den Fehler verursacht, solltest du mit Option Explicit arbeiten.

Martin

Relationenen setzten in Access mittels VBA

SteffiB777 @, Dienstag, 03.12.2019, 14:50 (vor 184 Tagen) @ Martin Asal

Hey Martin,

ich hab den Code nochmal angepasst, jedoch bekomme ich immer noch den Fehler. So langsam weis echt nicht mehr weiter...

Liebe Grüße,
Steffi

Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim rsY As DAO.Recordset
Dim fldY As DAO.Field
Dim relNew As DAO.Relation

Set db = CurrentDb 'DB definieren
Set tdf = db.TableDefs("Anfertigungsteil")

'Beziehung zwischen Anfertigungsteile und yprst setzten
Set relNew = db.CreateRelation("yprstAnfertigungsteil")
relNew.Table = "Anfertigungsteil"
relNew.ForeignTable = "yprst"
relNew.Attributes = dbRelationUpdateCascade
'zwischen welche Spalten die Relation erstellt werden soll
Set fld = relNew.CreateField("Material")
fld.ForeignName = "Material"
'Setzen der Relation
relNew.Fields.Append fld
db.Relations.Append relNew
db.Relations.Refresh
db.Close


dbY.Relations.Refresh
Set relNew = Nothing
Set db = Nothing
Set tdf = Nothing
Set fld = Nothing

RSS-Feed dieser Diskussion
powered by my little forum