AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Firebird-Spalte ohne Groß-Klein-Schreibung sortieren

Firebird-Spalte ohne Groß-Klein-Schreibung sortieren

Ein Thema von Perlsau · begonnen am 14. Jan 2011 · letzter Beitrag vom 19. Jan 2011
Antwort Antwort
Seite 2 von 2     12
Perlsau
(Gast)

n/a Beiträge
 
#11

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

  Alt 17. Jan 2011, 14:05
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.

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 ...

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?
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#12

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

  Alt 17. Jan 2011, 23:52
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
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#13

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

  Alt 18. Jan 2011, 14:57
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

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

Geändert von Perlsau (18. Jan 2011 um 16:51 Uhr)
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#14

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

  Alt 19. Jan 2011, 00:01
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.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz