[Access] Inhalt aus verschiedenen Tabellen an einen Eintrag binden

ElKaputo

Grünschnabel
Hallo,

Ich habe eine Datenbank erstellt, die verschiedene Familien erfassen soll. Also es wird erst eine Person angegeben und der können dann Kinder und Ehepartner hinzugefügt werden.
Dabei gibt es für die erst genannte Person eine Tabelle, für den Ehepartner eine Tabelle und für die Kinder gibt es auch eine eigene Tabelle.

Die Eingabe der Daten geschieht jeweils manuell über Formulare, wobei die Hauptseite die erst genannte Person aufnimmt und dann werden, über jeweils einen Button, die Formulare für den Ehepartner und die Kinder aufgerufen.

Das Ganze funktioniert auch soweit tadellos, allerdings wenn ich einer Person einen Ehepartner oder ein Kind zuorde, werden der Ehepartner und das Kind jeder weiteren Person automatisch zu geordnet.
Da das keinen Sinn ergibt und ich nicht mehr weiterkomme, möchte ich euch bitten mir bei der Lösung zu helfen.

Grüße
Robin
 
Das Ganze funktioniert auch soweit tadellos, allerdings wenn ich einer Person einen Ehepartner oder ein Kind zuorde, werden der Ehepartner und das Kind jeder weiteren Person automatisch zu geordnet.
Diesen Satz verstehe ich nicht so ganz, werde aber mal raten. Du gibst die erste Person ein, schickst das Formular ab und gibst dann den Ehepartner ein. Sobald dieses zweite - und auch alle weiteren - verarbeitet werden und der Eintrag in die DB geschrieben wird, muß die DB ja wissen, zu welcher ersten Person das gehört. Das geht nur über einen eindeutigen Schlüssel, der beim Eintrag der ersten Person angelegt werden muß.

Am einfachsten geht das über ein Integer Feld, das als Primary Key definiert ist und bei dem Auto Increment aktiviert ist. Nach dem Eintragen der ersten Person mußt du die zuletzt eingetragene ID abfragen. Je nachdem, welches Verfahren du nutzt, ist das etwas unterschiedlich. Bei dem empfohlenen MYSQLI heißt der Befehl so:

PHP:
$userid = mysqli_insert_id($mysqli);

Diese ID übernimmst du per hidden input in die folgenden Formulare und schreibst sie mit in die Ehepartner und Kinder Tabellen.
 
@Sprint : Access <> MySQL

@ElKaputo:
Mir scheint dein Datenmodel grundsätzlich falsch zu sein. Sowas gehört alles in eine Tabelle rein. Aber egal.
Ohne deinen Code zu sehen, ist es unmöglich zu sagen, warum da eine Massenzuordnung stattfindet.
 
Kommt auf die Datenbank drauf an. Ist die Familie nur Beigemüse oder geht es um Stammbaum. Das ist eine entscheidende Frage.
Im Zweiten Fall sind Kinder auch wieder Eltern und haben/sind auch Partner.
 
Danke für die Antworten.
Es gibt drei Tabellen, die recht ähnlich sind, allerdings finde ich es umständlich das alles in einer Tabelle unterzubringen.
Es gibt zwei integerfelder, die jeweils unendlich zu 1 mit der ID der kind und Ehepartner Tabelle in Beziehung stehen.
Ich bin davon ausgegangen, dass der wizard, der mir bei der Erstellung helfen sollte, das tut, was er angibt.

Die Familienangehörigen sind nur Beigemüse, das ganze wird kein Stammbaum.
 
Also nur Beigemüse. Dann kann man es so bealassen.

Zurück zum Punkt. Ich kann dir nicht sagen, was falsch läuft. Deine Frage ist im Stil: " Mein Auto geht nicht. Was soll ich tun?"
Entweder du kopierst ein wenig Code und Erklärungen in den Thread oder du erstellst eine Test-DB mit deinem Probloem drin und stellst uns diese zur Verfügung,
 
Hallo,

Im Anhang ist mal eine rudimentäre Darstellung meiner jetzigen Datenbank. Ich hoffe dadurch wird das Problem deutlicher.
 

Anhänge

  • test.zip
    66,2 KB · Aufrufe: 3
Kein Wunder kommen alle Ehepartner bei allen Personen etc. Du hast KEINE Beziehung zwischen den Tabellen.
Ich erweitere mal Kind_Tabelle und Ehepartner_Tabelle jeweils mit dem Feld PID (Nummer Lang). In das wird die ID der Person gespeichert
Für Anton also die 1.

Dann erweitere ich den Formuaraufruf um den Filter auf PID. ZUsätzlich gebe ich die ID als OpenArgs mit, damit bei neuen Datensätzen diese gesetzt werden kann
Visual Basic:
'Bisher
Private Sub Befehl20_Click()
DoCmd.OpenForm "Ehepartner_Formular"
End Sub
'neu
Private Sub Befehl20_Click()
    DoCmd.OpenForm "Ehepartner_Formular", , , "PID=" & Me.ID, , , Me.ID
End Sub

Ich habe jetzt mal nur das Ehepartnerformular angepasst. Das Kinderformular geht analog
Das neue Feld PID habe ich als Textbox hinzugefügt.
Name: txtPID
Feldinhalt (Control Source): PID
Sichtbar (Visible) = Nein

Um jetzt bei einem neuen Ehepartner bereits die richtige PID zu haben, mache ich einen kleinen Trick
Dann auf dem Formular selber den Event beimÖffnen (onOpen) aktiviert und den folgenden Code eingefügt
Visual Basic:
Private Sub Form_Open(Cancel As Integer)
    Me.txtPID.DefaultValue = OpenArgs
End Sub

Dasselbe noch bei den Kindern und dann hast du es schon.
Ich habe meine Änderung mal angehängt.
 

Anhänge

  • test_yaslaw.zip
    82,1 KB · Aufrufe: 1
Hallo,

Ich hatte gedacht, dass die Beziehung, die ich hatte, ausreichen würde, aber das wäre ja auch zu einfach gewesen.
Allerdings habe ich jetzt den Fehler:
Laufzeitfehler '94':
Unzulässige Verwendung von Null

wenn ich versuche einen Ehepartner zu bearbeiten oder hinzuzufügen.

Hatte mir aus dem Netz diese Funktion gesucht, die diesen Fehler eigentlich abfangen soll, allerdings funktioniert der Aufruf nicht wie gewünscht.
Habe diese im Formular über dem Form_Open deklariert und dann im Form_Open aufgerufen, allerdings kommt jetzt der Laufzeitfehler '424', der ein Objekt erwünscht, welches das txtPID Feld anscheinend nicht ist, was ich nicht so ganz verstehe.
Visual Basic:
Public Function FeldInhalt(Feld As Field) As Variant
  If IsNull(Feld.Value) Then
   If Feld.Type = dbInteger Or Feld.Type = dbLong Then
     FeldInhalt = 0
   ElseIf Feld.Type = dbBoolean Then
     FeldInhalt = False
   Else
     FeldInhalt = ""
   End If
  Else
   FeldInhalt = Feld.Value
  End If
End Function

Habe im Anhang mal meine Änderungen mit eingegeben.
 

Anhänge

  • test_yaslaw 2.rar
    54,1 KB · Aufrufe: 0
Zuletzt bearbeitet:

Neue Beiträge

Zurück