Entwickler-Ecke

Datenbanken - DBGrid nach Wochentage sortieren


RockyMountains - Mi 25.08.10 01:01
Titel: DBGrid nach Wochentage sortieren
Hallo Delphi-Forumianer.

Ich suche schon seit ein paar Tagen eine Spalte im TDBGrid mit dem Namen "Wochentage" und dem Inhalt 'Montag' bis 'Sonntag' in richtiger chronologischer Reihenfolge zu sortieren. Scheitere aber schon an den Anfängen. Hat vielleicht jemand von euch eine Idee? Ich programmiere erst seit ca. 2 Jahren in Delphi und tue mich da scheinbar doch ein wenig schwer noch im Moment ;(

Viele Grüsse

leider nicht aus den RockyMountains ;)


mkinzler - Mi 25.08.10 07:49

Sortiere, die dahinter liegende Datenmenge (DataSet)


Critter - Mi 25.08.10 10:18

Hallo,

wie ermittelst du denn die dahinter liegende Datenmenge? Ist das einfach eine Tabelle oder das Ergebnis eines Querys? Dann wäre noch interessant zu wissen, wie die Wochentage in der Tabelle liegen? Ist es ein Datumsfeld, eine Nummer (Wenn wielcher Wert entspricht dann welchem Wochentag) oder ein String? Zu guter Letzt könnte noch die Information helfen, um welche Datenbank es sich handelt.
Je nachdem könnte man dann überlegen ob es möglich ist das ganze schon im Query zu sortieren oder ob man Creativ werden muss.

critter


RockyMountains - Mi 25.08.10 12:32

Hallo,

ich verwende eine mySQL-Datenbank mit TClientDataSet und TSQLQuery. Das Problem ist die Datenquelle. Die mySQL-Datenbank enthält die Informationen tatsächlich als String in der Form von 'Montag' bis 'Sonntag'. Leider habe ich darauf keinen Einfluss und werde daran auch nichts ändern können. Ich liste die Daten bisher mit einem einfachen Query der Form: SELECT * from `tabelle`;

Ich bin für alle Vorschläge offen :)
Danke schon mal für eure Bemühungen


mkinzler - Mi 25.08.10 13:07


SQL-Anweisung
1:
SELECT * from `tabelle` order by wochentag;                    


Nersgatt - Mi 25.08.10 13:19

Hast Du die Möglichkeit, die Datenbank zu ändern? Den Wochentag als Text zu speichern ist nicht gerade geschickt (wie Du jetzt beim Sortieren bemerkst).
Wenn Du das nicht ändern kannst, könntest Du im Select das umsetzen. Untestützt MySQL z.B. IIF?
Select IIF(Wochentag = 'Montag', 1, IIF(Wochentag = 'Dienstag', 2, ......


Critter - Mi 25.08.10 13:20

Hallo,

da fallen mir 2 Dinge ein die man Probieren könne. Zum einen Natürlich auf das DBGrid zu Verzichen und die Daten in eine nicht DB Gebundene Komponente zu verwenden (ich würde den VirtualStringTree nehmen) und diese von Hand sortiert zu befüllen. Als zweite Möglichkeit würde ich ein wenig mit der FIND_IN_SET Funktion experimentieren. Ich habe sie noch nicht genutzt aber wenn ich das in der Doku [http://dev.mysql.com/doc/refman/5.1/de/string-functions.html] richtig verstehe müsste es ungefähr so gehen:


SQL-Anweisung
1:
2:
SELECT MyImortantField, FIND_IN_SET(WochtagStrFeld, 'Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag'As DayNum
Order By DayNum


In DayNum müsstest du dan für Montag eine 1, für Dienstag eine 2 usw. bekommen.

critter