Merkwürdiges Kombinationsfeld-Verhalten

Das Problem, das sich hinter dem Titel verbirgt, ist möglicherweise nicht auf das Verhalten von Kombinationsfeldern beschränkt – es ist jedoch der Punkt, an dem es uns dank einer Leseranfrage aufgefallen ist. Diese enthielt die Frage, warum die “Automatisch ergänzen”-Funktion für Kombinationsfelder nicht mehr funktionierte. Das haben wir uns einmal genauer angeschaut und waren verblüfft über die Lösung: Eine Access-Option hat uns einen Strich durch die Rechnung gemacht.

Um das Problem nachzustellen (wenn es in Ihrer aktuellen Access-Konfiguration besteht), erstellen Sie eine Tabelle namens tblAnreden mit den beiden Feldern ID (Primärschlüsselfeld mit Autowert) und Anrede (Textfeld) und füllen diese mit zwei Datensätzen mit den Werten Herr und Frau.

Dann erstellen Sie ein neues, leeres Formular und fügen diesem ein Kombinationsfeld hinzu. Stellen Sie für die Eigenschaft Datensatzherkunft die soeben erstellte Tabelle tblAnreden ein. Legen Sie für die beiden Eigenschaften Spaltenanzahl und Spaltenbreiten die Werte 2 und 0cm fest.

Wenn Sie nun das Formular in der Formularansicht anzeigen und den ersten Buchstaben eines der Einträge eingeben, sollte das Kombinationsfeld wie in Bild 1 reagieren und den Inhalt automatisch ergänzen.

So soll die automatische Ergänzung funktionieren.

Bild 1: So soll die automatische Ergänzung funktionieren.

Sollte Ihr Access-System jedoch eine bestimmte Einstellung aufweisen, dann geschieht genau das nicht – dann müssen Sie den Wert wie in Bild 2 komplett selbst eingeben oder halt per Kombinationsfeld auswählen.

Unter bestimmten Umständen funktioniert es jedoch nicht.

Bild 2: Unter bestimmten Umständen funktioniert es jedoch nicht.

Was die Lösung erschwert hat: Es konnte kein allgemeiner Bug sein, denn auf all meinen anderen Datenbanken hat das Kombinationsfeld wie erwartet funktioniert.

Die Suche nach der Lösung

Wie findet man nun die Lösung für ein solches Problem In Kurzform: Als erstes prüft man natürlich, ob die naheliegenden Eigenschaften unterschiedlich sind – also zum Beispiel ob Automatisch ergänzen überhaupt aktiviert ist. Das war jedoch der Fall.

Da die Kombinationsfelder in allen Datenbanken funktionierten außer in der meines Kunden, habe ich erst einmal ein einfaches Formular wie das zuvor beschriebene mit dem Kombinationsfeld zur Auswahl der Anreden erst in der Anwendung des Kunden erstellt und dann in einer meiner eigenen Anwendungen.

Das Verhalten blieb gleich: In der Kundenanwendung keine automatische Ergänzung, in meinen Anwendungen schon.

Dann habe ich die Formulare der beiden Anwendungen mit der folgenden Anweisung in Textdateien exportiert:

Application.SaveAsText acForm, "<Formularname>", "<Pfad>"

Die so entstandenen Textdateien habe ich dann verglichen und keine nennenswerten Unterschiede gefunden.

Danach habe ich mir überlegt, welche Eigenschaften einer Datenbank sich noch auf das Verhalten von Steuerelementen auswirken könnten und bin auf die Access-Optionen für die aktuelle Datenbank gekommen.

Diese habe ich dann geöffnet und ein wenig herumexperimentiert. Ich dachte erst, ich hätte die Lösung, als ich die Eigenschaft Cacheformat verwenden, das mit Microsoft Access 2010 und höher kompatibel ist deaktiviert habe (siehe Bild 3).

Diese Option führte kurzzeitig zum Erfolg.

Bild 3: Diese Option führte kurzzeitig zum Erfolg.

Direkt danach funktionierte die automatische Ergänzung wieder! Allerdings nur solange, bis ich die Datenbank geschlossen und wieder geöffnet habe. Auch wenn danach die oben genannte Option immer noch deaktiviert war, blieb die automatische Ergänzung aus. Der Verdacht, dass das Verhalten etwas mit den Optionen der Access-Datenbank zu tun hatte, erhärtete sich.

Allerdings brachten Experimente mit den übrigen Eigenschaften aus dem Bereich Aktuelle Datenbank keine neuen Erkenntnisse. Also holte ich die Holzhammer-Methode heraus. Ich wollte alle Optionen leeren beziehungsweise die, hinter denen eine Property der aktuellen Datenbank stand, löschen. Viele der Optionen kann man über die Properties-Auflistung des Database-Objekts der aktuellen Datenbankdatei einstellen.

Dazu verwendete ich die folgende Prozedur. Diese deklariert zunächst eine Variable für das aktuelle Database-Objekt namens db und eine Laufvariable namens i:

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar