Entwickler-Ecke

Datenbanken - select-Befehl


D. Annies - Mo 10.12.12 09:43
Titel: select-Befehl
Hi, Delpher,
wie kann ich eine Query erzeugen, die nach dem Familiennamen unabhängig von der Groß- Kleinschreibung sortiert?
Sodass also von Rittershausen vor Fuhrmann einsortiert wird?
Danke, Detlef


Nersgatt - Mo 10.12.12 09:55

In Firebird könntest Du UPPER() verwenden:

SQL-Anweisung
1:
select nachname from leute order by UPPER(nachname)                    


Oder bei der Tabellendefinition COLLATE ändern. Da muss man aber wissen, was man tut.


Tranx - Mo 10.12.12 10:15

Entschuldige, aber "von Rittershausen" kann nie vor "Fuhrmann" einsortiert werden, dan "v/V" immer nach "f/F" kommt.

Und bei dem Order by xxx war bei meiner Datenbankanwendung keine Unterscheidung zwischen groß und klein zu sehen.

Ich habe auch mal die Komponenten durchgesehen. Da kann ich auch weder in der Felddefinition noch in der Tabellendefinition (TQuery) sehen, wie man case-sensitive Sortierung ein- oder ausschaltet.

Hast Du mal Order By Nachname probiert und nachgesehen, ob die Kleinbuchstaben dann wirklich nach den Großbuchstaben kommen? Wie gesagt, bei meiner Anwendung wird da keine Konversion wie Upper() durchgeführt und trotzdem klappt das.


WasWeißDennIch - Mo 10.12.12 10:36

Ob case-sensitiv oder nicht hängt wie bereits erwähnt von der Kollation ab. Und "von Rittershausen" kommt nur dann vor "Fuhrmann", wenn man absteigend sortiert ;). Ich bin gerade nicht sicher, aber UPPER gehört entweder zum aktuellen SQL-Standard oder wird zumindest von den meisten verbreiteten RDBMS unterstützt. Daher würde ich es so versuchen wie Nersgatt, das sollte eigentlich funktionieren. Falls nicht, wäre die Angabe des verwendeten RDBMS hilfreich.


D. Annies - Mo 10.12.12 12:51

Entschuldigung, das ist mein Versehen. Ich meinte natürlich, dass "von Rittershausen" vor "Weinheim" einsortiert wird.
Gruß, Detlef

Moderiert von user profile iconMartok: Beiträge zusammengefasst

P.S.
Upper() funzt leider nicht.


WasWeißDennIch - Mo 10.12.12 14:53

Was heißt "funzt nicht"? Wird der Befehl nicht erkannt, oder stimmt nur die Sortierung weiterhin nicht? Welches DBMS?


D. Annies - Mo 10.12.12 15:21

Funzt nicht, heißt, dass der Befehl zur Laufzeit von der BDE nicht erkannt wird.


WasWeißDennIch - Mo 10.12.12 15:38

BDE? Von welcher Datenbank reden wir denn hier, Paradox? In dem Fall müsste ich mich auch erst belesen, das ist so lange her.


Delete - Mo 10.12.12 16:10

user profile iconTranx hat folgendes geschrieben Zum zitierten Posting springen:
Und bei dem Order by xxx war bei meiner Datenbankanwendung keine Unterscheidung zwischen groß und klein zu sehen. Ich habe auch mal die Komponenten durchgesehen. Da kann ich auch weder in der Felddefinition noch in der Tabellendefinition (TQuery) sehen, wie man case-sensitive Sortierung ein- oder ausschaltet. Hast Du mal Order By Nachname probiert und nachgesehen, ob die Kleinbuchstaben dann wirklich nach den Großbuchstaben kommen? Wie gesagt, bei meiner Anwendung wird da keine Konversion wie Upper() durchgeführt und trotzdem klappt das.


Du kannst weder davon ausgehen, daß jeder dasselbe DBMS verwendet wie du noch daß jeder denselben Zeichensatz und dieselbe Sortierung (Collation) einsetzt. Daher wird je nach Zeichensatz eben nicht grundsätzlich nach deutschen Regeln sortiert, und ein Upper an der richtigen Stelle des Select-Strings kann sehr wohl dazu führen, daß nicht zwischen Groß- und Kleinschreibung unterschieden wird. Meine Erfahrungen erstrecken sich von MS-Access über MySQL, Firebird, Interbase bis MsSQL: in allen sind die Sortierungen unterschiedlich bei gleichem Zeichensatz.


Tranx - Mo 10.12.12 16:28

Perlsau, ich gebe Dir Recht. Das ist bei jedeem Datenbanksystem anders. Aber warum eigentlich? Schließlich ist das ja sehr hinderlich, wenn man Daten mit verschiedenen Datenbanksystemen bearbeitet. Es wäre doch sinnvoll, gewisse Normungen oder Schalter zu haben, bei denen man dann die volle Kontrolle über seine Daten hat, und nicht herumrätseln muss, wie man diese so hinbekommt, dass sie dem gewünschten Ergebnis entsprechen. Aber da verlange ich wahrscheinlich zuviel des Guten.


WasWeißDennIch - Mo 10.12.12 17:43

In HTML gibt es ja auch klare Standards, trotzdem kocht jeder Browser-Hersteller sein eigenes Süppchen, damit müssen wir leider leben. Und da das bei SQL nicht anders ist, habe ich ja nun schon 3 mal gefragt, um welche Datenbank es sich eigentlich handelt.


D. Annies - Mo 10.12.12 18:39

@wasweißdennich:
danke für dein Interesse, es ist die BDE = Borland Database Engine, zwar alt,
aber in diesem Prg verwendet.
Gruß, Detlef


WasWeißDennIch - Mo 10.12.12 18:44

Die BDE ist keine Datenbank, sondern nur eine Art "Zugriffsframework" für den Zugriff auf verschiedene DBMS. Die DB dahinter kann dBase, Paradox, Oracle, MS SQL-Server oder was weiß ich sein. Und genau darum geht es mir. Ich habe übrigens mittlerweile recherchiert, auch Paradox kennt wohl UPPER.


D. Annies - Mo 10.12.12 18:50

Ach so, das wusste ich nicht. Es ist eine DBase4-DB dahinter.


WasWeißDennIch - Mo 10.12.12 18:59

Ach Du liebes bisschen. dBase habe ich selbst nie benutzt, da mir das schon zu Delphi 2-Zeiten veraltet erschien. Wenn ich mich recht entsinne verstand das nativ noch nicht einmal SQL, da wundert mich die Fehlermeldung nicht. Handelt es sich um eine Kundendatenbank, oder könntest Du in Erwägung ziehen, auf ein zeitgemäßeres DBMS zu migrieren? Es gibt auch kostenfreie, die den kommerziellen nicht oder nur unwesentlich nachstehen.


D. Annies - Mo 10.12.12 20:19

Es handelt sich um Schule.

Migrieren: Ja, hast du einen Vorschlag?


WasWeißDennIch - Mo 10.12.12 21:03

*Puh*, da gibt es einiges an Auswahl wie PostgreSQL [http://www.postgresql.org/], SQLite [http://www.sqlite.org/], Firebird [http://www.firebirdsql.org/], MariaDB [https://mariadb.org/] oder SQLExpress [http://www.microsoft.com/de-de/download/details.aspx?id=29062] (willkürliche Auswahl). Eine direkte Empfehlung möchte in an dieser Stelle nicht aussprechen, alle haben Vor- und Nachteile, schau sie Dir einfach mal an und entscheide selbst.


Delete - Di 11.12.12 08:18

user profile iconTranx hat folgendes geschrieben Zum zitierten Posting springen:
Entschuldige, aber "von Rittershausen" kann nie vor "Fuhrmann" einsortiert werden, dan "v/V" immer nach "f/F" kommt.


Aber nur, wenn deine Select-Anweisung nicht am Ende lautet ... order by Name desc, denn dann wird V tatsächlich vor F einsortiert ...


Delete - Di 11.12.12 08:32

user profile iconD. Annies hat folgendes geschrieben Zum zitierten Posting springen:
Es handelt sich um Schule.


Das ist ja mal wieder typisch: veraltetes Lehrerwissen soll Schüler auf die moderne IT-Welt vorbereiten :lol:

user profile iconD. Annies hat folgendes geschrieben Zum zitierten Posting springen:
Migrieren: Ja, hast du einen Vorschlag?


MySQL ist sehr umfangreich, noch umfangreicher ist MsSQL. Am einfachsten finde ich persönlich Firebird, sehr übersichtliche Datenbank. Bei HKSoft gibt's ein sehr gutes Interbase/Firebird-Tool zum Erstellen und Verwalten von Datenbanken und Tabellen: IbExpert [http://www.ibexpert.net/ibe_de/index.php?n=Main.DownloadFree].

Meinen eigenen Einstieg in die Entwicklung von Datenbank-Anwendungen fand ich damals mit Hilfe von MsAccess, das es mir erleichterte, zu erkennen, wie eine Datenbank überhaupt funktioniert, wie SQL-Befehle aussehen usw.


D. Annies - Di 11.12.12 10:38

@Perlsau:
Ich muss dich leider enttäuschen: Hier spielt nicht veraltetes Lehrerwissen die
entscheidende Rolle, sondern das "Wissen" der Schulverwaltung! Aber danke für den Smiley :)
Ich kann nur mit der beschriebenen Umgebung auf die Daten zugreifen, obwohl ich natürlich
nach Excel / Text / Word konvertieren kann usw.
LG, Detlef


WasWeißDennIch - Di 11.12.12 10:40

Soll heißen, Du bist auf dBase festgelegt, ob es Dir passt oder nicht?


D. Annies - Di 11.12.12 13:32

Genau so ist es, noch genauer gesagt: auf dBase und einen FoxPro-Treiber.
muahaha - noch Fragen?
LG Detlef

Gibt es eine Lösung?


WasWeißDennIch - Di 11.12.12 14:20

"Hausfrauenlösung": Kopien der zu durchsuchenden Felder anlegen und dafür sorgen, dass diese immer den Ursprungswert in Groß- oder Kleinschreibung enthalten. Danach kann man dann sortieren. Wie man so etwas allerdings realisieren kann, weiß ich mangels dBase-Erfahrung leider auch nicht.


Martok - Di 11.12.12 14:39

dBase sortiert AFAIR immer nach Index-Reihenfolge. Du müsstest also beim Anlegen des Indexes schon die Funktion verwenden.

Wie allerdings die BDE das wegabstrahiert weiß ich nicht, so verrückt war ich nie, dBase mit was anderem als Halcyon/gs6 anzusprechen ;)


jaevencooler - Di 11.12.12 14:56

Moin, Moin,

Paradox und BDE lang lang ists her.....

schau doch mal hier, könnte Dir helfen :



http://www.thedbcommunity.com/index.php?option=com_content&task=view&id=106&Itemid=46


Beste Grüße
Michael


D. Annies - Mi 12.12.12 19:58

Ich danke euch herzlich für eure Mühe!
(Das war ja so cool :)))
Aber nichts hilft - ist halt zu alt.
Vielleicht migriere ich zu Firebird, - habe ich vor 5 Jahren schon einmal versucht, aber da war in
der kostenlosen Version UNICODE noch weggeschaltet, und das sollte doch schon gern dabei sein.

LG, Detlef


Nersgatt - Mi 12.12.12 20:24

Eine gute Entscheidung.

Wenn ich diesen Beitrag von Marco richtig deute, wird die BDE wohl bald komplett rausfliegen. Lang genug mitgeschleppt haben sie es ja:
http://blog.marcocantu.com/blog/delphi_xe3_update1.html (ganz unten in den Kommentaren)

Zitat:
BDE is going to be completely depracated and taken
off the product soon.


D. Annies - Mi 12.12.12 20:27

Jens, weißt du, ob mittlerweile UNICODE geht?


Nersgatt - Mi 12.12.12 20:32

Ja, funktioniert problemlos, ein aktuelles Delphi vorausgesetzt.


WasWeißDennIch - Do 13.12.12 09:33

user profile iconD. Annies hat folgendes geschrieben Zum zitierten Posting springen:
habe ich vor 5 Jahren schon einmal versucht, aber da war in
der kostenlosen Version UNICODE noch weggeschaltet, und das sollte doch schon gern dabei sein.

Kostenlose Version? Ich wusste gar nicht, dass es auch eine kostenpflichtige gibt. AFAIK kostet nur der erweiterte Support Geld, nicht aber Firebird selbst, von daher bin ich gerade etwas verwirrt. Zum Thema Unicode: eine Auflistung der verfügbaren Collations findet man z.B. hier [http://www.destructor.de/firebird/charsets.htm].


vagtler - Do 13.12.12 10:21

user profile iconD. Annies hat folgendes geschrieben Zum zitierten Posting springen:
[...] Vielleicht migriere ich zu Firebird, - habe ich vor 5 Jahren schon einmal versucht, aber da war in
der kostenlosen Version UNICODE noch weggeschaltet, und das sollte doch schon gern dabei sein. [...]

Das stimmt nicht - vor über 6 Jahren wurde schon die finale Firebird 2.0 veröffentlicht - inkl. Unicode-Support. Und auch davor konnte Firebird schon problemlos mit der korrekten Sortierung deutscher Umlaute umgehen (als Nachfolger für eine dBase-Datenbank also sowieso schon mehr als geeignet <g>).

Und eine kostenpflichtige Version von Firebird gab es bislang noch nie.


D. Annies - Do 13.12.12 16:18

Interessant!
Ich verwende ja Delphi 6. - Wegen dem Datenbankmodul. Ist denn eine andere (kostenlose) Version geeigneter?
Danke, Detlef


WasWeißDennIch - Do 13.12.12 16:42

Version wovon? Kostenlose Delphi-Versionen gibt es schon lange nicht mehr, die letzte war TurboDelphi Explorer, aber da wirst Du nur noch mit viel Mühe einen Download finden, und dann brauchst Du auch noch einen Lizenzschlüssel. Außerdem beherrschte auch das noch kein Unicode. Blieben als Alternativen noch Lazarus oder eine Starter-Edition von XE3, die schlägt aber auch mit knapp 200 € zu Buche. Bist Du denn wirklich auf Unicode angewiesen? Falls nicht, stellst Du eben bei Firebird eine deutsche Collation ein und bleibst bei Delphi 6, evtl. mit kostenlosen Zugriffskomponenten wie z.B. UIB [http://www.progdigy.com/?page_id=5].

[edit] Achja, bevor die Frage aufkommt: Migration dBase zu Firebird [http://www.firebirdfaq.org/faq156/] [/edit]


D. Annies - Fr 14.12.12 20:24

Ja, ich bin auf Unicode angewiesen, definitiv - das ist ja gerade der Vorteil ggüber dem
Schulverwaltungs-"Schrott" (!!!)
Welche DataPump soll ich denn nehmen?
LG, Detlef


vagtler - Fr 14.12.12 20:42

user profile iconD. Annies hat folgendes geschrieben Zum zitierten Posting springen:
Ja, ich bin auf Unicode angewiesen, definitiv [...]

Aber Du verwendest doch (bislang) gar keine Unicode-fähige Delphi-Version?
Zitat:
[...] Welche DataPump soll ich denn nehmen? [...]

Wovon redest Du?


D. Annies - Sa 15.12.12 07:18

Doch, ich verwende die tnt-Komponenten, damit klappt Unicode hervorragend.

Mit Datapump meine ich, wie ich die Daten nach Firebird bekomme.
Ihr müsst dabei wissen, dass ich die ganze Arie schon vor ca. 5 Jahren
hinter mir hatte, aber wegen der (definitiv) fehlenden Unicodeunterstützung
alles wieder schweren Herzens zurückgefahren habe.
Und wenn man dann noch einen Plattencrash zwischendurch hatte, ...

Was mir also helfen kann, ist irgendwo ein gutes Tutorial, wie man FB
zum Leben erweckt.

Gruß, Detlef


WasWeißDennIch - Sa 15.12.12 09:46

Die BDE hast Du ja bereits installiert, da sollte m.M.n. "Interbase DataPump v 3.4 standalone application" eigentlich genügen. Falls doch nicht, versuch es mit "Interbase DataPump v 3.4 installation (with uninstall) BDE 5.2 and SQL links included". Interessant liest sich auch die Plugin-Möglichkeit für IBExpert, aber da weiß ich nicht, ob das in der Personal Edition auch funktioniert. Im schlimmsten Fall kannst Du bei Holger (IBExpert) einmal nachfragen, ob er noch die Special Edition vorrätig hat, die lag vor längerer Zeit (ca. 3 Jahre) einmal der c't bei. Das ist beinahe eine Vollversion, allerdings auf 100 MB Datenbankgröße eingeschränkt und nicht mehr auf dem aktuellen Stand, sollte für Deine Belange aber allemal ausreichen.