Home > Artikel > Ausgabe 3/2013 > Haupt- und Unterformular synchron

Haupt- und Unterformular synchron

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

Das Ergebnis sieht in der Entwurfsansicht wie in Bild 2 aus. Wenn Sie nun in die Formularansicht wechseln, sieht das Ergebnis wie in Bild 3 aus. Das ist noch nicht exakt das gewünschte Ergebnis, denn das Unterformular zeigt jeweils nur den Datensatz an, der auch im Hauptformular erscheint. Sie können sogar durch die Datensätze im Hauptformular navigieren, das Unterformular wird immer auf den Datensatz des Hauptformulars eingestellt.

Formularansicht, erster Versuch

Bild 2: Formularansicht, erster Versuch

Haupt- und Unterformular

Bild 3: Haupt- und Unterformular

Warum ist dies so? Weil wir das Unterformular direkt in das Hauptformular gezogen haben. Access prüft dann normalerweise automatisch, ob es Felder in den Datenherkünften von Haupt- und Unterformular gibt, zwischen denen eine Beziehung existiert und trägt diese für die beiden Eigenschaften Verknüpfen von und Verknüpfen nach ein. Dadurch soll das Unterformular normalweise nur die Datensätze anzeigen, die mit dem Datensatz im Hauptformular verknüpft sind.

Interessanterweise geschieht dies auch, wenn Haupt- und Unterformular die gleiche Tabelle als Datenherkunft verwenden. In diesem Fall trägt Access für die Eigenschaften Verknüpfen von und Verknüpfen nach jeweils den Namen des Primärschlüsselfeldes der Datenherkünfte ein, also KundeID (siehe Bild 4).

Der Grund für die unerhoffte Synchronisierung

Bild 4: Der Grund für die unerhoffte Synchronisierung

Dies bewirkt den nicht erwünschten Effekt: Das Unterformular wird jeweils so gefiltert, dass nur der Datensatz erscheint, dessen Wert im Feld KundeID mit dem entsprechenden Wert im Hauptformular identisch ist.

Synchronisierung anpassen

Der erste Schritt, die Synchronisierung wie gewünscht herzustellen, ist das Leeren der Eigenschaften Verknüpfen von und Verknüpfen nach. Danach erhalten wir ein Haupt- und ein Unterformular, die völlig unabhängig voneinander sind. Nun soll das Hauptformular allerdings zu dem im Unterformular ausgewählten Wert springen und umgekehrt. Ohne VBA-Code lässt sich dies nicht erreichen, aber die Lösung ist relativ einfach – wenn auch nicht intuitiv. Normalerweise würde man davon ausgehen, dass hier zwei Ereignisprozeduren nötig sind, die beim Anzeigen eines neuen Datensatzes im Haupt- und im Unterformular ausgelöst werden und das jeweils andere Formular auf den aktuellen Datensatz einstellen.

Sie würden dann für das Ereignis Beim Anzeigen des Hauptformulars die folgende Ereignisprozedur hinterlegen:

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!