Home > Artikel > Ausgabe 10/2012 > Synchrone Unterformulare

Synchrone Unterformulare

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

Es kommt oft vor, dass ein Unterformular Daten anzeigen soll, die mit dem im Hauptformular angezeigten Datensatz in Beziehung stehen. Dies geschieht beispielsweise, wenn das Hauptformular Kunden und das Unterformular die dem Kunden zugeordneten Projekte anzeigt. Es geht jedoch auch noch eine Stufe weiter: Dann soll ein Unterformular Daten in Abhängigkeit vom Hauptformular anzeigen und ein weiteres Daten, die vom aktuellen Datensatz des Unterformulars abhängen. Wie Sie dies bewerkstelligen, zeigt dieser Artikel.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1210_SynchroneUnterformulare.mdb.

Beispieldaten

Als Beispieldaten verwendet dieser Artikel die Tabellen der Südsturm-Datenbank, einer abgewandelten Variante der Nordwind-Datenbank. Bild 1 zeigt alle Tabellen, deren Daten im Beispielformular angezeigt werden sollen. Das Hauptformular soll dabei die Kundendaten aus der Tabelle tblKunden liefern und dabei jeweils einen Datensatz anzeigen.

Diese Tabellen sollen im Formular angezeigt werden.

Bild 1: Diese Tabellen sollen im Formular angezeigt werden.

Ein erstes Unterformular zeigt alle Datensätze der Tabelle tblBestellungen an, die zum aktuell im Hauptformular angezeigten Datensatz der Tabelle tblKunden passen, deren Fremdschlüsselfeld KundeID also den Wert des Feldes KundeID des Hauptformulars enthält.

Außerdem wollen wir noch die Bestelldetails zur jeweils im ersten Unterformular ausgewählten Bestellung sehen, und zwar in einem zweiten Unterformular.

Dieses zeigt prinzipiell nur Daten der Tabelle tblBestelldetails an, wobei das Nachschlagefeld ArtikelID seine angezeigten Daten (hier den Artikelnamen) aus der Tabelle tblArtikel bezieht.

Hauptformular frmSynchroneUnterformulare

Das Hauptformular wird in der Formularansicht als Standardansicht angezeigt. Es verwendet die Tabelle tblKunden als Datenherkunft, wobei wir der Übersicht halber nur einige wenige Felder dieser Tabelle im Entwurf platzieren (siehe Bild 2).

Ausgangsbasis: Das Formular frmSynchroneUnterformulare mit Daten aus der Tabelle tblKunden

Bild 2: Ausgangsbasis: Das Formular frmSynchroneUnterformulare mit Daten aus der Tabelle tblKunden

Unterformular sfmBestellungen

Das Unterformular zur Anzeige der Bestellungen soll sfmBestellungen heißen. Es verwendet die Tabelle tblBestellungen als Datenherkunft. Fügen Sie etwa die Felder BestellungID, PersonalID, Bestelldatum und Lieferdatum zum Detailbereich des Formularentwurfs hinzu (siehe Bild 3). Stellen Sie außerdem die Eigenschaft Standardansicht auf den Wert Datenblatt ein, damit das Formular die Daten in tabellarischer Form anzeigt.

Das erste Unterformular zeigt die Daten der Tabelle tblBestellungen an.

Bild 3: Das erste Unterformular zeigt die Daten der Tabelle tblBestellungen an.

Schließen Sie das Unterformular und vergeben Sie beim Speichern den Namen sfmBestellungen. Öffnen Sie das Hauptformular frmSynchroneUnterformular in der Entwurfsansicht und ziehen Sie den Eintrag sfmBestellungen aus dem Datenbankfenster (bis Access 2003) beziehungsweise dem Navigationsbereich (ab Access 2007) in den Entwurf des Formulars frmSynchroneUnterformulare.

Das Ergebnis sieht schließlich wie in Bild 4 aus. Das Formular sfmBestellungen wird in ein Unterformular-Steuerelement eingebettet und wird in der Entwurfsansicht innerhalb des Hauptformulars angezeigt.

Einbau des ersten Unterformulars

Bild 4: Einbau des ersten Unterformulars

Wichtig ist an dieser Stelle, dass das Eigenschaftsfenster für das Unterformular-Steuerelement die beiden Eigenschaften Verknüpfen von und Verknüpfen nach automatisch mit dem Aus­druck KundeID gefüllt wird. Die Eigenschaften des Unter­for­mular-Steuerelements wer­den gern mit denen des im Unterformular-Steuerele­ment enthaltenen Formulars verwechselt. Damit Sie gleich die richtigen Eigenschaften prüfen können, klicken Sie an einer beliebigen Stelle in das Hauptformular (nur nicht auf das Unterformular) und wählen dann aus dem Kombinationsfeld mit der Liste der Elemente im Eigenschaftsfenster den Eintrag aus, der mit dem Namen des eingefügten Unterformulars übereinstimmt (hier sfmBestellungen). Nach der Auswahl erscheinen auf der Registerseite Daten die gewünschten Eigenschaften.

Access hat hier automatisch erkannt, dass das Unterformular ein Fremdschlüsselfeld enthält, dass mit dem im Hauptformular enthaltenen Primärschlüsselfeld verknüpft ist und eine entsprechende Abhängigkeit zwischen Haupt- und Unterformular hergestellt. Ein Wechsel in die Formularansicht zeigt, dass nur die zum jeweiligen Kunden passenden Datensätze der Tabelle tblBestellungen angezeigt werden (siehe Bild 5).

Haupt- und Unterformular in Aktion

Bild 5: Haupt- und Unterformular in Aktion

Unterformulare synchronisieren

Nun erstellen Sie das Formular, dass als vom ersten Unterformular abhängiges Unterformular eingesetzt werden soll. Es soll sfmBestelldetails heißen und die Daten der Tabelle tblBestelldetails anzeigen (siehe Bild 6). Nach dem Sie alle Felder der Datenherkunft in den Detailbereich des Formularentwurfs gezogen und auch hier die Eigenschaft Standardansicht auf den Wert Datenblatt eingestellt haben, speichern und schließen Sie es.

Vorbereiten des zweiten Unterformulars

Bild 6: Vorbereiten des zweiten Unterformulars

Öffnen Sie das Formular frmSynchroneUnterforBild 3mular in der Entwurfsansicht und ziehen Sie dann auch das Formular sfmBestelldetails als Unterformular in das Hauptformular.

Das Ergebnis finden Sie in Bild 7. Dort haben wir auch gleich die entsprechende Registerseite des Eigenschaftsfensters für das Unterformular-Steuerelement sfm­Bestelldetails eingeblendet.

Einfügen des zweiten Unterformulars

Bild 7: Einfügen des zweiten Unterformulars

Wie Sie sehen, sind die Eigenschaften Verknüpfen von und Verknüpfen nach leer – Access hat also offensichtlich nicht automatisch erkannt, dass das zweite Unterformular die Bestelldetails zu der im ersten Unterformular angezeigten Bestelldatensatz anzeigen soll. Dementsprechend zeigt das Unterformular sfmBestelldetails im aktuellen Zustand immer alle Datensätze der Tabelle tblBestelldetails an.

Um dies zu realisieren, gibt es nun verschiedene Möglichkeiten. Eine davon funktioniert sogar ohne eine einzige Zeile Code. Dazu legen Sie zunächst ein neues Textfeld im Hauptformular an und nennen es txtBestellungID. Dieses können Sie an beliebiger Stelle platzieren, wir werden es ohnehin später unsichtbar schalten.

Im Entwurf bleibt es ohnehin sichtbar und sieht etwa wie in Bild 8 aus. Stellen Sie als Steuerelementinhalt den folgenden Ausdruck ein:

Erstellen eines Textfeldes als Brücke zum Herstellen der Beziehung zwischen den beiden Unterformularen

Bild 8: Erstellen eines Textfeldes als Brücke zum Herstellen der Beziehung zwischen den beiden Unterformularen

=[sfmBestellungen]![BestellungID]

Damit legen Sie fest, dass das Textfeld immer den Inhalt des Feldes BestellungID des aktuell im Unterformular sfmBestellungen angezeigten Datensatzes enthält – wobei mit angezeigter Datensatz derjenige gemeint ist, auf den aktuell der Datensatzzeiger zeigt.

Ob dies funktioniert, können Sie durch einen Wechsel in die Formularansicht prüfen. Wählen Sie dort nacheinander einige Datensätze des obersten Unterformulars sfmBestellungen aus und betrachten Sie, wie sich synchron auch der Inhalt des Textfeldes txtBestellungID ändert.

Nun müssen Sie nur noch dafür sorgen, dass das Unterformular sfmBestelldetails nur noch die Bestelldetails anzeigt, die zu der Bestellung gehören, deren BestellungID im Textfeld txtBestellungID des Hauptformulars angezeigt wird.

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!