AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi TDataSet natürlich sortieren
Thema durchsuchen
Ansicht
Themen-Optionen

TDataSet natürlich sortieren

Ein Thema von trashcandesign · begonnen am 9. Jan 2007 · letzter Beitrag vom 10. Jan 2007
Antwort Antwort
trashcandesign

Registriert seit: 21. Feb 2006
Ort: Mühlhausen
187 Beiträge
 
Delphi XE2 Professional
 
#1

TDataSet natürlich sortieren

  Alt 9. Jan 2007, 16:03
Datenbank: FireBird • Version: 1.5 • Zugriff über: ZeosLib
Moin,

ich hab hier ein TJvDBGrid an dem eine TZQuery hängt.
Mit Klick auf den Titel des Grid soll die Spalte sortiert werden.

Im Moment mache ich das per SQL, also mit ORDER BY.

Ich habe jetzt ein VARCHAR-Feld, das sortiert werden soll.
In dem Feld steht zum Beispiel: 1,2,3,10,1a,1a...

Wenn ich das per ORDER BY sortiere erhalte ich folgende Reihenfolge:

1
10
1a
1b
2
3

Ich bräuchte das ganze aber natürlich sortiert, also:

1
2
3
10
1a
1b


Hat jemand ne Idee, wie ich das realisieren könnte?
Oder wisst Ihr vielleicht ne möglichkeit in einem TDataSet die einzelnen Records zu verschieben, dass ich mir so eine Sortierung selbst schreiben könnte?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: TDataSet natürlich sortieren

  Alt 9. Jan 2007, 16:21
Schreib ne eigene collation
Oder ne UDF.
Markus Kinzler
  Mit Zitat antworten Zitat
trashcandesign

Registriert seit: 21. Feb 2006
Ort: Mühlhausen
187 Beiträge
 
Delphi XE2 Professional
 
#3

Re: TDataSet natürlich sortieren

  Alt 9. Jan 2007, 16:28
Danke dir *g*

Nachdem ich aber unseren Kunden die Möglichkeit geben muss anstatt FireBird auch Access oder MSSql einzusetzen wollte ich dann doch lieber auf eine Datenbankseitige Lösung verzichten.

Mal ganz abgesehen davon, das ich nich die leiseste Ahnung davon habe, wie so eine UDF auszusehen hätte...
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: TDataSet natürlich sortieren

  Alt 9. Jan 2007, 19:03
Hallo,

die einfachste Lösung ist doch sicher den numerischen und den alphabetischen Teil in zwei getrennten Spalten zu speichern. Für die Anzeige ist FB sehr gut gerüstet - CAST(NUM AS VARCHAR(10)) || ALPHA. Das ständige Zerlegen per SQL oder UDF ist deutlich teurer. Sollten die Daten wirklich bereits alphanumerisch vorliegen, dann würde ich sie einmal mit einem Delphi-Programm zerlegen und gut ist.

Grüße vom marabu
  Mit Zitat antworten Zitat
trashcandesign

Registriert seit: 21. Feb 2006
Ort: Mühlhausen
187 Beiträge
 
Delphi XE2 Professional
 
#5

Re: TDataSet natürlich sortieren

  Alt 10. Jan 2007, 10:00
Hallo Marabu,

das aufteilen in zwei Spalten ist so leider auch nicht möglich, da der Kunde in dieses Feld die Werte frei eingeben kann, also auch 1b10a
2b3cd59e
2b10oke
usw.

Und da kann ich dann schlecht auf mehrere Spalten aufteilen.

Zur Verdeutlichung meines Problems:
Bei den/dem Feld(ern) handelt es sich zum Beispiel um frei vergebbare Personalnummern. Da wir das Programm aber nicht nur für einen Kunden schreiben können wir ihm leider auch keine bestimmte formatierung vorgeben. Bisher geben wir dem/den Kunden nur die möglichkeit numerische Werte einzutragen, da funktioniert die sortierung ja so, wie wir es gerne hätten, allerdings halte ich das für nicht ganz komfortabel.

Am geschicktesten wäre es wohl das DataSet selbst, bzw. die Records darin, zu sortieren, aber dazu habe ich keine Möglichkeit gefunden.

  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: TDataSet natürlich sortieren

  Alt 10. Jan 2007, 10:26
1.) alle Records aus dem zu sortierenden Feld in eine Stringliste füllen
2.) Stringliste in "natürlicher Reihenfolge" sortieren
3.) die Tabelle erhält ein neues Feld namens "SortNum" vom Typ integer
4.) Schleife über die sortierte Stringliste und entsprechend viele SQL Update ausfühen
UPDATE Tabelle SET SortNum=:Index WHERE Keyfeld=:ItemString 5.) jetzt folgende SQL-Abfrage benützen:
SELECT * FROM Tabelle ORDER BY SortNum Die Schritte 1.) bis 4.) müssen nur dann ausgeführt werden, wenn sich die Persnummern ändern.
Neu Datensätze würden ganz oben einsortiert werden, da "SortNum" eines neuen Datensatz erstmal mit 0 vorbelegt wird.
Andreas
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#7

Re: TDataSet natürlich sortieren

  Alt 10. Jan 2007, 10:33
Warum nicht einfach lokal sortieren?
Ich finde diese doch sehr krassen Auswüchse hier, nur um beim DataSet zu bleiben, ein bisschen zu krass für meinen Geschmack...
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Udontknow

Registriert seit: 17. Jun 2002
223 Beiträge
 
#8

Re: TDataSet natürlich sortieren

  Alt 10. Jan 2007, 11:25
Ein nicht so sauberer Trick wäre es, die Zahlen links mit 0 aufzufüllen, bis eine entsprechende Anzahl an Ziffern vorhanden ist (aus 1 also 001 zumachen, aus 1a 001a und aus 44 dann 044). Somit bleibt die Sortierung so, wie du sie gerne hättest, allerdings musst du dann bei der Ausgabe der Zahlen die führenden Nullen wieder entfernen.

Edit: Ach vergesst es, ich schreibe, ohne zu lesen...

Cu,
Udontknow
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:12 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