m:n-Beziehungen im Haupt- und Unterformular

Das Bestellungen-Formular der Nordwind-Datenbank wird oft als Beispiel für die Darstellung komplexer m:n-Beziehungen in Formularen angeführt. Dieses nachzubauen ist allerdings schwieriger, als man denkt – vor allem, wenn man nicht richtig im Thema steckt. Access im Unternehmen zeigt alle Tricks, die Sie zum Erstellen und Anpassen solcher Formulare benötigen.

Grundlage für das in diesem Beitrag beschriebene Formular sind die Tabellen der Südsturm-Datenbank – dabei handelt es sich um eine angepasste Version der Nordwind-Datenbank (Shortlink 411).

Wichtig sind dabei vor allem die Tabellen tblBestellungen, tblBestelldetails und tblArtikel (siehe Bild 1). Das Hauptformular namens frmBestellungen soll die Details zur jeweiligen Bestellung wie Bestellnummer, Kunde, Bestelldatum oder Versanddatum anzeigen. Das Unterformular sfmBestellungen dient zur Eingabe und Anzeige der Bestellpositionen. Es soll jeweils die zum aktuell im Hauptformular angezeigten Bestellungsdatensatz passenden Bestellpositionen darstellen.

pic001.tif

Bild 1: Die Daten dieser Tabellen sollen im Formular und Unterformular angezeigt werden.

Anzeigen der Positionen im Unterformular

Als Datenherkunft des Unterformulars dient eine Abfrage, die auf den beiden Tabellen tblBestelldetails und tblArtikel basiert. Die Felder Einzelpreis und Mehrwertsteuer kommen in beiden Tabellen vor. Hintergrund ist, dass die Felder in der Tabelle tblArtikel prinzipiell die Standardwerte für eine Bestellung sind.

Der Einzelpreis kann sich dabei ebenso wie die Mehrwertsteuer ändern. Diese änderungen dürfen sich aber nicht auf bereits gespeicherte Bestellungen auswirken, sondern nur auf zukünftige. Daher speichert die Tabelle mit den Bestelldetails diese Daten nochmals. Einige Informationen wie der Rabatt und die Anzahl hängen von der Bestellung ab und werden nur in der Tabelle tblBestelldetails gespeichert.

Warum nun nicht auch noch Informationen wie die Liefereinheit in der Tabelle mit den Bestelldetails speichern Nun, es können sich zwar der Preis und die Mehrwertsteuer eines Artikels ändern, aber ein Wechsel der Liefereinheiten etwa von 20 Flaschen auf 24 Dosen verlangt doch eher nach dem Anlegen eines neuen Artikels.

Der Entwurf der Abfrage sieht wie in Bild 2 aus. Zusätzlich zu den Feldern der beiden Tabellen enthält die Abfrage ein drittes Feld, das den Endpreis für die jeweilige Position ermittelt. Dieses hat den folgenden Inhalt:

pic002.tif

Bild 2: Datenherkunft des Unterformulars zur Anzeige der Bestellpositionen

Endpreis: [tblBestelldetails].[Einzelpreis]*
[Anzahl]*(1-[Rabatt])*
(1+[tblBestelldetails].[Mehrwertsteuer])

Wozu brauchen Sie nun die einzelnen Felder Die meisten zeigt das Unterformular in der Datenblattansicht an. Sie müssen die Felder nur in der gewünschten Reihenfolge in den Detailbereich des Formularentwurfs ziehen.

Lediglich das Feld BestellungID soll dort nicht erscheinen, sondern nur die Beziehung zwischen den im Haupt- und Unterformular angezeigten Datensätzen herstellen. Sie könnten es ebenfalls in den Entwurf ziehen und es anschließend ausblenden, aber das ist gar nicht nötig: Access kann alle in der Datenherkunft verwendeten Felder für die Eigenschaft Verknüpfen von verwenden.

Eine besondere Rolle kommt dem Feld ArtikelID zu. Wenn Sie das Fremdschlüsselfeld der Verknüpfungstabelle als Nachschlagefeld eingerichtet haben, können Sie damit direkt den Artikel für die aktuelle Position auswählen. Falls nicht, erledigen Sie dies in folgenden Schritten:

  • Wandeln Sie das Textfeld in ein Kombinationsfeld um (Kontextmenüeintrag ändern zu/Kombinationsfeld).
  • Stellen Sie die Datensatzherkunft auf die Abfrage SELECT [ArtikelID], Artikelname FROM tblArtikel ORDER BY [Artikelname]; ein.
  • Weisen Sie den Eigenschaften Spaltenanzahl und Spaltenbreiten die Werte 2 und 0cm zu.

Fertig! Sie können nun den Artikel für den aktuellen Datensatz festlegen. Die Felder, die direkt aus der Tabelle tblArtikel stammen, werden dabei automatisch angepasst.

Summe der Bestellpositionen

Das Hauptformular soll die Summe der im Unterformular angezeigten Positionen anzeigen. Diese berechnen Sie am einfachsten direkt im Unterformular, indem Sie dort im Formularfuß ein Textfeld mit der Bezeichnung txtGesamtsumme und dem Steuerelementinhalt =Summe(Endpreis) einfügen. Das Unterformular sieht nun im Entwurf wie in Bild 3 aus. Damit es später im Hauptformular als Datenblatt angezeigt wird, stellen Sie noch die Eigenschaft Standardansicht auf Datenblatt ein.

pic003.tif

Bild 3: Das Unterformular in der Entwurfsansicht

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

TestzugangOder bist Du bereits Abonnent? Dann logge Dich gleich hier ein. Die Zugangsdaten findest Du entweder in der aktuellen Print-Ausgabe auf Seite U2 oder beim Online-Abo in der E-Mail, die Du als Abonnent regelmäßig erhältst:

Schreibe einen Kommentar