m:n-Beziehungen im Haupt- und Unterformular

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

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

Falls notwendig, setzen Sie noch das Format der Währungs- und Prozentfelder auf die Werte Währung beziehungsweise Prozentzahl.

Hauptformular zum Anzeigen der Bestelldaten

Nun erstellen Sie zunächst das Hauptformular. Es verwendet die Tabelle tblBestellungen als Datenherkunft. Ziehen Sie die gewünschten Felder in den Detailbereich. Im vorliegenden Fall sind dies die Felder BestellungID, KundeID, Bestelldatum, Lieferdatum und Versanddatum. Auf die übrigen Felder können Sie der Einfachheit halber verzichten.

Fügen Sie nun das Unterformular hinzu, indem Sie es vom Datenbankfenster direkt in den Entwurf des Hauptformulars hineinziehen. Access sollte die zu verknüpfenden Felder automatisch erkennen und wie in Bild 4 anlegen.

pic004.tif

Bild 4: Haupt- und Unterformular mit Verknüpfungseigenschaften

Falls nicht, holen Sie dies von Hand nach, indem Sie auf eine der beiden Eigenschaften Verknüpfen von oder Verknüpfen nach und dann auf die erscheinende Schaltfläche klicken. Im folgenden Dialog können Sie die zu verknüpfenden Felder bequem auswählen.

Wenn Sie das Hauptformular dann öffnen, haben Sie schon einen Teil der Arbeit geschafft: Sie können durch die Bestellungen blättern und das Unterformular zeigt die zur aktuellen Bestellung passenden Artikel an.

Leider können Sie so nur mit viel Handarbeit neue Rechnungspositionen anlegen oder den Artikel einer Position ändern – im Unterformular werden jeweils nur der Artikelname und die Liefereinheit angepasst.

Alle anderen Felder behalten ihren Wert oder – falls Sie eine neue Position anlegen – sind leer.

Das ändern Sie im nächsten Schritt. Wie oben erwähnt, speichern Sie etwa die Felder Preis und Mehrwertsteuer in der Verknüpfungstabelle, damit diese bei änderungen der zugrunde liegenden Artikeldaten nicht ebenfalls geändert werden.

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