Entwickler-Ecke

Datenbanken - Sortierung unter Interbase???


CenBells - Fr 29.08.03 14:57
Titel: Sortierung unter Interbase???
Hallo Leute,

ich habe eine Interbase 6.0 Tabelle. Diese Tabelle hat eine Spalte name. Nun möchte ich die ausgabe eines Selects nach dem namen ordnen (mittels ORDER BY Name) Das klappt auch - fast. ich habe allerdings auch Namen, wie Fanta und FIXX eingegeben und da taucht das problem auf.
Ich weiß nicht, warum FIXX vor Fanta ausgegeben wird?
Ich habe schon alle mögliche Zeichensätze ausprobiert, komme aber dennoch nicht weiter. Kann mir jemand helfen?

Gruß
Ken


neojones - Fr 29.08.03 15:25

Weil das große "I" an der zweiten Stelle in "FIXX" höherwertig ist als das kleine "a"....


CenBells - Fr 29.08.03 17:29

Hallo neojones,

das habe ich ja auch verstanden. Allerdings ist es im Explorer nicht so... Und genau so, wie im explorer erwarten die kunden das. Also, groß und kleinschreibung soll nicht bei der Ordenung ausschlaggebend sein.
Also, welcher ZEichensatz muss das dann sein?

Gruß
ken


neojones - Fr 29.08.03 18:22

Weiß ich nicht genau. Kannst Du das ORDER BY mit einem LOWER_CASE ausführen?

Dann hättest Du das Problem erst gar nicht.


hansa - Fr 29.08.03 19:07

normalerweise verwendet man ISO8859_1.


CenBells - So 31.08.03 16:48

Hallo,

ich habe diesen ISO zeichensatz ausprobiert und bekomme auch dort die komische sortierung. Was muss ich denn noch beachten?

Gruß
Ken


hansa - Fr 05.09.03 13:16

ich wandele sowieso beim Suchen/Sortieren immer alles in Großbuchstaben um und Basta. Ich vergleiche also auf SQL-Seite mit UPPER und in Delphi den Suchbegriff mit UpCase. Und halt ISO8859_1. Klappt bisher alles.


CenBells - Sa 06.09.03 01:28

Du sortierst also auch mit
select bla from tabelle
order by UPPER(bla)

???
das teste ich mal... Suchen macht bei mir keine Probleme, nur Sortieren ist halt irgendwie komisch...
Gruß
Ken


hansa - Sa 06.09.03 11:01

Ist das doch noch aktuell?

So kann man z.B. einen Artikel suchen:


Delphi-Quelltext
1:
ArtDS.SelectSQL.Text := 'SELECT * FROM ART WHERE UPPER (BEZ) LIKE UPPER (''%' + LabeledEdit1.Text + '%'') ORDER BY NR';                    


Hierbei kann ich nach "Zwetschgen" suchen. :shock: Selbst wenn ich nicht weiß, wie das geschrieben wird und gebe nur "sch" ein, wirds gefunden. Für Dein Problem dürfte allerdings das UPPER genügen. Also das % und LIKE braucht man für eine Sortierung nicht. Ich muß die Suche nun mal DAU-sicher machen. :mrgreen: Wie ich jetzt selber sehe mache ich das alles mit SQL.


CenBells - Sa 27.09.03 20:47

Hallo,

das thema ist zwar schon ein bisserl älter, aber jetzt bin ich mal wieder dazu gekommen, mich drum zu kümmern.

@Hansa, du hast vorgeschlagen

Quelltext
1:
2:
SELECT * FROM Artikel
  ORDER BY Upper(Name);

Ich habe das nun ausprobiert. -> Leider funktioniert das nicht.

Jetzt habe ich auch mal ne Datenbank mit dem Charset ISO8859_1 erstellt und einige Datensätze eingegeben. Dort ist das Problem noch extremer. Die Sortierung sortiert schon den ersten Buchstaben anders.
Postkarte kommt vor kantine. Aber Test kommt nach Postkarte... Also,

Postkarte
Test
kantine

Kann mir jemand helfen, damit die sortierung ordentlich durchgeführt wird?

Gruß
Ken


hansa - Sa 27.09.03 21:40

hier ist vorab was mit der WHERE - Klausel:

http://tutorial.steelarrow.com/sqltutorial/Where.aro


Delphi-Quelltext
1:
WHERE UPPER (BEZ)                    


Darauf kommt es an, ich sortiere also nur nach Großbuchstaben, zumindest aus Sicht der DB. Wie ich das dann letztendlich anzeige ist egal.


Delphi-Quelltext
1:
ORDER BY UPPER...                    

wird wohl nicht gehen. Siehe Link. Nötig ist es sowieso nicht.


hansa - Sa 27.09.03 22:01

Das Tutorial hier ist das was ich meinte, nicht das von vorher, das habe ich vorhin erst entdeckt (Verwechslung). Sieht aber auch gut aus.

http://www.w3schools.com/sql/


CenBells - Sa 27.09.03 22:24

So, jetzt habe ich den Hasen gefangen.

@Hansa: Also, ich meinte Sortierung. Du sprichst aber die ganze zeit von "Where". Das bezieht sich aber auf Suchen und Filtern. Darum geht es mir nicht.

Ich habe das problem jetzt behoben. Es liegt an der ausgabe der Selektierten datensätze. Dies lässt sich mittels Order By name Collate DE_DE; beeinflussen

Gruß
Ken