Liebe Forenprofis,
heute wende ich mich mit einem Problem an Euch, von dem ich hoffe, dass ich nur deshalb nichts Gescheit's dazu im Internet finde, weil es so einfach ist. Aber ich komme einfach nicht darauf.
Ich habe diverse Endlosformulare mit Namenslisten. Diese basieren auf Abfragen, die nach Nachnamen (und Vornamen) aufsteigend sortiert sind. Nun bekomme ich in Access folgende Reihenfolge dargeboten:
Groß, Sabine
Große, Sabine
Große Wagner, Sabine
Großenburg, Sabine
Große-Wagner, Sabine
Der Bindestrich wird bei der Sortierung ignoriert und das ist für den Anwender wahnsinnig verwirrend und deshalb möchte ich das wahnsinnig gerne ändern. Es wäre toll, wenn ich Access beibiegen könnte, dass es den Bindestrich als Zeichen berücksichtigt.
Folgende Sachen habe ich schon ausprobiert:
In allen Modulen stand ursprünglich "Option Compare Database". Stattdessen habe ich "Text" und "Binary" ausprobiert und auch die Option komplett weggelassen, aber ohne einen sichtbaren Unterschied.
Dann habe ich in den Access-Optionen -> Allgemein -> "Sortierreihenfolge bei aktueller Datenbank" sowohl auf "Allgemein" wie auch auf "deutsches Telefonbuch" umgestellt, dies bei Programmebene und verknüpfter Datenebene und jeweils die Datenbanken komprimiert und repariert. Nüscht passiert.
Dann habe ich in der Windows-10-Systemsteuerung -> Region -> Sortiermethode ändern -> abwechselnd "Wörterbuch" und "Telefonbuch DIN" ausgewählt und auch das scheint keinen Unterschied zu machen.
Ihr Lieben, was hab ich übersehen? Bis hierhin schonmal herzlichen Dank fürs Lesen und Mittenken
Irene
Hi Irene,
bezüglich Sortierung ist Access ziemlich unflexibel. Die Sortierung wird beim Anlegen einer neuen Datenbank entsprechend des eingestellten Sortier-Schemas in den Optiuonen für eine Datenbank einmalig festgelegt. Eine nachträgliche Änderung ist nicht möglich.
Man könnte jetzt hingehen und in der Abfrage die Bindestriche in einem weiteren nicht angezeigtem Feld mit der Replace()-Funktion ersetzen und danach sortieren. Damit hebeltman aber eine Index-Nutzung aus und wird bei größerem Datenbestand keine Freude an der abfrage haben.
Alternativ bietes es sich an, wenn man mit einer binären Sortierung leben kann, ein zusätzliches binäres Feld in die Tabelle einzufügen. Weil binäre Felder in der Entwurfsansicht nicht angeboten werden, kann man eines aus der Systemtabelle MSysObjects (vorher dazu in den Navigationseinstellungen Systemtabellen einblenden lassen) aus der Entwurfsansicht kopieren und in die eigene Tabelle einfügen. Mit einer DDL-Abfrage wäre das auch möglich:ALTER TABLE DerTabellenName ADD COLUMN DerNeueFeldName BINARY;Das Feld sollte dann mit einem Index ausgestattet werden.
Nun gilt es, die Nachnamen in das Feld zu befördern. Dazu bietet sich die StrConv()-Funktion an, die in einer Aktualisierungsabfrage verwendet wird.UPDATE DerTabellenName
SET DerNeueFeldName = StrConv(Nachname, 128, 1031);Die 128 steht für vbFromUnicode und die 1031 ist die LCID für die deutsche Sprache in Deutschland -vielleicht darf man sie auch weglassen. Die Darstellung zeigt hinterher vermutlich asiatische Zeichen an, woran man sich nicht stören sollte, weil die Spalte ja nur zur Sortierung verwendet wird. Ich vermute jedoch, dass dabei die Umlaute und das Eszett nicht mehr ordentlich ins Gefüge passen. Das müsstest Du selbst testen. Dann müsste man vor der Behandlung mit StrConv() diese Zeichen in Ae, Oe, Ue, ae, oe, ue und ss umwandeln.
Mit Access Versionen ab 2010 könnte man ein Datenmakro schreiben, das bei Änderungen oder beim Neuanlegen von Datenätzen die Knovertierung in das Binärfeld immer aktuell hält. In niedrigeren Versionen wird man vermutlich im Formular-Ereignis Vor Aktualisierung das Binärfeld beschreiben. Im Bildanhang am Ende des Beitrags kannst Du das Ergebnis mit Deinen Daten betrachten.
Hallo Lachtaube,
das ist ja der Wahnsinn, was Du hier um 2:51 nachts produzierst, da können andere im ausgeschlafenen Zustand nur von träumen! ;-) Vielenvielen Dank für die tollen Lösungsansätze!
Schade, dass ich das Sortierschema nicht nachträglich ändern kann, aber wie ich mittlerweile herausgefunden habe, hätte das eh nichts gebracht. Ich habe nun in den Access-Optionen das Sortierschema für neue Datenbanken auf "Deutsches Telefonbuch" gestellt und eine neue leere Datenbank erstellt, ein paar Testdaten eingetragen und voila: Der Bindestrich wird hartnäckig ignoriert. Frech!
Hast Du (oder jemand der stillen Leser) vielleicht eine Ahnung, welches Schema einen Bindestrich berücksichtigt? Erstellt wurde meine Datenbank mit der Einstellung "Allgemein".
Ich verfolge jetzt erstmal Deine Lösung auf Abfrageebene weiter, indem ich mit Replace ein berechnetes Feld erzeuge, bei dem der Bindestrich im Nachnamen durch einen Unterstrich ersetzt wird (den Unterstrich mag Access nämlich durchaus sortieren). Wenn mir das mein System zu sehr ausbremst, dann beiße ich in den sauren Apfel und arbeite Deinen Vorschlag mit dem Binärfeld auf Datenebene ein. (Da hab ich ein bisschen Bauchweh bei, weil ich finde, dass alles, was Sortierung betrifft, nix in den Tabellen zu suchen hat.) Die "Unterstrichlösung" könnte ich so gesehen auch auf Datenebene als normales Textfeld schreiben lassen, das erspart mir zumindest die chinesischen Zeichen.
Jedenfalls sehe ich jetzt wieder optimistischer in die Zukunft, nochmal herzlichen Dank und noch einen schönen Tag!
Irene
P.S.: Okay, jetzt habe ich es getestet und muss leider vermelden: Das berechnete Replace-Feld ist jetzt schon zu langsam, das macht tatsächlich überhaupt keinen Spaß! Also muss es doch das festgeschriebene Feld sein.
Viele Grüße
Irene