TQuery und 'Order by UPPER()' ??
Vielen Dank, das hat geholfen!
Verwende zwar kein TQuery, sondern weiterhin TDataset und kann auch für alle anderen Spalten weiterhin DoSort verwenden. Diese eine Spalte, in der Groß- und Kleinschreibung vorkommt, unterziehe ich jetzt einer Sonderbehandlung, indem ich sie aus dem CASE-Construct ausgliedere und die Sortierung direkt dem SelectSQL-String zuweise.
Vorher:
Delphi-Quellcode:
PROCEDURE Sort_Titel(Spalte : INTEGER);
VAR
Merk : INTEGER;
Aus : STRING;
BEGIN
Merk := DatMod.FibSet_Titel.FieldByName('INDEX').AsInteger;
IF Spalte = SortIndex THEN SortOrder := NOT SortOrder ELSE SortOrder := TRUE;
CASE Spalte OF
0 : DatMod.FibSet_Titel.DoSort(['INDEX'], [SortOrder]);
1 : DatMod.FibSet_Titel.DoSort(['TITEL'], [SortOrder]);
2 : BEGIN
MeldungEin;
DatMod.FibSet_Titel.DoSort(['VRegie'], [SortOrder]);
MeldungAus;
END;
...
END;
Nachher:
Delphi-Quellcode:
PROCEDURE Sort_Titel(Spalte : INTEGER);
VAR
Merk : INTEGER;
Aus : STRING;
BEGIN
Merk := DatMod.FibSet_Titel.FieldByName('INDEX').AsInteger;
IF Spalte = SortIndex THEN SortOrder := NOT SortOrder ELSE SortOrder := TRUE;
IF (Spalte <> 1) AND (SortIndex = 1) THEN
BEGIN
DatMod.FibSet_Titel.Close;
DatMod.FibSet_Titel.SQLs.SelectSQL.Text := 'SELECT * FROM TITEL';
DatMod.FibSet_Titel.Open;
END ELSE
IF Spalte = 1 THEN
BEGIN
DatMod.FibSet_Titel.Close;
Aus := 'SELECT * FROM TITEL ORDER BY LOWER(TITEL) ';
IF SortOrder THEN Aus := Aus + 'ASC' ELSE Aus := Aus + 'DESC';
DatMod.FibSet_Titel.SQLs.SelectSQL.Text := Aus;
DatMod.FibSet_Titel.Open;
END;
CASE Spalte OF
0 : DatMod.FibSet_Titel.DoSort(['INDEX'], [SortOrder]);
{ausgeklammert: 1 : DatMod.FibSet_Titel.DoSort(['TITEL'], [SortOrder]);}
2 : BEGIN
MeldungEin;
DatMod.FibSet_Titel.DoSort(['VRegie'], [SortOrder]);
MeldungAus;
END;
...
END;
Kurze Erläuterung: SortIndex ist die Spaltennummer, nach der aktuell sortiert ist und die nach jeder neuen Sortierung gesetzt wird. SortOrder hat bei ASC den Wert TRUE und bei DESC den Wert FALSE. Beide Variablen sind global. So kann ich wie bei Excel durch einen Klick auf den Spaltentitel die Sortierung vornehmen, wobei ein zweiter Klick auf denselben Spaltentitel die Sortierung umkehrt.