[gelöst] Anzeigen von Elternnamen im Subformular

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

eve
**
Beiträge: 45
Registriert: Mo, 15.06.2009 22:17

[gelöst] Anzeigen von Elternnamen im Subformular

Beitrag von eve »

Hallo,

Ich versuche derzeit von MS Access auf OOo Base umzusteigen und bin bei meinem ersten Projekt auch gleich auf ein Problem gestoßen zu dem ich bis jetzt (trotz 2 Tage Google-Recherche) noch keine Lösung gefunden habe.

Ich versuche Familiendaten und Verwandschaftsverhältnisse zu erfassen. Dazu habe ich zunächst zwei Tabellen erstellt:
Tabelle 1: Personen (Personen ID, Name, FamilienID)
Tabelle 2: Familie (FamilienID, VaterID, MutterID)

Tabelle 2 dient dazu, jeder FamilienID die PersonenID von Vater und Mutter zuzuordnen.
Jetzt möchte ich gerne ein Formular erstellen, das mir zu jeder Person den Vater und die Mutter ausgibt. Ich schaffe es, daß mir im Subformular die PersonenID (bzw. hier VaterID und MutterID) von Vater und Mutter angezeigt wird. Jedoch würde ich gerne auch die Namen der Eltern, die ja auch als Personen in der Tabelle 1 gelistet sind, angezeigt haben. Das Subformular müsste sich also die Namen wieder aus Tabelle 1 holen. Gibt es irgendeine Möglichkeit, das zu realisieren?
Zuletzt geändert von eve am Fr, 26.06.2009 23:25, insgesamt 1-mal geändert.
absti
***
Beiträge: 91
Registriert: Fr, 22.04.2005 16:53

Re: Anzeigen von Elternnamen im Subformular

Beitrag von absti »

Also ich würde ja die Datenbank anders aufbauen. Nur eine Tabelle:

[PersonenID; Name; FamilienID; VaterID; MutterID]

Dann sollte über einen Vergleich PersonenID=VaterID? der Vater gefunden werden können.
eve
**
Beiträge: 45
Registriert: Mo, 15.06.2009 22:17

Re: Anzeigen von Elternnamen im Subformular

Beitrag von eve »

Da bei der Familie später unter anderem auch das Eheschließungsdatum und -ort eingegeben werden sollen, geht das leider nicht (das hatte ich nur hier zur besseren Übersichtlichkeit nicht angegeben, mein Fehler). Dann wären die Ehedaten der Eltern ja bei den Kindern eingetragen. Die Daten müssen also in einer extra Tabelle erfasst werden.
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Anzeigen von Elternnamen im Subformular

Beitrag von Barlee »

Hallo eve,

dann probiere, die Abfrage in folgender Art aufzubauen

Code: Alles auswählen

SELECT 
b.FamilienID, 
b.VaterID, 
(SELECT a.Name FROM Personen a WHERE a.PersonenID = b.VaterID) as Name_Vater,
b.MutterID 
(SELECT a.Name FROM Personen a WHERE a.PersonenID = b.MutterID) as Name_Mutter
FROM Familie b
Gruß Barlee
eve
**
Beiträge: 45
Registriert: Mo, 15.06.2009 22:17

Re: Anzeigen von Elternnamen im Subformular

Beitrag von eve »

Hallo Barlee,

Was ich auch probiere, es funktioniert leider nicht (Ich habe sogar meine Tabellen in a und b umbenannt, damit es auch wirklich genau übereinstimmt). Ich bekomme immer nur die Fehlermeldung:
"Die Dateninhalte konnten nicht geladen werden."
"SQL-Status: S0002 Fehler-Code: -22"

Ich habe auch schon versucht nach dieser Meldung zu googlen, aber leider keine brauchbare Erklärung für diese Fehlermeldung gefunden. Worauf könnte dieser Fehler zurückzuführen sein?

Gruß,
eve
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Anzeigen von Elternnamen im Subformular

Beitrag von Barlee »

Hi Eve,
(Ich habe sogar meine Tabellen in a und b umbenannt,
Stop! Umbenennen musst Du nichts. Man vergibt lediglich für bestehende Tabellen einen Aliasnamen, um darauf zurückzugreifen. Beispiel: Für die Tabelle "Personen" wird der Alias "a"vergeben. Über "a" kann man dann auf "Personen" referenzieren.
Um den Fehler in Deinem Fall zu lokalisieren, nenne mir bitte:
- die Namen der beteiligten Tabellen
- die Abfrage (den Code) der zu dem Fehler führt

Gruß Barlee
eve
**
Beiträge: 45
Registriert: Mo, 15.06.2009 22:17

Re: Anzeigen von Elternnamen im Subformular

Beitrag von eve »

Hallo,

Nach vielen Stunden basteln und einlesen in SQL funktioniert es jetzt! :D

Code: Alles auswählen

SELECT 
"b"."FamilienID", 
"b"."VaterID", 
( SELECT "a"."Name" FROM "a" WHERE "a"."PersonenID" = "b"."VaterID" ) AS "Name_Vater", 
"b"."MutterID", 
( SELECT "a"."Name" FROM "a" WHERE "a"."PersonenID" = "b"."MutterID" ) AS "Name_Mutter" 
FROM "b"
Sieht so aus als ob ich hier doch noch etwas SQL lerne (bis vor ein paar Tagen hatte ich noch absolut keine Ahnung von SQL). :wink:

Vielen Dank für die Hilfe, Barlee.

Jetzt muß ich es nur noch schaffen, dass die Abfrage die FamilienID aus dem ElternID (was ja identisch ist) übernimmt. Für einen Schubs in die richtige Richtung wäre ich auch hier dankbar

Gruß,
eve
eve
**
Beiträge: 45
Registriert: Mo, 15.06.2009 22:17

Re: Anzeigen von Elternnamen im Subformular

Beitrag von eve »

Hallo Barlee,

da habe ich ja fast zeitgleich mit dir geposted. Und natürlich habe ich da auch gleich wieder eine Frage:
Stop! Umbenennen musst Du nichts. Man vergibt lediglich für bestehende Tabellen einen Aliasnamen, um darauf zurückzugreifen. Beispiel: Für die Tabelle "Personen" wird der Alias "a"vergeben. Über "a" kann man dann auf "Personen" referenzieren.
Was ist da mit "über a kann man dann auf Personen referenzieren" gemeint?

Gruß,
eve
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Anzeigen von Elternnamen im Subformular

Beitrag von Barlee »

Hallo Eve,

kannst Du da ein Beispiel bringen? Im Moment stehe ich da auf dem Schlauch. Die FamilienID ist doch bereits Teil Deiner Abfrage... ?!

Gruß Barlee
eve
**
Beiträge: 45
Registriert: Mo, 15.06.2009 22:17

Re: Anzeigen von Elternnamen im Subformular

Beitrag von eve »

Hallo Barlee,

Tabelle 1: Personen
PersonenID -- Name -- ElternID
1 -- Hans Meier -- 1
2 -- Paul Meier -- 1
3 -- Johann Meier -- 2
4 -- Lieschen Müller -- 3
5 -- Ernst Müller --
6 -- Elisabeth Bauer --

Tabelle 2: Familie
FamilienID -- VaterID -- MutterID
1 -- 3 -- 4
2 -- --
3 -- 5 -- 6

Die ElternID in Tabelle 1 (bzw. FamilienID in Tabelle 2) dient dazu, jeder Person die Vater-Mutter-Kombination aus Tabelle 2 zuzuordnen.

Das Formular, das ich jetzt erstellen möchte soll im Hauptteil nun zu jeder gewünschten Person die Personendaten aus Tabelle 1 ausgeben (da kommt dann im Laufe der Zeit noch Geburtsdatum, etc. dazu). Im Subformular sollen die Namen der Eltern angegeben werden.
Das Subformular soll jetzt also die FamilienID (bzw. ElternID) aus dem Hauptformular übernehmen und mit dieser ID (die ja auch Bestandteil der Tabelle 2 ist) dann die Elternnamen ausgeben. Die Namensausgabe funktioniert ja jetzt. Aber woher weiß das Subformular für welche FamilienID es die Daten (bzw. Namen) ausgeben soll?

Die Ausgabe soll also in etwa so sein:
PersonenID-- Name -- Vater -- Mutter
1 -- Hans Meier -- Johann Meier -- Lieschen Müller
2 -- Paul Meier -- Johann Meier -- Lieschen Müller
3 -- Johann Meier -- --
4 -- Lieschen Müller -- Ernst Müller -- Elisabeth Bauer

Ich habe vor auf die selbe Weise auch noch die Kinder zu suchen und auszugeben. Ich nehme an die SQL-Abfrage ist im Prinzip genauso aufgebaut, wie die Suche nach den Eltern. Jeder hat zwar nur ein Elternpaar, da es aber für jeden eine unterschiedliche Anzahl Kinder gibt, muß ich das über ein Subformular erledigen.

Gruß,
eve
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Anzeigen von Elternnamen im Subformular

Beitrag von Barlee »

Hallo eve,
Was ist da mit "über a kann man dann auf Personen referenzieren" gemeint?
Einfaches Beispiel:
Du hast zwei Tabellen. In beiden kommt die Spalte "Name" vor. Fragst Du nun ab

Code: Alles auswählen

SELECT PersonenID, Name FROM Tabelle1, Tabelle2 WHERE ...
stellt sich zwangsläufig die Frage, welche Spalte "Name" Du meinst. Die aus Tabelle1 oder aus Tabelle2.
Vergibst Du nun Aliase für die Tabellen, also z.B.

Code: Alles auswählen

SELECT b.PersonenID, a.Name FROM Tabelle1 a, Tabelle2 b WHERE ...
kannst Du über diesen Alias Bezug auf die jeweilige Tabelle nehmen. Im Beispiel bedeutet das, dass Du die "PersonenID" aus Tabelle2 und die Spalte "Name" aus Tabelle1 abfragen willst. Verstanden?

Und nun zu Deiner Abfrage. Du musst (bzw. kannst) sie ganz ähnlich wie die bereits von Dir genutzte aufbauen. Passe ggf. die Spaltenbezeichner an:

Code: Alles auswählen

SELECT 
"a"."Name" AS "Name", 
(SELECT "Name" FROM "Personen"  WHERE "PersonenID" = "d"."VaterID") as "Vater",
(SELECT "Name" FROM "Personen"  WHERE "PersonenID" = "d"."MutterID") as "Mutter"
FROM "Personen" "a", "Familie" "d"
WHERE "a"."FamilienID" = "d"."FamilienID"
Gruß Barlee
eve
**
Beiträge: 45
Registriert: Mo, 15.06.2009 22:17

Re: Anzeigen von Elternnamen im Subformular

Beitrag von eve »

Hallo Barlee,
Vergibst Du nun Aliase für die Tabellen, … kannst Du über diesen Alias Bezug auf die jeweilige Tabelle nehmen. Im Beispiel bedeutet das, dass Du die "PersonenID" aus Tabelle2 und die Spalte "Name" aus Tabelle1 abfragen willst. Verstanden?
Ich denke schon, aber wo wird definiert, welche Tabelle welchen Alias bekommt? Die erste Abfrage hatte nämlich erst funktioniert, als ich statt „FROM Familie b“ nur „FROM b“ geschrieben habe.

Das Formular funktioniert übrigens einwandfrei. Vielen Dank für die ausführliche Hilfe! (dicker Blumenstrauß :D )

Gruß eve
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Anzeigen von Elternnamen im Subformular

Beitrag von Barlee »

Hallo eve,

gern geschehen!
aber wo wird definiert, welche Tabelle welchen Alias bekommt?
Das definierst Du selbst:

Code: Alles auswählen

SELECT b.PersonenID, a.Name FROM Tabelle1 a, Tabelle2 b WHERE ...
In diesem Beispiel bedeutet "Tabelle1 a", dass Du für die Tabelle mit dem Namen "Tabelle1" den Alias "a" vergibst. Für "Tabelle2" vergibst Du "b".
Die erste Abfrage hatte nämlich erst funktioniert, als ich statt „FROM Familie b“ nur „FROM b“ geschrieben habe.
Das hat damit zu tun, dass Du ja Deine Tabellennamen geändert hattest. Du hast ja selbst geschrieben:
Ich habe sogar meine Tabellen in a und b umbenannt
"FROM Familie b" konnte nicht mehr funktionieren, weil es die Tabelle mit dem Namen "Familie" nicht mehr gab.

Gruß Barlee
eve
**
Beiträge: 45
Registriert: Mo, 15.06.2009 22:17

Re: Anzeigen von Elternnamen im Subformular

Beitrag von eve »

Hallo Barlee,

Jetzt ist soweit alles klar.

Ich habe mittlerweile auch herausgefunden warum der ursprüngliche Code eine Fehlermeldung gebracht hatte. In der Zeile

Code: Alles auswählen

b.MutterID
(SELECT a.Name FROM Personen a WHERE a.PersonenID = b.MutterID) as Name_Mutter
fehlte das Komma nach "b. MutterID". Bei meiner Änderung der Tabellenamen habe ich das dann unbewußt im Code wieder eingefügt, daher hat es dann funktioniert. Jetzt geht es auch mit den ursprünglichen Namen. Ich denke ich werde in nächster Zeit noch ziemlich damit beschäftigt sein mich etwas mehr in SQL einzuarbeiten.

Gruß eve
Antworten