Lösungen

Hauptsache Hauptformular

Unterformular ergänzen

Damit haben Sie beide Probleme auf einmal gelöst: Die Suche ist selbsterklärend, indem ein Name aus der Liste markiert wird, und ein schreibender Zugriff auf die Daten ist völlig unmöglich.

Entsprechend dem ersten Beispiel sollen nun zu diesem Kunden genau seine Bestellungen angezeigt werden. Wegen der besseren Gestaltungsmöglichkeiten geschieht dies nicht mit einer Untertabelle, sondern einem Unterformular.

Auf Grundlage der Tabelle Bestellungen können Sie den Formular-Assistenten ein ganz einfaches tabellarisches Endlosformular erstellen lassen. Es erhält den Namen frmKunden (Unter: Bestellungen), nur damit es alphabetisch nach dem zugehörigen Hauptformular angezeigt wird.

Tatsächlich ist das Unterformular nun fertig, alle übrigen Änderungen finden nur noch im Hauptformular statt. Wenn Sie das Hauptformular im Entwurf öffnen, können Sie mit [F11] das Datenbankfenster anzeigen lassen und den Namen des Unterformulars in den Entwurf dieses Hauptformulars hineinziehen.

Synchronisation

Abgesehen von ein paar optischen Verschönerungen, sieht das Unterformular entsprechend Bild 4 schon ganz gut aus. Aber wie Sie beim Anklicken verschiedener Kunden feststellen werden, zeigt es immer alle Datensätze an und nicht nur diejenigen des markierten Kunden. Die beiden sind also offensichtlich noch nicht synchronisiert.

Bild 4: Listbox und Unterformular noch nicht synchronisiert.
Bild 4: Listbox und Unterformular noch nicht synchronisiert.

Wenn Sie zum Vergleich einmal in das ursprüngliche AutoFormular sehen, werden Sie für die Untertabelle mit den Bestellungen zwei Eigenschaften Verknüpft von und Verknüpft nach finden. Darin ist jeweils der Feldname Kunden-Code enthalten.

Access sorgt dann automatisch dafür, dass in der Untertabelle Bestellungen nur die Datensätze angezeigt werden, deren Kunden-Code zum Kunden-Code des Formulars passt.

Eigentlich ist das hier genauso. Nur die Vermutung, dass dabei zwei Felder miteinander synchronisiert würden, ist falsch. Das trifft sich gut, denn unser Hauptformular hätte ja mangels Datenbindung auch gar keine Felder!

Vielmehr werden die Inhalte der Controls miteinander verglichen. Normalerweise tragen bei Datenfeldern die Textboxen und anderen Controls den gleichen Namen wie ihre Felder, daher fällt der feine Unterschied gar nicht auf.

Hier wählen Sie für Verknüpfen von ein übliches Feld/Control im Unterformular, nämlich Kunden-Code. Bei Verknüpfen nach wird in Controlname des Hauptformulars angegeben, dessen Inhalt ein Kunden-Code ist, also lstKunden. Damit funktioniert die Synchronisation.