Konsistente Dateneingabe in Unterformulare

André Minhorst, Duisburg

Unterformulare werden meist in Zusammenhang mit der Darstellung von 1:n- oder m:n-Beziehungen verwendet. Dabei sind allzu schnell mit dem Unterformular Datensätze in die Detailtabelle geschrieben, obwohl es gar keinen Masterdatensatz gibt – und der Benutzer darf sich entweder mit den Access-Fehlermeldungen herumschlagen oder Inkonsistenzen in Kauf nehmen. Allein die Festlegung referentieller Integrität reicht hier nicht aus, um eine fehlerfreie Dateneingabe zu gewährleisten; dazu sind einige zusätzliche Handgriffe erforderlich.

Damit Sie die im folgenden Kapitel beschriebenen Hintergründe nachvollziehen können, legen Sie am besten zuvor das Beispielformular an – Sie müssen dazu nur zwei Tabellen der Nordwind-Datenbank importieren und mit einem Assistenten eine Kombination aus Haupt- und Unterformular erstellen.

Abb. 1: Kategorien und Artikel in Haupt- und Unterformular

Das Beispielformular enthält die beiden Tabellen Artikel und Kategorien der Nordwind-Datenbank. Das Formular erstellen Sie ausnahmsweise mit dem Assistenten:

  • Klicken Sie auf der Registerseite Formular des Datenbankfensters auf den Eintrag Erstellt ein Formular unter Verwendung des Assistenten.
  • Wählen Sie die Tabelle Artikel aus und befördern Sie alle Felder mit der entsprechenden Schaltfläche in das rechte Listenfeld.
  • Gehen Sie genauso mit der Tabelle Kategorien vor und klicken Sie auf die Schaltfläche Weiter.
  • Beantworten Sie die Frage “Wie sollen Ihre Daten angezeigt werden” mit “nach Kategorien”. Wenn in der rechten Abbildung ein symbolisches Formular mit Unterformular erscheint und darunter die Option Formular mit Unterformular(en) aktiviert ist, können Sie bereits auf Fertig stellen klicken. (
  • Der Assistent legt nun ein Formular namens Kategorien mit einem Unterformular an, das er unter dem Namen Artikel Unterformular speichert und direkt anzeigt (s. Abb. 1). Das Formular lässt sich optisch sicher noch verbessern, reicht aber für unseren Zweck völlig aus.

    Dieses Formular verwenden Sie hier stellvertretend für alle Formulare, die dem Anzeigen und Bearbeiten von 1:n- oder m:n-Beziehungen dienen. Die nachfolgend beschriebenen Probleme treten in beiden Varianten auf.

    Die Verwendung von Unterformularen als Steuerelement in Formularen dient in den meisten Fällen der Anzeige und Bearbeitung von Daten aus zwei miteinander verknüpften Tabellen. Dabei treten zwei Fälle auf:

  • Das Hauptformular zeigt die Daten der Mastertabelle und das Unterformular die Daten der Detailtabelle an.
  • Das Hauptformular zeigt die Daten der einen Seite einer m:n-Beziehung an und das Unterformular eine Abfrage mit den Daten der anderen Seite der Beziehung und den entsprechenden Datensätzen der Verknüpfungstabelle.
  • In beiden Fällen sind einige Regeln für die Dateneingabe zu beachten. So ist es beispielsweise mit dem üblicherweise unter Access als Primärindex verwendeten Autowert nicht möglich, Daten in eine Detailtabelle einzutragen, wenn in der Mastertabelle kein entsprechender Datensatz vorliegt. Das funktioniert nur in dem Fall, dass für die Beziehung zwischen den beiden Tabellen keine referentielle Integrität festgelegt ist.

    Der Verzicht auf Festlegung dieser Eigenschaft ist aber nur in wenigen Fällen akzeptabel, in allen anderen heißt es: Wo keine referentielle Integrität festgelegt ist, herrschen bald Redundanzen und Inkonsistenz.

    Wenn Sie aber nun vernünftigerweise referentielle Integrität zwischen den betroffenen Tabellen festgelegt haben (außer natürlich, Sie haben einen guten Grund, davon abzusehen), können bei der Eingabe für den Benutzer unangenehme Probleme auftauchen – und zwar immer, wenn man Daten im Unterformular einträgt, ohne dass zuvor ein Datensatz im Hauptformular angelegt wurde. Einen Unterschied gibt es dabei in Abhängigkeit davon, ob Sie für das Fremdschlüsselfeld der Datenherkunft des Unterformulars Nullwerte zulassen oder nicht.

    Gehen wir doch einmal die unterschiedlichen Konstellationen bei der Eingabe von Daten in einem Unterformular durch.

    Dabei werden drei Fälle unterschieden:

  • Das Hauptformular enthält einen Datensatz, dessen Primärschlüsselwert automatisch in neuen Datensätzen des Unterformulars als Fremdschlüsselwert eingetragen wird.
  • Das Hauptformular enthält keinen Datensatz und das verknüpfte Fremdschlüsselfeld des Unterformulars erlaubt Nullwerte.
  • Das Hauptformular enthält keinen Datensatz und das verknüpfte Fremdschlüsselfeld erlaubt keine Nullwerte.
  • Keine Probleme mit Datensatz im Hauptformular

    Wenn Sie vor dem Anlegen von Datensätzen im Unterformular einen Datensatz im Hauptformular angelegt haben, können Sie anschließend beliebig viele Datensätze im Unterformular anlegen. Wenn die beiden Eigenschaften Verknüpfen von und Verknüpfen nach des Unterformularsteuerelements die Namen des Primärschlüsselfelds der Datenherkunft des Hauptformulars und des Fremdschlüsselfelds des Unterformulars enthalten, ist dieser Wert im Haupt- und Unterformular bereits voreingestellt.

    Wichtig: Verknüpfen von und Verknüpfen nach sind keine Eigenschaften des Formulars, das Sie als Unterformular verwenden, sondern des Steuerelements, in dem Sie es platzieren!

    Abb. 2: Access aktualisiert das Fremdschlüsselfeld des Unterformulars automatisch.

    Abb. 3: Ein neuer Datensatz im Hauptformular

    Abb. 4: Einfügen eines Detaildatensatzes ohne Bezug zur Mastertabelle

    Dass die Voreinstellung funktioniert, können Sie schnell nachvollziehen: öffnen Sie einfach das Beispielformular und klicken Sie bei vorhandener Kategorie im Hauptformular auf die Schaltfläche für das Anlegen eines neuen Datensatzes im Unterformular. Sollte das Feld Kategorie des Unterformulars nicht direkt sichtbar sein, scrollen Sie einfach dorthin – das Feld enthält automatisch die im Hauptformular eingestellte Kategorie (s. Abb. 2).

    Vorsicht: Nullwerte erlaubt!

    Erst wenn Sie einen Datensatz im Unterformular anlegen, ohne dass das Hauptformular einen Masterdatensatz anzeigt, auf den sich der Datensatz im Unterformular bezieht, wird es kritisch:

    Verwenden Sie einfach das Beispielformular, um diesen Fall nachzuvollziehen. Wechseln Sie im Hauptformular auf einen neuen Datensatz, aber geben Sie dort noch keine Daten ein – die Schaltfläche für das Springen zu einem neuen Datensatz ist nun deaktiviert (s. Abb. 3).

    Wechseln Sie nun ins Unterformular und geben Sie dort Beispieldaten ein. Das funktioniert zunächst ohne sichtliche Probleme. Diese folgen aber schneller, als man denkt: Access speichert die eingegebenen Daten ohne Murren, ohne diese mit einem Datensatz des Hauptformulars zu verknüpfen. Abb. 4 veranschaulicht das: Der erste Datensatz im Unterformular enthält keine Kategorie und lässt sich dennoch speichern – anderenfalls hätte Access beim Wechsel zu einem neuen Datensatz eine Fehlermeldung angezeigt.

    Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

    Workplace

    Jahresabonnement TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

    Schreibe einen Kommentar