Access; Stammbaum; Navigation

Willkommen!

Wenn du im Nexave-Forum mitmachen möchtest, schreib an community@nexave.de. Wir haben die Registrierungsfunktion in unserem Diskussionsforum nämlich deaktiviert, weil sich praktisch nur noch Spammer und Werbebots registriert haben. Per E-Mail sind wir dir gern behilflich, einen Account anzulegen.
  • Hallo,


    ich versuche mit Access einen Familienstammbaum zu erstellten.
    Ich habe 3 Tabellen, in der ersten werden Personen angelegt, inder zweiten Verheiratungen zwischen Personen angelegt und in der dritten die Eltern_Kind Beziehungen angelegt.
    Tabelle Personen mit den Feldern ID, Name, Vorname, Geburtsort, Geburtsdatum
    Tabelle Heirat mit den Feldern ID, Ehemann (Personen.ID), Ehefrau (Personen.ID), Datum und Ort
    Tabelle Eltern_Kind mit den Feldern ID, Kind (Personen.ID), Vater (Personen.ID), und Mutter (Personen.ID)


    Nun möchte ich in einem Formular, in dem alle Daten zu einer Person angezeigt werden und zusätzlich in einem Unterformular die Eltern angezeigt werden auf den Datensatz des Vaters springen.


    Kann mir da jemand auf die Sprünge helfen? Ich probiere schon seit Wochen und komme auf keine grünen Zweig. :verwirrt: ;(


    Gruß Snoopy

  • Hallo snoopy,


    wenn ich Dich richtig verstehe, willst Du ein Formular, das in einem Unterformular die Daten des Vaters der Hauptperson anzeigt.


    Mein Weg wäre:
    - in den Eigenschaften des Unterformulares die Datenquelle auf eine Query mit folgendem SQL-String setzen:
    "SELECT * FROM PRESONEN WHERE ID = [Forms]![DEIN_HAUPFORMULAR]![FELD_MIT_VATER_ID];"
    - jetzt kannst Du wie im Hauptformular Textfelder zu den Datenfeldern Name, Vorname, Geburtsort,... anlegen
    - wichtig ist, dass Du nach Auswahl einer neuen Haupt_Personen_ID im Hauptformular ein Requery des Unterformulares ankickst!


    Wahrscheinlich funktioniert es auch irgendwie mittels der Access-eignenen Master-Funktion für Unterformulare - damit kenne ich mich aber gar nicht aus...


    Bei Fragen zu o.g. Weg helfe ich Dir gerne weiter.


    Viele Grüße,
    Seppel

  • Hi Seppel,


    ein Formular, Anzeige einer Person, mit Unterformular, Anzeige der Eltern der Person, habe ich schon.


    Wenn man im Stammbaum aber navigieren will, also jetzt von der Person auf dessen Vater, sodaß Vater im Hauptformular und Großvater und Großmutter im Unerformular angezeigt werden, navigieren will, dann fehlen mir die nötigen Infos.


    Schon mal Danke.

  • Hallo snoopy,
    ... mit Access kenne ich mich leider auch nicht besonders aus.
    Ich weiß aber, daß eine gesteigerte Anzahl der Tabellen den Umgang mit Access deutlich erschweren kann.


    Daher meine Frage:
    Warum hast Du die Extratabelle Eltern_Kind angelegt?
    Die Daten "Vater (Person_ID)" und "Mutter (Person_ID)" hätten doch auch in der Tabelle Person mit integriert werden können. Geburtsdatum und -Ort sind eh schon drin.
    Eine Person hat immer eine/n und auch nur genau eine/n Mutter und Vater. Wenn diese nicht bekannt sind, wird dort z.B. die ID "0" für eine Person "Unbekannt" hinterlegt.


    Die Tabelle Heirat ist dagegen genau richtig, da jede Person einmal oder auch mehrfach heiraten kann, aber nicht muß. (n-n-Beziehung)


    Vielleicht kannst Du bei einer Reduzierung auf 2 Tabellen (Person und Heirat) die Formular- oder Berichterstellung in Access vereinfachen.


    Gruß
    Jörg

    ========================================================
    PalmOS => Vx | T3 | Treo 680 ......=> andere <=...... Treo 750v | Treo Pro <= WM 6

  • Hallo jrahe,


    wenn, jetzt ein Vater mehrere Kinder hat und vielleicht auch noch mit verschiedenen Frauen und ich alle Kinder einer Person anzeigen will, dann ist es mit einer Extra-Tabelle für die Eltern_Kind-Beziehung einfacher.


    Gruß Snoopy

  • Hallo snopy,
    ... eine SELECT Abfrage nach alle Personen, bei denen als Vater/Mutter die Person_ID der Person eingetragen ist, von der wir die Kinder suchen.


    Treffermenge: ALLE Kinder dieser einen Person, unabhängig davon, wer der jeweilige zweite Elternteil der gefundenen Kinder war.


    Ich hätte es wohl so gelöst, aber vielleicht sind die von Dir gewünschten Abfragen auf Deine Art einfacher zu lösen.
    Ich wünsche auf jeden Fall noch viel Spaß damit. :thumbup:


    Gruß
    Jörg

  • allo,


    im Prinzip brauchst Du dann eine Funktion, die im Hauptformular die Daten zu VATER_ID anzeigt bzw. zum Datensatz VATER_ID springt!?


    Wenn Du ein normales Formular hast, in dem Du via "nächster Datensatz", "letzter Datensatz", usw. zwischen den einzelnen Datensätzen Deiner Personen Tabelle hin- und her springen kannst, musst Du im Prinzip nur gezielt die VATER_ID anspringen. Das funktioniert in Access via

    Code
    DoCmd.GotoControl <BEZEICHNUNG DES ID-CONTROLS IN HOCHKOMMAS>
    DoCmd.FindRecord <VATER_ID>


    Anschliessend musst Du noch die Unterformulare via Requery aktualisieren...


    Aufrufen kannst Du die Function GotoControl wie oben beschrieben allerdings nur aus dem Formular, in dem das Control auch liegt. Andernfalls musst Du es über eine öffentl. Funktion dieses Formulares lösen, die Du dann auch von anderen (meist den Unterformularen) aufrufen kannst.


    Viele Grüße,
    Seppel

  • Eine Frage noch:
    Wie komme ich an die Vater_ID?

    entweder direkt - indem Du die Datenquelle für das Hauptformular so erweiterst, dass Du die Verknüpfung zur Eltern_Kind Tabelle mit einbeziehst und dann die Vater_ID einem (evtl. unsichtbaren) Feld ausgibst
    oder indirekt über zwei Zeilen Code:

    Code
    lngKindID = PERSONEN_ID
    lngVaterID = DSelect("VATER", "ELTERN_KIND", "KIND = '" & lngKindID & "'")


    Ich würde letzteren Weg bevorzugen...


    Viele Grüße,
    Seppel

  • Jetzt kommt die Fehlermeldung:


    "Sie haben die Vorhergehende Operation abgebrochen"


    mit folgendem Ausdruck
    lngVaterID = DLookup("[VATER]", "ELTERN_KIND", "[KIND] = [Personen]![ID]")


    oder die Fehlermeldung


    DatenTypen unverträglich


    mit folgendem Ausdruck
    lngKindID = ID
    lngVaterID = DLookup("[VATER]", "ELTERN_KIND", "[KIND] = '" & lngKindID & "'")

  • Jetzt kommt die Fehlermeldung:


    DatenTypen unverträglich


    mit folgendem Ausdruck
    lngKindID = ID
    lngVaterID = DLookup("[VATER]", "ELTERN_KIND", "[KIND] = '" & lngKindID & "'")

    klar. Wieder mein Fehler. Die ' hätten weg gemusst - lngKindID ist ja ne Zahl und kein Text...


    Aber schön, wenn's jetzt tut :)


    Viele Grüße,
    Seppel

  • ...wieder mal die Bestätigung, dass man in diesem Forum wirklich zu (fast) allem eine sinnvolle Antwort bekommt. Nicht nur zu PCs, Palms, Kaffee-Vollautomaten... :thumbup: :thumbup: :love: