Entwickler-Ecke

Datenbanken - Sortierreihenfolge ändern


D. Annies - Sa 18.05.13 06:46
Titel: Sortierreihenfolge ändern
Hi, Delpher,

wie kann ich die Sortierreihenfolge so ändern, dass z.B. Özdemir als Oezdemir eingeordnet wird und nicht "später"
ausgegeben wird?

Danke, Detlef


jaenicke - Sa 18.05.13 08:00

Nach dem order by kannst du die Sortierung mit collate einstellen. Beim
MS SQL Server gibt es z.B. deutsch oder auch deutsch wie im Telefonbuch.


D. Annies - Sa 18.05.13 17:23

Moin, moin,

komme leider nicht weiter, die Phrasen, die ich versucht habe, werden zur
Laufzeit leider alle abgelehnt, z.B. collate latin1_german2_ci usw.

Fehlermeldung ist: Allgemeiner SQL-Fehler, unrecognized phrase/keyword.

Noch ne Idee?

LG, Detlef


Tranx - Sa 18.05.13 17:34

Hallo, welchen SQL-Server benutzt Du denn? Bei MySQL sollte das mit dem Collate funktionieren.


D. Annies - Sa 18.05.13 17:38

Hi,

es ist noch die alte BDE-Umgebung, und ein FoxPro-Treiber - leider.

LG, Detlef


Tranx - Sa 18.05.13 17:48

Detlef, dann wird wohl das mit Collate nicht funktionieren. Versuche doch mal in der Systemsteuerung die BDE-Verwaltung und dort bei Foxpro-Treiber einen anderen Langdriver (Da gibt es Auswahlen (z.B. DBASE deu cp 850).

Alternative: Langdriver auf 'WEurope' ANSI


jaenicke - Sa 18.05.13 22:18

user profile iconD. Annies hat folgendes geschrieben Zum zitierten Posting springen:
es ist noch die alte BDE-Umgebung, und ein FoxPro-Treiber - leider.
Dann wirst du das wohl manuell hinterher sortieren müssen, wenn du die Daten aus der DB ausliest. Denn meines Wissens wird dort collate generell nicht unterstützt und die wenigen verfügbaren Einstellungen beinhalten glaube ich keine, die dir da helfen kann.


Tranx - So 19.05.13 06:36

Was auf vielleicht möglich ist, aber sicher Deine Datenbankperformance sehr stark herabsetzt, ist ein berechnetes Feld, nach dem Du dann sortierst (wenn das geht, ich habe es selber , wegen des Performanceverlustes noch nicht ausprobiert). Du musst dann manuell, wie Jaenicke schreibt, das Sortierfeld und deren Inhalte bearbeiten:


Oezdemir -> OEZDEMIR
Özdemir -> OEZDEMIR
Müller -> MUELLER
:

Vielleicht ist das ein Weg. Aber - wie gesagt, sicher mit starkem Performanceverlust verbunden. Oder Du erzeugst ein Sortierfeld und dann belegst Du dieses mit den oben geannten Werten aus Deiner Datenbank. Dann musst Du bei jeder Änderung deines Ursprungsfeldes aber auch gleich das Sortierfeld mit ändern!! Und bei jedem Anlegen eines neuen Datensatzes das Sortierfeld mit belegen!


jaenicke - So 19.05.13 09:11

user profile iconTranx hat folgendes geschrieben Zum zitierten Posting springen:
Was auf vielleicht möglich ist, aber sicher Deine Datenbankperformance sehr stark herabsetzt, ist ein berechnetes Feld, nach dem Du dann sortierst (wenn das geht, ich habe es selber , wegen des Performanceverlustes noch nicht ausprobiert).
Das würde nur bei einer Datenmenge im Speicher funktionieren, bei der man zur Laufzeit einen Index darauf setzen kann. TClientDataSet unterstützt das, wäre aber nur in Delphi 6 Enterprise verfügbar, die kostenlosen Versionen Delphi 7 PE und TD (aus den Profilangaben) haben das beide nicht. Auch Alternativen wie TADMemTable aus AnyDAC/FireDAC könnten das, aber auch das kostet ja.

Insofern ist die sinnvollste Variante schon alles aus der DB auszulesen und die Daten manuell zu behandeln. Es geht ja hier vermutlich immer noch um Schülerdaten, und selbst wenn das dann 1000 Datensätze wären, das könnte man ja in Millisekunden alles selbst sortieren usw. (etwas ähnliches habe ich vor einigen Jahren mal gemacht, da dauerte dann ein Live-Filter auf alle Felder bei mehreren hundert Datensätzen in einer eigenen Datenstruktur nur wenige Millisekunden).


D. Annies - So 19.05.13 16:01

Hi, Sebastian,

mittlerweile konnte ich eine IdNr mit auslesen und danach sortieren.

Danke für deine Mühe.

LG, Detlef