Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 2/2007.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Stellen Sie komplexe m:n-Beziehungen in Haupt- und Unterformularen dar.

Techniken

Formulare, Datenmodellierung, VBA

Voraussetzungen

Access 2000 und höher

Beispieldatei

BeziehungenInFormularen.mdb

Shortlink

452

m:n-Beziehungen im Haupt- und Unterformular

André Minhorst, Duisburg

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 (s. Abb. 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

Abb. 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 Abb. 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

Abb. 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 Abb. 3 aus. Damit es später im Hauptformular als Datenblatt angezeigt wird, stellen Sie noch die Eigenschaft Standardansicht auf Datenblatt ein.

pic003.tif

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.