Autor: André Minhorst, Duisburg
Normalerweise sollte das Füllen von Kombinations- und Listenfeldern keine großartigen Probleme bereiten. Sie können dies einfach durch Zuweisen einer Datensatzherkunft wie einer Tabelle oder Abfrage, einer Wertliste oder einer Feldliste erledigen. Manchmal müssen Sie allerdings auf eine eher weniger bekannte Methode zurückgreifen: die Verwendung einer Funktion als Herkunftsart.
Wenn Sie eine Tabelle oder Abfrage mit den anzuzeigenden Daten verwenden können, bereiten Kombinations- und Listenfelder keine Probleme. Ebenso verhält es sich, wenn Sie eine kleine Menge statischer Daten haben und diese dem Steuerelement in Form einer Wertliste übergeben.
Kritisch wird es, wenn die Daten weder in Tabellen- noch in Abfrageform vorliegen und die Datenmenge zu groß ist, um die Bedingungen für den Einsatz einer Wertliste zu erfüllen – denn hier gibt es leider eine Beschränkung bezüglich der Zeichenzahl.
Ein solcher Fall tritt z. B. im Beitrag Dateien verwalten mit Access in der Ausgabe 4/2002 von Access im Unternehmen auf. Dort sollen Listenfelder dazu verwendet werden, um Verzeichnisse und Dateien anzuzeigen.
Function <Funktionsname>(Feld As Control, _ ID As Variant, Zeile As Variant, _ Spalte As Variant, Code As Variant) As Variant ''Deklarationsteil Select Case Code Case acLBInitialize ''Initialisieren Case acLBOpen ''öffnen. Case acLBGetRowCount ''Zeilen lesen Case acLBGetColumnCount ''Spalten lesen Case acLBGetColumnWidth ''Spaltenbreite abrufen. Case acLBGetValue ''Daten lesen. Case acGetFormat ''Festlegen des Formats Case acLBEnd ''Ende End Select End Function
Quellcode 1
Die Verwendung einer Wertliste scheint prädestiniert für diese Aufgabe, doch wenn Sie einmal die Verzeichnisse mit Ihrem Windows Explorer durchsehen, stellen Sie fest, dass 2048 Zeichen schnell verbraucht sind.
Eine andere Alternative wäre das Anlegen einer temporären Tabelle. Wenn Sie diese Tabelle allerdings oft verwenden, bläht sich die Datenbank sehr schnell auf und erfordert regelmäßiges Komprimieren.
Daher bleibt als letzte Möglichkeit die Verwendung einer Funktion als Herkunftsart des Listenfeldes. Sie haben sich nicht verlesen: Die Funktion wird tatsächlich als Herkunftsart und nicht als Datensatzherkunft eingetragen.
Die Funktionen zum Füllen von Kombinations- und Listenfeldern heißen Callback-Funktionen. Access ruft eine solche Funktion immer mehrmals hintereinander mit unterschiedlichen Parametern auf. Daher muss die Callback-Funktion ein bestimmtes Format haben. In Quellcode 1 finden Sie das Grundgerüst einer Callback-Funktion.
Bild 1: Beispiele für Listenfelder ohne Datensatzherkunft
Bereits im Aufruf finden Sie einige Parameter, die möglicherweise die Frage aufwerfen, wie sie zu füllen sind. Die Antwort ist einfach: Access übernimmt die Zuweisung der entsprechenden Werte. Sie müssen nur den Funktionsnamen für die Eigenschaft Herkunftsart des Kombinations- oder Listenfeldes eintragen.
Access ruft dann die Funktion unterschiedlich oft mit den verschiedenen Werten für den Parameter Code auf.
Mit der Select Case-Anweisung ermittelt die Funktion dann, welcher Schritt als nächster auszuführen ist. Alles Weitere lässt sich am besten an Hand eines Beispiels erläutern.
Die Funktionsweise von Callback-Funktionen soll an Hand eines Listenfeldes erläutert werden, das mit den Dateien eines bestimmten Verzeichnisses gefüllt werden soll (siehe Bild 1).
Hinweis
Das in den folgenden Abschnitten beschriebene Beispiel ist in der Beispieldatenbank zum Beitrag Dateien verwalten leicht gemacht enthalten. Sie finden die Datenbank namens Dateimanager97.mdb bzw. Dateimanager2000.mdb auf der Heft-CD.