Einzelnen Beitrag anzeigen

MasterDetail

Registriert seit: 6. Sep 2016
8 Beiträge
 
#1

(MariaDB) Sortierreihenfolge in FDTable unterschiedlich

  Alt 10. Okt 2017, 15:36
Datenbank: MariaDB • Version: 10.1.13 • Zugriff über: FireDAC
Hallo,

ich habe ein kleines Problem mit der Verwendung von FDTable in Verbindung mit unserer MySQL/MariaDB-Datenbank:
Die Sortierung vom Server (Sortierung mit ORDER BY) unterscheidet sich von der Sortierung auf dem Client (welche anhand der Eigenschaft "SortLocale" sortiert).

Insbesondere gibt es Probleme mit der Sortierung von Leerzeichen und Sonderzeichen. Wir sind folgende Sortierung gewöhnt: Leerzeichen -> Sonderzeichen -> Zahlen -> Buchstaben.

Da die FDTable ja seitenweise einliest mit "LIMIT X" und "WHERE" in Verbindung mit einem Primärschlüsselwert, kommt dieser durcheinander wenn ein doppelter Datensatz auftaucht.
In der Hilfe von Embarcadero wird empfohlen, die Formatoptions der FDTable entsprechend zu setzen:

SortLocale := MAKELCID(MAKELANGID (LANG_GERMAN, SUBLANG_GERMAN), SORT_DEFAULT);
SortOptions := [soNoSymbols];
StrsTrim := false;

- "SortLocale" hat nach der Ermittlung der obenstehenden LanguageID den Wert "1031". Default-Wert wäre "1024" -> Nichts gebracht
- "[soNoSymbols]" bewirkt den gleichen Fehler schon beim Öffnen und holen der ersten 4 Datensätze.
- "StrsTrim" bewirkt keinen Unterschied.

Ich habe mal aus Spaß "SortLocale" auf 0 gesetzt. Dann trat der Fehler nicht mehr an der gewöhnlichen Stelle auf, dafür aber ein paar 10000 Datensätze weiter.
Getestet wurde es in unserem Artikelstamm, dabei ist die FDTable angewiesen, die Tabelle nach der "Benennung" zu sortieren.

Nun zu meiner eigentlichen Frage:

Arbeitet ihr auch mit FDTables?
Hattet ihr mal das gleiche Problem?
Wenn ja, welche Werte benutzt ihr für die Sortieroptionen?

Nebenbei:
Die Tabelle auf dem Server hat die Standardkollation "latin1_swedish_ci", probiert habe ich aber auch "latin1_german1_ci" und "latin1_german2_ci".
Egal welche der drei Kollationen, bei einer Abfrage über HeidiSQL stand stets das Leerzeichen an erster Stelle und dann Sonderzeichen etc....
  Mit Zitat antworten Zitat