Neue Werte in Lookup-Feldern

Wenn Sie ein Abonnement des Magazins 'Access im Unternehmen' besitzen, können Sie sich anmelden und den kompletten Artikel lesen.
Anderenfalls können Sie das Abonnement hier im Shop erwerben.

Neue Werte in Lookup-Feldern

Manchmal möchten Sie schnell mit ein paar Zeilen Code eine Funktion programmieren, mit der ein neuer Datensatz zu einer Tabelle mit einem eindeutigen Index hinzugefügt wird. Dies geschieht bevorzugt bei Lookup-Tabellen. Dort kommt es aber schnell dazu, dass der Benutzer einen neuen Datensatz hinzufügt, der bereits vorhanden ist. In diesem Beitrag zeigen wir, wie Sie solche Fälle umschiffen oder den Benutzer gegebenenfalls einen neuen Wert eingeben lassen.

Lookup-Tabellen

Warum benutzt man eigentlich Lookup-Tabellen? Der wichtigste Grund ist wohl, dass man die möglichen Werte nur je einmal in eine separate Tabelle eingibt und von anderen Tabellen darauf verweisen kann, indem man diese über ein Fremdschlüsselfeld mit dem Primärschlüsselwert dieser Tabelle verknüpft.

Nun legt man nicht immer nur über die Benutzeroberfläche neue Datensätze an, bei denen man bequem etwa per Kombinationsfeld einen der vorhandenen verknüpften Datensätze auswählt – zum Beispiel eine Anrede oder eine Kategorie. Gelegentlich sollen auch neue Datensätze beim Anlegen über die Benutzeroberfläche hinzugefügt werden oder Sie wollen vielleicht Daten aus einer anderen Datenbank importieren, wo die Daten noch in einer Tabelle vorliegen.

Eindeutiger Schlüssel

Wenn Sie eine solche Lookup-Tabelle verwenden – wie etwa die Tabelle tblKategorien aus Bild 1 –, dann haben Sie verschiedene Möglichkeiten, um sicherzustellen, dass jede Kategorie nur einmal eingegeben wird. Die einfachste ist, einfach wie in der Abbildung einen eindeutigen Index für dieses Feld anzulegen. Dazu wählen Sie für die Eigenschaft Indiziert einfach den Wert Ja (Ohne Duplikate) aus.

Tabelle mit eindeutig indiziertem Feld

Bild 1: Tabelle mit eindeutig indiziertem Feld

Achtung: Dies ist für Tabellen mit bestehenden Daten etwas komplizierter. Es kann immerhin vorkommen, dass Benutzer es geschafft haben, den gleichen Datensatz mehrfach in einer Lookup-Tabelle einzugeben. Wenn dort also beispielsweise zwei Mal die gleiche Kategorie enthalten ist und Sie dann versuchen, für das Feld Kategorie einen eindeutigen Index zu definieren, erhalten Sie eine entsprechende Fehlermeldung (s. Bild 2).

Fehlermeldung beim Versuch, einen eindeutigen Index für ein Feld mit nicht eindeutigen Daten anzulegen

Bild 2: Fehlermeldung beim Versuch, einen eindeutigen Index für ein Feld mit nicht eindeutigen Daten anzulegen

In diesem Fall müssen Sie die Daten zuvor noch vereinheitlichen. Wie das gelingt, lesen Sie im Beitrag Lookup-Daten: Aus zwei mach eins (www.access-im-unternehmen.de/946).

Wenn die Daten jedoch keine Redundanzen aufweisen, können Sie den eindeutigen Index problemlos anlegen. Anschließend führt der Versuch, einen neuen Datensatz mit einem bereits vorhandenem Wert in dem eindeutig indizierten Feld anzulegen, wiederum zu einem Fehler. Interessanterweise erhalten wir hier genau die gleiche Fehlermeldung wie bei dem Versuch, einen eindeutigen Index für ein Feld mit nicht eindeutigen Werten anzulegen.

Nun wollen wir dem Benutzer sicher nicht diese Fehlermeldung präsentieren, sondern eine, mit der er etwas mehr anfangen kann.

Lookup-Werte per Formular eingeben

In Bild 3 haben wir die einfachste Konstellation für die Eingabe von Werten in eine Lookup-Tabelle geschaffen. Der Benutzer kann aus dem Kombinationsfeld eine Kategorie auswählen, aber auch neue Werte eingeben – zumindest scheinbar. Denn wenn er wirklich einen neuen Wert dort eingibt, der noch nicht in der Datensatzherkunft dieses Steuerelements vorhanden ist, erscheint wiederum eine Fehlermeldung (s. Bild 4).

Einfaches Formular mit einem Kombinationsfeld zur Eingabe oder Auswahl von Lookup-Werten

Bild 3: Einfaches Formular mit einem Kombinationsfeld zur Eingabe oder Auswahl von Lookup-Werten

Fehler beim Versuch, einen Wert in ein unvorbereitetes Lookup-Feld einzugeben

Bild 4: Fehler beim Versuch, einen Wert in ein unvorbereitetes Lookup-Feld einzugeben

Um dies zu verhindern und den neuen Wert gleich in die Tabelle tblKategorien zu schreiben, legen Sie eine Ereignisprozedur an, die durch das Ereignis Bei nicht in Liste des Kombinationsfeldes ausgelöst wird. Diese sieht wie in Listing 1 aus. Diese Ereignisprozedur liefert gleich zwei entsprechende Parameter, wobei der erste, NewData, den Wert des neuen Eintrags liefert und der zweite, Response, einen Wert erwartet, der die weitere Vorgehensweise festlegt. In diesem Fall legt die Prozedur gleich einen neuen Eintrag in der Tabelle tblKategorien mit dem mit NewData gelieferten Kategorienamen an. Dann stellt sie Response auf acDataErrAdded ein, was für den weiteren Verlauf festlegt, dass Access keine Fehlermeldung liefert, sondern direkt den neuen Wert im Kombinationsfeld auswählt. Die Datensatzherkunft wird auf diesem Wege gleich mit aktualisiert.

Private Sub KategorieID_NotInList(NewData As String, Response As Integer)
     Dim db As DAO.Database
     Set db = CurrentDb
     db.Execute "INSERT INTO tblKategorien(Kategorie) VALUES('" & NewData & "')", dbFailOnError
     Response = acDataErrAdded
     Set db = Nothing

Dies war die Leseprobe dieses Artikels.
Melden Sie sich an, um auf den vollständigen Artikel zuzugreifen.

Bitte geben Sie die Zeichenfolge in das nachfolgende Textfeld ein

Die mit einem * markierten Felder sind Pflichtfelder.

Neues aus unseren Magazinen
Listenfeld: Reihenfolge mehrerer Einträge...

Wir haben bereits in mehreren Beiträgen beschrieben, wie Sie die individuelle Reihenfolge von Elementen einer Tabelle über den Inhalt eines Feldes etwa namens »ReihenfolgeID« einstellen können –... [mehr]

Diagramme mit gefilterten Daten

In Ausgabe 2/2019 haben wir in zwei Artikeln die modernen Diagramme von Access vorgestellt. Im vorliegenen Beitrag zeigen wir Ihnen, wie Sie diese abhängig von den in einem Formular angezeigten... [mehr]

Benutzerverwaltung mit verschlüsselten...

Wenn Sie in einer Access-Anwendung Benutzer verwalten wollen, die sich per Benutzername und Kennwort an die Anwendung anmelden, sollten Sie sehr sensibel mit den in der Anwendung gespeicherten... [mehr]

HTML-Tabellen mit fester Kopfzeile

In den vorherigen Ausgaben von Access im Unternehmen und in der aktuellen Ausgabe arbeiten wir in einigen Beiträgen mit dem Webbrowser-Steuerelement und stellen Daten, die wir mit den Bordmitteln... [mehr]

Flexible HTML-Tabellen mit fester Kopfzeile

Im Beitrag »HTML-Tabellen mit fester Kopfzeile« haben wir gezeigt, wie Sie Daten aus einer bestimmten Abfrage in einem Webbrowser-Steuerelement so anzeigen, dass die Spaltenköpfe oben fixiert... [mehr]

Berechtigungen per HTML verwalten

Im Beitrag »Benutzerverwaltung mit verschlüsselten Kennwörtern« stellen wir eine Lösung vor, in der wir die Berechtigungen von Benutzergruppen an Datenbankobjekten definieren. Dort benötigen wir... [mehr]

Benutzer und Berechtigungen ermitteln

In den Beiträgen »Benutzerverwaltung mit verschlüsselten Kennwörtern« und »Berechtigungen per HTML verwalten« haben wir die Voraussetzungen für eine Benutzerverwaltung geschaffen. Im vorliegenden... [mehr]

Zugriffsrechte mit Datenmakros

Es gibt verschiedene Möglichkeiten, auf Basis des aktuell angemeldeten Benutzers sicherzustellen, dass dieser nur die für ihn vorgesehenen Aktionen mit Daten durchführen darf – beispielsweise durch... [mehr]

Kennwörter generieren

Für den einen oder anderen Zweck möchten Sie vielleicht Kennwörter generieren oder in einer Benutzeroberfläche die Möglichkeit zum Generieren von Kennwörtern anbieten. Wenn Sie etwa Benutzer zu... [mehr]

Neuer Datensatz von Frontend zu Backend

Für manche Themen gibt es keine kurze, prägnante Überschrift. In diesem Fall wollen wir zeigen, wie Sie einen neuen Datensatz anlegen, der in einer temporären Tabelle im Frontend gespeichert wird,... [mehr]