window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-TCJTE9L38H');

1:1-Beziehungen in Formularen

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

1:1-Beziehungen können für eine ganze Reihe von Anwendungzwecken sinnvoll sein. Sie können damit beispielsweise die Liefer- und/oder die Rechnungsanschrift für einen Kundendatensatz in eigenen Tabellen speichern, um so verschiedene Ziele zu erreichen: beispielsweise die Anzahl der Felder je Tabelle zu verringern, verschiedene Teile der Daten mit unterschiedlichen Berechtigungen versehen und so weiter. In diesem Artikel schauen wir uns an, wie Sie die Formular zur Darstellung einer 1:1-Beziehung gestalten können.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1806_11BeziehungInFormularen.accdb.

Voraussetzungen

Grundlage für diesen Artikel ist ein weiterer Artikel namens 1:1-Beziehungen. Hier erfahren Sie, wie Sie eine 1:1-Beziehungen erstellen. Kurz zusammengefasst: Sie legen eine Tabelle etwa namens tblKunden an, welche die Basisdaten des Kunden speichert.

Weitere Tabellen wie tblKundenLieferadresse und tblKundenRechnungsadresse enthalten jeweils ein mit einem eindeutigen Index versehenes Fremdschlüsselfeld, über das eine Beziehung zur Tabelle tblKunden hergestellt wird. Wichtig dabei ist, dass Sie die Beziehung im Beziehungen-Fenster anlegen, indem Sie das Primärschlüsselfeld der Tabelle tblKunden auf das Fremdschlüsselfeld der Tabellen tblKundenLieferadressen und tblKundenRechnungsadressen ziehen.

Vorbereitung

Als Vorbereitung legen wir eine Abfrage an, welche die drei Tabellen tblKunden, tblKundenLieferadressen und tblKundenRechnungsadressen enthält. Sie weist im Entwurfsraster alle Felder der Tabelle tblKunden sowie alle Felder der beiden übrigen Tabellen mit Ausnahme des jeweiligen Primärschlüssel- und Fremdschlüsselfeldes auf (siehe Bild 1). Die Abfrage speichern wir unter dem Namen qryKundenLieferadressenRechnungsadressen.

Entwurf der Abfrage qryKundenLieferadressenRechnungsadressen

Bild 1: Entwurf der Abfrage qryKundenLieferadressenRechnungsadressen

Anschließend nehmen wir noch eine wichtige änderung vor. Wenn wir die Abfrage so nutzen, wie Sie aktuell konfiguriert ist, liefert diese nur solche Datensätze der Tabelle tblKunden, für die es sowohl in der Tabelle tblKundenLieferadressen als auch in der Tabelle tblKundenRechnungsadressen einen verknüpften Datensatz gibt.

Daher müssen wir noch die Verknüpfungseigenschaften für die beiden Verknüpfungen einstellen. Das erledigen wir, indem wir doppelt auf einen der Verknüpfungspfeile klicken. Dies öffnet den Dialog aus Bild 2. Hier wählen wir die folgende Option aus:

Verknüpfungseigenschaften der 1:1-Beziehung zwischen den Tabellen tblKunden und tblKundenRechnungsadressen

Bild 2: Verknüpfungseigenschaften der 1:1-Beziehung zwischen den Tabellen tblKunden und tblKundenRechnungsadressen

Beinhaltet ALLE Datensätze aus 'tblKunden' und nur die Datensätze aus 'tblKundenRechnungsadressen', bei denen die Inhalte der verknüpften Felder beider Tabellen gleich sind.

Die gleiche Einstellung nehmen wir auch für die Beziehung zwischen den Tabellen tblKunden und tblKundenLieferadressen vor. Danach sieht der obere Teil des Abfrageentwurfs wie in Bild 3 aus. Wenn jetzt nur ein Eintrag in der Tabelle tblKunden vorliegt, aber keiner oder nur einer in den beiden übrigen Tabellen, werden die Felder der entsprechenden Tabelle im Abfrageergebnis leer angezeigt.

Abfrage mit angepassten Verknüpfungseigenschaften

Bild 3: Abfrage mit angepassten Verknüpfungseigenschaften

Fehler beim Ausführen der Abfrage

Das war zumindest die Theorie, denn in der Tat erscheint beim Wechsel in die Datenblattansicht der Abfrage die folgende Fehlermeldung:

Die SQL-Anweisung konnte nicht ausgeführt werden, da sie mehrdeutige äußere Verknüpfungen enthält. Damit eine der VErknüpüfungen zuerst ausgeführt wird, müssen Sie eine separate Abfrage erstellen, die die erste Verknüpfung ausführt, und dann diese Abfrage in die SQL-Anweisung einschließen.

Das heißt also: Wir müssen erst eine Abfrage erstellen, welche die Daten der Tabelle tblKunden mit einer der beiden per 1:1-Beziehung verknüpften Tabellen liefert und diese dann in einer zweiten Abfrage mit der anderen verknüpften Tabelle zusammenführen.

Die erste Abfrage ist schnell erstellt. Dazu löschen Sie einfach die Tabelle tblKundenRechnungsadressen aus der Abfrage qryKundenLieferadressenRechnungsadressen und ändern den Namen auf qryKundenLieferadressen. Der Entwurf sieht dann wie in Bild 4 aus. Der Wechsel in die Datenblattansicht birgt die nächste überraschung: Auch hier taucht diese Fehlermeldung auf.

Erster Teil der Abfrage mit zwei 1:1-Beziehungen

Bild 4: Erster Teil der Abfrage mit zwei 1:1-Beziehungen

Können wir die Daten der 1:1-Beziehung also gar nicht so darstellen, dass nur die Daten einer Tabelle ausgegeben werden, wenn es in der zweiten Tabelle keine verknüpften Daten gibt Das wäre ungünstig, weil wir ja dann nur neue Datensätze in einem Formular auf Basis dieser Abfrage anlegen könnten. Wenn wir hier nur die Daten zur Tabelle tblKunden hinzufügen und kein Feld der Tabelle tblKundenLieferadressen füllen, können wir dies auch nachträglich nicht mehr erledigen, weil dieser Datensatz der Tabelle tblKunden schlicht nicht mehr angezeigt werden kann – zumindest nicht in einer Abfrage zusammen mit der Tabelle tblKundenLieferadressen.

Formular zur Anzeige der Daten

Nun haben wir durch das obige Problem zwei Möglichkeiten: Wir verwenden eine Version der Abfrage, welche die Daten der drei Tabellen zusammenführt, als Datensatzquelle des Formulars und sorgen gleich beim Anlegen der ersten Werte für die Felder der Tabelle tblKunden dafür, dass jeweils ein Datensatz in den Tabellen tblKundenLieferadressen und tblKundenRechnungsadressen erstellt wird.

Dann hätten wir allerdings nicht den Vorteil, dass nur für solche Datensätze, die tatsächlich eine Lieferadresse und/oder Rechnungsadresse erhalten, auch ein Datensatz in einer der Tabellen tblKundenLieferadressen und/oder tblKundenRechnungsadressen angelegt wird. Sprich: Wir könnten auch gleich eine einzige Tabelle anlegen, die wieder alle Felder des Kunden inklusive Rechnungsadresse und Lieferadresse enthält.

Die Alternative ist, mit zwei Unterformularen zu arbeiten, welche die Daten der Tabellen tblKundenRechnungsadressen und tblKundenLieferandressen enthalten. Wir schauen uns einfach beide Lösungen an.

Formular mit automatischen Datensätzen

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar