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 Zahlenfolge in das nachfolgende Textfeld ein

Die mit einem * markierten Felder sind Pflichtfelder.

Aktuell im Blog
Onlinebanking mit Access

Es ist geschafft: Endlich ist das Buch Onlinebanking mit Access fertiggeschrieben. Das war... [mehr]

Direktzugriff auf Tabellen und Felder

Die IntelliSense-Erweiterung für Tabellen und Felder hat mir soviel Spaß gemacht, dass ich gleich... [mehr]

IntelliSense für Tabellen und Felder

Wenn Sie mit dem VBA-Editor arbeiten und dort gelegentlich SQL-Anweisungen eingeben, müssen Sie... [mehr]

Download Access und SQL Server

Erfahren Sie, welche Schritte zum Download des aktuellen Stands des Buchs "Access und SQL Server"... [mehr]

Bilder in Access 2013

Wer die Bibliothek mdlOGL0710 von Sascha Trowitzsch oder ein ähnliches Modul aus meinen... [mehr]

Dynamische Ribbons

Immer wieder fragen Leser, wie man Ribbon-Elemente wie etwa Schaltflächen in Abhängigkeit... [mehr]

Die Blogmaschine

Einen kleinen Blog zusätzlich zum Shop zu betreiben ist eine tolle Sache. Hier lassen sich... [mehr]

Wegwerfadressen für die Newsletteranmeldung

Die Verwendung von Wegwerf-Adressen für die Nutzung aller möglichen Online-Dienste nimmt... [mehr]

Access und Facebook

Facebook und Access - das ist eine der wenigen Kombinationen, die ich noch nicht in die Mangel... [mehr]

Access und SQL Server - das Projekt

Mein neues Buch Access und SQL Server (gemeinsam mit Bernd Jungbluth) geht in die Endphase. Wer... [mehr]