window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-TCJTE9L38H');

Haupt- und Unterformular synchron

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.

Haupt- und Unterformular zur Anzeige der Daten aus der gleichen Datenherkunft

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.

Beim Anzeigen erscheinen die Datensätze im Haupt- und Unterformular synchron.

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:

Fehler beim Anzeigen eines neuen, leeren Datensatzes

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

Haupt- und Unterformular synchron

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

Es macht wenig Spaß, sich in der Formularansicht durch die Datensätze zu wühlen, bis man endlich zum gesuchten Datensatz gelangt. Genausowenig Freude macht das Bearbeiten von Daten in der Datenblattansicht – zumindest, wenn das Formular nicht alle Felder gleichzeitig anzeigt und man hin- und herscrollen muss.Warum aber nicht beides verbinden und einfach zum Detailformular mit jeweils einem Datensatz noch ein Unterformular hinzufügen, dass alle Datensätze anzeigt und zum Blättern einlädt Dieser Artikel zeigt, wie dies funktioniert.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1303_HauptUndUnterformularSynchron.mdb.

Hauptformular erstellen

Das Hauptformular frmArtikelSynchron soll zunächst an die Tabelle mit den anzuzeigenden Daten gebunden werden, in diesem Fall tblArtikel.

Dazu stellen Sie die Eigenschaft Datenherkunft auf diese Tabelle ein. Dann ziehen Sie alle Felder der Tabelle aus der Feldliste in den Detailbereich des Formulars (siehe Bild 1).

Hauptformular mit Artikeldetails

Bild 1: Hauptformular mit Artikeldetails

Unterformular erstellen

Das Unterformular soll die gleichen Daten wie das Hauptformular enthalten. Was liegt also näher als das bereits erstellte Hauptformular einfach zu kopieren

Schließen Sie dieses also, markieren Sie den Eintrag frmArtikelSynchron im Datenbankfenster beziehungsweise Navigationsbereich und betätigen Sie die Tastenkombinationen Strg + C und Strg + V. Access fragt nun nach einen neuen Namen für das zu kopierende Formular, geben Sie hier einfach sfmArtikelSynchron an.

Dieses Formular benötigt nur eine änderung: öffnen Sie es im Entwurf und stellen Sie die Eigenschaft Standardansicht auf den Wert Datenblatt ein. Dann schließen Sie das Unterformular wieder.

Nun öffnen Sie das Hauptformular erneut in der Entwurfsansicht und ziehen das Unterformular sfmArtikelSynchron in den Detailbereich des Formularentwurfs.

Haupt- und Unterformular zusammenführen

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