Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Firebird-Spalte ohne Groß-Klein-Schreibung sortieren (https://www.delphipraxis.net/157523-firebird-spalte-ohne-gross-klein-schreibung-sortieren.html)

Perlsau 17. Jan 2011 14:05

AW: Firebird-Spalte ohne Groß-Klein-Schreibung sortieren
 
Zitat:

Zitat von idefix2 (Beitrag 1075131)
Warum um Himmels Willen machst Du es Dir so kompliziert? Und wenn die Spalte später noch in einem anderen Grid auftaucht oder eine andere Spalte in einer anderen Tabelle dazukommt, die Du caseinsensitiv haben willst, hast Du jedesmal von Neuem das Theater.

Wohl weil ich's nicht besser weiß, mach ich's so kompliziert. Dennoch leuchtet mir dein Argument auf Anhieb ein.

Zitat:

Zitat von idefix2 (Beitrag 1075131)
Mit einer geeigneten Collation bei der Spalte brauchst Du keine einzige Zeile zusätzlich zu programmieren, um die eine Spalte caseinsensitiv zu sortieren. Das ist gerade mal eine Klausel bei der Spaltendefinition!

Ich trage jetzt also mal in der Spalte TITEL, um die es mir geht, als Collation DE-DE ein. Charset ist ISO8859_1, das lasse ich so stehen. Mal schauen, was passiert ...

Nun, es werden wieder die Großbuchstaben vor den Kleinbuchstaben sortiert ...

Zitat:

Zitat von idefix2 (Beitrag 1075131)
Dazu kommt, dass mit der Wahl einer geeigneten Collation auch die Umlaute sinnvoll mitsortiert werden, was bei der Standard Firebirdcollation nicht der Fall ist.

Welche Collation sollte ich denn bei der Spaltendefinition in der Spalte COLLATION eintragen?

idefix2 17. Jan 2011 23:52

AW: Firebird-Spalte ohne Groß-Klein-Schreibung sortieren
 
Die meisten Standard Firebird collations sind case sensitiv.
Aber mit dem folgenden Befehl erstellst Du Dir in der Datenbank auf einfachste Art eine case-insensitive Collation:

Code:
create collation meine_collation
    for ISO8859_1
    from de_de
    case insensitive;
Dabei ist ISO8859_1 der zugrundeliegende Zeichensatz (könnte auch ein beliebiger anderer sein) und de_de die zu diesem Zeichensatz gehörende casesensitive Sortierung (könnte auch eine beliebige andere sein).


Bei den entsprechenden Spaltendefinitionen schreibst Du dann: ... collate meine_collation

Perlsau 18. Jan 2011 14:57

AW: Firebird-Spalte ohne Groß-Klein-Schreibung sortieren
 
Zitat:

Zitat von idefix2 (Beitrag 1075391)
Die meisten Standard Firebird collations sind case sensitiv.
Aber mit dem folgenden Befehl erstellst Du Dir in der Datenbank auf einfachste Art eine case-insensitive Collation:
Code:
create collation meine_collation
    for ISO8859_1
    from de_de
    case insensitive;
Dabei ist ISO8859_1 der zugrundeliegende Zeichensatz (könnte auch ein beliebiger anderer sein) und de_de die zu diesem Zeichensatz gehörende casesensitive Sortierung (könnte auch eine beliebige andere sein).
Bei den entsprechenden Spaltendefinitionen schreibst Du dann: ... collate meine_collation

Okay, ich hab jetzt also den SQL-Editor innerhalb von IBExpert light aufgerufen und eine collation mit dem Namen COL_INSENSI erstellt, wie du es oben beschrieben hast. Das hat Firebird anstandslos kompiliert. Als nächstes hab ich mittels Doppelklick auf die betreffende Spalte in den Feld-Definitionen den Eintrag in der Collation-Spalte von DE_DE auf COL_INTENSI umgestellt. Nachdem ich dann meine umständliche Lösung – Order by LOWER(TITEL) – in der Delphi-IDE rückgängig gemacht und den ursprünglichen Quellcode wieder hergestellt habe, zeigt mir meine Tabelle jedoch wieder die falsche Sortierung:

Der String "In The" wird vor dem String "In drei" aufgeführt (bei aufwärtiger Sortierung). Hat leider nicht funktioniert ...

Vielleicht kannst du ja anhand meiner ausführlichen Dokumentation meiner Schritte erkennen, ob ich dabei einen Fehler gemacht habe.

Hab dennoch herzlichen Dank für deine bisherigen Bemühungen, mir auf die Sprünge zu helfen :wink:

Edit will noch wissen, wo denn die von mir erstellte Collation abgespeichert wird, bzw. wo ich sie eventuell ändern kann.

idefix2 19. Jan 2011 00:01

AW: Firebird-Spalte ohne Groß-Klein-Schreibung sortieren
 
So unmittelbar fällt mir nichts auf, was Du falsch gemacht haben könntest (ich gehe davon aus, das die unterschiedliche Schreibung nur ein Tippfehler im Posting ist und die Bezeichnung in der Datenabnk richtig ist). Hast Du irgend ein Tool installiert, um direkt in der Datenbank zu fuhrwerken, das würde das Debugging denke ich wesentlich vereinfachen? Ich verwende Database workbench lite für Firebird, das kann ich nur wärmstens empfehlen: es ist gratis und absolut optiomal, um sich in Firebird und SQL einzuarbeiten: Du kannst z.B. ein SQL statement eingeben und siehst unmittelbar das Ergebnis-Set, Du kannst Dir alle Tabellen- und Spalteneigenschaften anzeigen lassen etc.

So wie es aussieht, hat die Spalte die neue Collation nicht zugeordnet bekommen, ich kenn aber IBExpert nicht und hab keine Ahnung, woran es liegen könnte - wenn Du Dir die Spalteneigenschaften anzeigen lässt, dürfte dort nach wie vor de-de drinstehen, oder?

Um den Fehler einzugrenzen, könntest Du ja probeweise eine Collation-Klausel direkt in der SQL Query angeben - das hat dann höhere Priorität als die Default-Collation der Spalte - und schauen, ob dann das richtige Ergebnis angezeigt wird, Wenn ja, ist die Collation richtig angelegt und es hat nur die Zuordnung zur Spalte aus irgend einem Grund nicht geklappt, wenn nein, dann ist schon die Definition der Collation schiefgegangen.

Neue Collations ebenso wie die Zuordnung der Collation zu den Spalten wird in den Systemtabellen der Datenbank festgehalten, ich habe es jetzt nicht im Detail im Kopf, aber sie müssten sich auch mit irgendeinem alter-Statement ändern lassen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:53 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz