Hallo.
Ich habe da ein Problem mit Relationen unter DAO
Es geht um ' Verknüpfung von "book" und "author"
Set rel = db.CreateRelation("ConnBokAth", "book", "author")
Set fld = rel.CreateField("ath_id")
fld.ForeignName = "bok_ath_id"
rel.Attributes = dbRelationUpdateCascade + dbRelationDeleteCascade
rel.Fields.Append fld
db.Relations.Append rel
Set fld = Nothing
Set rel = Nothing Hier aus wird der Fehler 3409 - "Invalid field definition 'bok_ath_id' in definition of index or relationship." produziert.
Option Explicit
' Tabelle anlegen
Private Sub MakeTable(ByRef oDatabase As DAO.Database, _
ByRef sTdName As String, _
ByRef oField() As String)
On Error GoTo Err_MakeTable
Dim iIndex As Integer
Dim i2Index As Integer
Dim td As DAO.TableDef
Dim fld As DAO.Field
Dim sTmp() As String
Dim oInd As DAO.Index
Set td = oDatabase.CreateTableDef()
td.Name = sTdName
For iIndex = 0 To UBound(oField)
sTmp = Split(oField(iIndex), ";")
If UBound(sTmp) >= 2 Then
Set fld = td.CreateField
fld.Name = CStr(sTmp(0))
fld.Type = CInt(sTmp(1))
fld.Size = CInt(sTmp(2))
If UBound(sTmp) >= 3 Then
If CStr(sTmp(3)) = "AI" And CInt(sTmp(1)) = DAO.dbLong Then
fld.Attributes = DAO.dbAutoIncrField
End If
End If
td.Fields.Append fld
Set fld = Nothing
If UBound(sTmp) >= 3 Then
For i2Index = 3 To UBound(sTmp)
If CStr(sTmp(i2Index)) = "PK" Then
Set oInd = New DAO.Index
oInd.Name = "PrimaryKey"
oInd.Fields = CStr(sTmp(0))
oInd.Primary = True
oInd.Unique = True
td.Indexes.Append oInd
Set oInd = Nothing
ElseIf CStr(sTmp(i2Index)) = "IND" Then
Set oInd = New DAO.Index
oInd.Name = CStr(sTmp(0))
oInd.Fields = CStr(sTmp(0))
td.Indexes.Append oInd
Set oInd = Nothing
End If
Next i2Index
End If
End If
Next iIndex
oDatabase.TableDefs.Append td
Set td = Nothing
Exit Sub
Err_MakeTable:
End Sub
' Erstellt Datenbank
Public Sub CreateDB()
On Error GoTo Err_CreateDB
' Datenbank löschen
Call DBModule.KillDB
Dim ws As DAO.Workspace
Dim db As DAO.Database
Dim rel As DAO.Relation
Dim fld As DAO.Field
Dim sTmp() As String
' Datenbank anlegen
Set ws = DAO.DBEngine.Workspaces(0)
Set db = ws.CreateDatabase(App.Path & "\" & ConfigModule.DBFileName, _
DAO.dbLangGeneral & ";pwd=123", _
DAO.dbVersion30 + DAO.dbEncrypt)
' Tabelle user (Benutzer) anlegen
ReDim sTmp(4)
sTmp(0) = "usr_id;" & DAO.dbText & ";255;PK"
sTmp(1) = "usr_pw;" & DAO.dbText & ";255"
sTmp(2) = "usr_sex;" & DAO.dbText & ";255"
sTmp(3) = "usr_name_l;" & DAO.dbText & ";255"
sTmp(4) = "usr_name_f;" & DAO.dbText & ";255"
Call MakeTable(db, "user", sTmp)
Erase sTmp
' Tabelle book (Bücher) anlegen
ReDim sTmp(4)
sTmp(0) = "bok_id;" & DAO.dbText & ";255;PK"
sTmp(1) = "bok_title_1;" & DAO.dbText & ";255"
sTmp(2) = "bok_title_2;" & DAO.dbText & ";255"
sTmp(3) = "bok_ath_id;" & DAO.dbText & ";255;IND"
sTmp(4) = "bok_vlg_id;" & DAO.dbText & ";255;IND"
Call MakeTable(db, "book", sTmp)
Erase sTmp
' Tabelle author (Autoren) anlegen
ReDim sTmp(2)
sTmp(0) = "ath_id;" & DAO.dbText & ";255;PK"
sTmp(1) = "ath_name_l;" & DAO.dbText & ";255"
sTmp(2) = "ath_name_f;" & DAO.dbText & ";255"
Call MakeTable(db, "author", sTmp)
Erase sTmp
' Tabelle verlag (Verlag) anlegen
ReDim sTmp(2)
sTmp(0) = "vlg_id;" & DAO.dbText & ";255;PK"
sTmp(1) = "vlg_name;" & DAO.dbText & ";255"
Call MakeTable(db, "verlag", sTmp)
Erase sTmp
' Verknüpfung von "book" und "author"
Set rel = db.CreateRelation("ConnBokAth", "book", "author")
Set fld = rel.CreateField("ath_id")
fld.ForeignName = "bok_ath_id"
rel.Attributes = dbRelationUpdateCascade + dbRelationDeleteCascade
rel.Fields.Append fld
db.Relations.Append rel
Set fld = Nothing
Set rel = Nothing
'
' ' Verknüpfung von "book" und "verlag"
' Set rel = db.CreateRelation("ConnBokVlg", "book", "verlag")
' Set fld = rel.CreateField("vlg_id")
' rel.Attributes = dbRelationUpdateCascade + dbRelationDeleteCascade
' fld.ForeignName = "bok_vlg_id"
' rel.Fields.Append fld
' db.Relations.Append rel
' Set fld = Nothing
' Set rel = Nothing
db.Close
Exit Sub
Err_CreateDB:
End Sub |