Kombinationsfelder mit vielen Einträgen

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.

Kombinationsfelder mit vielen Einträgen

Ein Kombinationsfeld soll zur schnellen Auswahl von Daten dienen. Wenn es aber sehr viele Daten enthält, stoßen Sie einerseits an die maximal mögliche Anzahl anzuzeigender Daten, zweitens geht die Performance beim Laden der Daten in die Knie. Wir haben ein Beispiel mit sehr vielen Datensätzen erstellt und zeigen Ihnen in diesem Beitrag, wie Sie mit den Begrenzungen umgehen und dem Benutzer dennoch ein ergonomisches Arbeiten ermöglichen.

Da nicht jeder Entwickler eine Tabelle mit um die 100.000 Datensätzen zur Verfügung hat, um damit die Grenzen eines Kombinationsfeldes auszuloten und passende Lösungen für solche Fälle zu finden, erstellen wir uns auf die Schnelle eine neue Tabelle mit der entsprechenden Menge Datensätze.

Die Tabelle heißt tblBeispieldaten und sieht im Entwurf wie in Bild 1 aus.

Die Tabelle mit den Beispieldaten in der Entwurfsansicht

Bild 1: Die Tabelle mit den Beispieldaten in der Entwurfsansicht

Nach dem Hinzufügen der Beispieldaten sieht die Tabelle in der Datenblattansicht wie in Bild 2 aus. Wir haben erst einmal 100.000 Datensätze hinzugefügt, um etwas Beispielmaterial zu haben. Aber wie haben wir das erledigt? Mit einer kleinen Prozedur, die sich einiger Hilfsfunktionen zum Erstellen von GUIDs bedient und so die entsprechenden Werte zum Einfügen in das Feld Beispielwert ermittelt hat.

Die Tabelle mit den Beispieldaten

Bild 2: Die Tabelle mit den Beispieldaten

Diese Prozedur finden Sie in Listing 1. Sie durchläuft eine Schleife mit Werten von 1 bis 100.000 und erzeugt bei jedem Durchlauf eine neue GUID mit der Funktion CreateGUID (siehe Modul mdlTools). Die folgende Anweisung legt jeweils einen neuen Datensatz mit der frisch ermittelten GUID in der Tabelle tblBeispieldaten an. Und das dauerte noch nicht einmal besonders lang – gerade mal eine gute Minute.

Public Sub BeispieltabelleFuellen()
     Dim db As DAO.Database
     Dim l As Long
     Dim strBeispielwert As String
     Set db = CurrentDb
     For l = 1 To 100000
         strBeispielwert = Mid(CreateGUID, 2, 36)
         db.Execute "INSERT INTO tblBeispieldaten(Beispielwert) VALUES('" _
             & strBeispielwert & "')", dbFailOnError
     Next l
End Sub

Listing 1: Diese Prozedur legt schnell 100.000 verschiedene Datensätze in einer Tabelle an.

Kombinationsfeld anlegen

Im ersten Versuch soll das Kombinationsfeld zunächst ohne Rücksicht alle Datensätze der Tabelle anzeigen. Dazu fügen Sie einem neuen, leeren Formular ein Kombinationsfeld namens cboBeispielwerte hinzu. Stellen Sie die Eigenschaft Datensatzherkunft auf den Wert tblBeispieldaten ein (s. Bild 3).

Das Kombinationsfeld zum Ausprobieren in der Entwurfsansicht

Bild 3: Das Kombinationsfeld zum Ausprobieren in der Entwurfsansicht

Klicken Sie dann auf die Schaltfläche mit den drei Punkten, um den Abfrage-Generator zu öffnen. Wir benötigen zwar die Daten der Tabelle tblBeispieldaten, aber wir wollen diese noch nach dem Inhalt des Feldes Beispielwert in aufsteigender Reihenfolge sortieren. Dazu passen Sie die Datensatzherkunft wie in Bild 4 an.

Die Datensatzherkunft des Kombinationsfeldes

Bild 4: Die Datensatzherkunft des Kombinationsfeldes

Da die Datensatzherkunft nun aus dem Primärschlüsselfeld und dem Feld mit den anzuzeigenden Daten besteht, stellen wir noch die beiden Eigenschaften Spaltenanzahl auf 2 und Spaltenbreiten auf 0cm ein. Auf diese Weise wird nur der Wert des Feldes Beispielwert angezeigt, gleichzeitig können wir aber den Primärschlüsselwert des Kombinationsfeldes auslesen.

In der Formularansicht zeigt das Kombinationsfeld nun die Einträge der Datensatzherkunft an (s. Bild 5).

Kombinationsfeld mit Daten

Bild 5: Kombinationsfeld mit Daten

Aber wie viele Datensätze zeigt es an? Dass es nicht alle Datensätze der Datensatzherkunft sind, können wir leicht ermitteln, indem wir im Kombinationsfeld mit der Bildlaufleiste nach ganz unten scrollen. Aber aufgepasst: Wenn Sie den Balken im ersten Anlauf ganz nach unten ziehen, springt es kurz darauf wieder weiter nach oben. Sie können den Balken noch mehrmals bis ganz nach unten ziehen – es dauert eine Weile, bis das Kombinationsfeld alle Datensätze erfasst hat und tatsächlich bis ganz nach unten springt.

Dies gelingt wesentlich schneller, wenn Sie das Kombinationsfeld aufklappen (beispielsweise mit der Taste F4) und dann die Tastenkombination Strg + Ende betätigen.

In unserem Beispiel landen wir dann zwar ganz unten (weiter runter geht es nicht), aber wir treffen dort sicher nicht den letzten Datensatz an – dieser müsste eigentlich mit dem Buchstaben F beginnen.

Stattdessen sind wir aber noch nicht einmal über die Zahl 5 hinaus (s. Bild 6). Dabei sei angemerkt, dass die Tabelle nach einem Test nun 200.000 Datensätze enthält.

Der letzte angezeigte Datensatz im Kombinationsfeld

Bild 6: Der letzte angezeigte Datensatz im Kombinationsfeld

Um herauszufinden, wie viele Datensätze das Kombinationsfeld enthält, verwenden wir die Eigenschaft ListCount des Kombinationsfeldes.

Debug.Print Forms! frmKombinationsfeldMitVielenDaten! cboBeispielwerte.ListCount
  65536 

Wenn Sie, wie ich, auch keine Lust haben, solch lange Ausdrücke einzugeben, können Sie das Kombinationsfeld auch direkter referenzieren – Sie müssen lediglich sicherstellen, dass es im aktuellen Access-Fenster den Fokus hat:

Debug.Print Screen.ActiveControl.ListCount
  65536 

Und siehe da – wir finden genau 65.536 Datensätze vor, also 2 hoch 16. Nun haben wir ein Problem: Dank der Begrenzung kann der Benutzer die Datensätze im hinteren Bereich der Datensatzherkunft überhaupt nicht auswählen, denn diese sind schlicht nicht im Kombinationsfeld enthalten.

Datensatzherkunft nach Wortanfang

Doch natürlich bemühen wir uns, auch für dieses Problem eine Lösung zu finden. Diese sieht so aus, dass wir den Benutzer auffordern, ein oder mehrere Zeichen einzutippen, mit denen der gesuchte Ausdruck beginnt (s. Bild 7).

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.

Ich habe die Datenschutzbestimmungen zur Kenntnis genommen.