vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB & Datenbanken
Relationsproblem DAO 
Autor: burnersk
Datum: 02.06.06 11:22

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
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Relationsproblem DAO880burnersk02.06.06 11:22

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel