Datensätze in Unterformularen anlegen

Wie Sie Haupt- und Unterformulare zur Darstellung und Bearbeitung von Daten aus Tabellen mit 1:n-Beziehung erstellen, lesen Sie in jedem Grundlagenbuch und auf jeder halbwegs relevanten Internetseite zum Thema Access. Dass der Benutzer bei der Dateneingabe jedoch leicht auf die Nase fallen kann, lassen die meisten außer acht: Wer nämlich ohne Datensatz im Hauptformular Daten in das Unterformular eingibt, schickt seine Datensätze ins Beziehungsnirvana. Dieser Artikel zeigt, wie Sie dies verhindern.

Beispieldatenbank

Die Beispieldatenbank zu diesem Artikel heißt 11_08_DatensaetzeInUnterformularen.mdb.

Problem beim Eingeben von Daten in Unterformularen

Wenn Sie zwei Tabellen namens tblKunden und tblProjekte verwenden, bei der die Datensätze der Tabelle tblProjekte über das Fremdschlüsselfeld KundeID mit dem Primärschlüsselfeld der Tabelle tblKunden verknüpft sind, sieht die Vorgehensweise zum Anzeigen dieser Daten in zwei Formularen namens frmKunden und sfmProjekte so aus:

  • Sie legen ein Hauptformular namens frmKunden an, dass auf einer Tabelle wie tblKunden als Datenherkunft basiert und deren Felder anzeigt.
  • Sie erstellen ein Formular namens sfmProjekte, dass die Tabelle tblProjekte als Datenherkunft nutzt.
  • Sie fügen das Formular sfmProjekte als Unterformular in das Hauptforular frmKunden ein. Dabei stellt Access normalerweise direkt die beiden Eigenschaften Verknüpfen von und Verknüpfen nach des Unterformularsteuerelements so ein, dass das Unterformular nur die Projekte zum jeweiligen Kunden des Hauptformulars anzeigt (siehe Bild 1). Beim Anlegen neuer Projekte im Unterformular wird das Fremdschlüsselfeld KundeID der Tabelle tblProjekte gleich mit dem Primärschlüsselwert des Datensatzes gefüllt, der im Hauptformular angezeigt wird.
  • Normalerweise zeigt das Unterformular die verknüpften Datensätze an.

    Bild 1: Normalerweise zeigt das Unterformular die verknüpften Datensätze an.

Dies reicht auch normalerweise völlig aus, um verknüpfte Daten per Haupt- und Unterformular einzugeben. Dummerweise aber kann es auch passieren, dass der Benutzer erst ein Projekt einträgt und erst dann die Kundendaten. Dazu springt er zunächst auf einen leeren Kundendatensatz (oder er arbeitet mit einer neuen, leeren Datenbank – dann gibt es ohnehin noch keinen Kundendatensatz). Er trägt im Unterformular das Projekt ein (siehe Bild 2), wechselt dann zum Hauptformular und legt einen Kunden an. Das sieht auf den ersten Blick sogar noch gut aus. Sobald Access jedoch merkt, dass da ein neuer Datensatz angelegt werden soll (in der Regel direkt nach der Eingabe des ersten Zeichens), verschwindet der Projektdatensatz aus dem Unterformular! Was geschieht hier Nun: Durch das Einstellen der beiden Eigenschaften Verknüpfen von und Verknüpfen nach des Unterformular-Steuerelements legen Sie zwei Dinge fest:

Was aber, wenn man ein Projekt eingibt, ohne dass das Hauptformular einen Kunden anzeigt

Bild 2: Was aber, wenn man ein Projekt eingibt, ohne dass das Hauptformular einen Kunden anzeigt

  • Das Unterformular soll nur Datensätze anzeigen, die mit dem Datensatz des Hauptformulars verknüpft sind.
  • Beim Anlegen neuer Datensätze soll das Fremdschlüsselfeld im Unterformular automatisch mit dem aktuellen Primärschlüsselwert im Hauptformular gefüllt werden.

Gerade Letzteres führt dazu, dass neue Datensätze im Unterformular, hier also Projekte, gleich dem im Hauptformular angezeigten Kunden zugeordnet werden können. Wenn das Hauptformular jedoch keinen Datensatz anzeigt, lautet der Wert des Primärschlüsselfeldes NULL. Wenn Sie nun einen neuen Datensatz im Unterformular anlegen, stellt Access den Wert des für die Eigenschaft Verknüpfen von angegebenen Feldes automatisch ebenfalls auf diesen Wert ein.

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar