Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.
Manchmal zeigt das Hauptformular die gleichen Daten wie das Unterformular an – beispielsweise, wenn das Unterformular als übersichtsliste die Daten in der Datenblattansicht liefert und ein Wechseln des Datensatzes im Unterformular zur Anzeige der Details des gleichen Datensatzes in im Hauptformular führen soll. Soll dies auch umgekehrt der Fall sein, also das beim Wechsel des Datensatzes im Hauptformular der entsprechende Datensatz im Unterformular markiert wird, wird es kompliziert. Mögliche Probleme und die Auflösung liefert dieser Beitrag.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 1706_HauptUndUnterformularSynchron.accdb.
Beispielkonstellation
Wir wollen die Daten einer Tabelle namens tblHersteller aus unserer Beispiellösung Handyverwaltung herausnehmen und an diesem Beispiel zeigen, wie Haupt- und Unterformular synchron gehalten werden können. Dazu legen wir zunächst ein neues Unterformular namens sfmHersteller an, das die Abfrage qryHerstellerBezeichnungNachAlphabet als Datenherkunft verwendet. Diese Abfrage liefert nur die beiden Felder HerstellerID und Bezeichnung der Tabelle tblHersteller, und zwar alphabetisch nach dem Inhalt des Feldes Bezeichnung sortiert.
Das Hauptformular frmHersteller verwendet eine ähnliche Abfrage namens qryHerstellerNachBezeichnung, welche allerdings alle Felder der Tabelle tblHersteller enthält. Auch hier gibt es eine Sortierung nach dem Feld Bezeichnung.
Das Unterformular platzieren wir wie in Bild 1 im Hauptformular. Nun wollen wir, dass das Hauptformular und das Unterformular immer den gleichen Datensatz anzeigen beziehungsweise dass im Unterformular immer der Datensatz markiert ist, der aktuell im Hauptformular angezeigt wird und umgekehrt.
Bild 1: Haupt- und Unterformular zur Anzeige der Daten aus der gleichen Datenherkunft
Erster Versuch
Dabei stellen wir uns nun vor, dass Folgendes funktionieren könnte und probieren es aus. Für das Ereignis Beim Anzeigen des Hauptformulars legen wir die folgende Ereignisprozedur an:
Private Sub Form_Current() Me!sfmHersteller.Form.Recordset!HerstellerID = Me!HerstellerID End Sub
Diese Prozedur stellt also den Datensatzmarkierer für das Recordset im Unterformular auf den Datensatz ein, dessen Primärschlüsselfeld HerstellerID dem passenden Wert im Hauptformular entspricht.
Für das entsprechende Ereignis des Unterformulars verwenden wir eine ganz ähnliche Ereignisprozedur, welche die folgende Zeile enthält:
Private Sub Form_Current() Me.Parent.Recordset.FindFirst "HerstellerID = " & Me!HerstellerID End Sub
Diese versucht, den Datensatzzeiger im Recordset des Hauptformulars auf den Datensatz einzustellen, dessen HerstellerID im Unterformular ausgewählt wurde. öffnen wir nun das Formular in der Formularansicht, erhalten wir die Ansicht aus Bild 2 – es klappt also wie gewünscht.
Bild 2: Beim Anzeigen erscheinen die Datensätze im Haupt- und Unterformular synchron.
Das ist auch der Fall, wenn wir zwischen den Datensätzen im Haupt- oder im Unterformular navigieren. Es tritt erst ein Problem auf, wenn wir den Datensatzzeiger im Haupt- oder Unterformular auf einen neuen, leeren Datensatz verschieben.
Dann erhalten wir die Fehlermeldung aus Bild 3. Der Grund für diese Fehlermeldung ist, dass Me!HerstellerID zu diesem Zeitpunkt, also beim Anlegen eines neuen Datensatzes, den Wert Null enthält. Dadurch sieht der Ausdruck, der als Kriterium der FindFirst-Methode verwendet wird, wie folgt aus:
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