Frage von GGHyperQ, 115

Wie kann man in Access 2010 einer Person mehrere Adressen zuordnen?

Immer wenn ich versuche einer Person mehrere Adressen zuzuorden kommt  der Fehler das die änderungen nicht vorgenommen werden kann. Hier ist noch der link zu meiner Datenbank http://workupload.com/file/9PKqDrsm

Antwort
von dieLuka, 85

Hast du eine 1 zu n oder n zu n beziehung zwischen den Tabellen?

Wenn du eine 1 zu 1 beziehung hast dann darf jedem Primärschlüssel aus Tab 1 nur ein Fremdschlüssel aus tab 2 zugeordnet werden.

Kommentar von GGHyperQ ,

Es steht auf 1 zu 1. Wie kann ich es denn umstellen?

Antwort
von wotan38, 56

Du brauchst 2 Tabellen, eine mit Personen und eine mit Adressen. Beide Tabellen haben eine eigene voneinander unabhängige ID. Da jede Adresse zu irgendeiner Person gehört, muss in die Tabelle der Adressen als Fremdschlüssel die ID der Person rein. Dann kannst für eine Person soviele Adressen anlegen wie Du willst.

Stell Dir vor, Du wärst die Datenbank und irgendein GGHyperG hat da Tabellen eingerichtet. Wie würdest Du da die zwei Adressen anlegen und verwalten? Wenn Du das nicht kannst, kann das die Datenbank auch nicht. Wenn Du das kannst, musst Du das der Datenbank mitteilen, wie sie das zu machen hat. Die Datenbank macht nichts von alleine. Man muss minuziös alles festlegen, was sie zu tun hat. Irgendwelche Daten wie Müll in die Datenbank kippen und die Datenbank soll sehen wie sie damit zurecht kommt, geht nicht.

Du hast doch sicher eine Dokumentation, wo das drinsteht, wie eine 1:n Verbindung funktioniert. Wenn nicht, dann besorge Dir dies. Im Internet wird sicher sowas angeboten, auch kostenlos. Wenn Du da was nicht verstehst, kannst immer noch fragen. Aber ohne ein Mindestmaß an Kenntnissen kannst mit einer Datenbank nicht viel anfangen.

Kommentar von GGHyperX ,

Muss man nicht die tbl_Adresse & Bewohner verknüpfen!? Damit man die Zweitadresse in das Unterformular bekommt

Kommentar von GGHyperQ ,

Ich hab es jetzt schon so oft versucht aber es funktioniert einfach nicht.

Kommentar von wotan38 ,

Zunächst muss man die Adressen in die Datenbank rein bekommen. In der Datenbank wird nichts verknüpft, man schafft nur die Voraussetzung zum Verknüpfen, durch das Konzept, wie man die Tabellen aufbaut. Das Konzept muss der künftigen Aufgabe genügen. Das ist wie bei einer Aktenordnung. Wenn die Ablage nicht richtig organisiert ist, findet man seine Unterlagen nicht. Dein Datenbankkonzept entspricht die Aktenordnung. Deine Verarbeitung entspricht dem Zugriff auf Deine Daten.

Die Verknüpfung findet bei der Verarbeitung statt, beim Zugreifen auf die Daten. Man bekommt dann die Daten auf Anforderung verknüpft geliefert. Im Prinzip funktioniert das so: Du liest die Person ein (egal wie). Damit bekommst Du auch die ID dieser Person. Mit dieser ID kannst Du nun alle Adressen einlesen, die als Fremdschlüssel diese ID haben. Sinnigerweise hast dafür vorgesorgt, dass bei jeder Adresse in einer Spalte (muss nicht ein Fremdschlüssel sein, ist hier aber vorteilhaft) die ID der Person gespeichert wurde. Damit hast Du die Adresse der Person zugeordnet und kannst auf die gleiche Weise auch andere Adressen der selben Person zuordnen. So läuft das mit der 1:n - Beziehung. 1 ist die Peson, n ist die Adresse. Wenn Du nun beide Adressen auslesen möchtest, schaut Deine Abfrage so aus:

 
SELECT * FROM pers-tabelle, adr-tabelle
where pers-tabelle.pers-id = adr-tabelle.pers-id
and pers-id = 12345

So bekommst Du die Person mit der pers-id 12345 mit allen Adressen, die hinterlegt wurden. Statt * kannst auch die Datenfelder einzeln angeben, wenn Du sie nicht alle brauchst.

Dazu muss die pers-tabelle wie folgt aufgebaut sein:

pers-id als Primärschlüssel, dann alle Daten dieser Person, die benötigt werden.

Die adr-tabelle sieht dann so aus:

adr-id als Primärschlüssel, pers-id als Fremdschlüssel (oder als gewöhnliche Spalte), dann alle Daten, die für die Adresse benötigt werden (evtl. auch Tel-Nr und Art der Aderesse wie privat oder geschäftlich).

Eine in der pers-tabelle unbekannte pers-id in der Adresse wird, falls man es als Fremdschlüssel eingerichtet hat, bei der Eingabe abgewiesen. Man kann eine Person dann auch nicht löschen, wenn Adressen sich auf sie beziehen oder, je nach Festlegung, werden die Adressen mitgelöscht. Die Datenbank sorgt dann dafür, dass keine Adressen rumgeistern, die nirgendwohin gehören. Auch diesbezügliche Korrekturen werden überwacht und ggf. abgewiesen. Man nennt das referentielle Integrität. Falls Du die Verknüpfung mit JOIN machst (ich mache das mit WHERE), muss die zu verknüpfende Spalte ein Fremdschlüssel sein (glaube ich, ich benutze nie einen JOIN, weil ich in meiner Datenbank mit 57 Tabellen z.T. sehr komplexe Verknüpfungen machen muss. Fremdschlüssel benutze ich dagegen schon, auch mehrteilige im Verbund). 

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten