Hallo,
ich habe noch eine Ergänzung zum folgenden Eintrag in der Code-Library:
dbgrid AND sortieren AND nach
---
Hi
mit diesem Code läßt sich nach mehreren Spalten gemischt auf- und absteigend sortieren. Übergeben wird ein String Array im Format ['Feldname-1 ASC|DESC
, ',..,'Feldname-n ASC|DESC
, ']. Z.b ['Kundenname ASC
, ', 'Datum DESC
, ']. Eine existierende ORDER BY wird in der letzten Zeile des
SQL vermutet und aus dieser vor dem Neuerzeugen gelöscht. Bitte auf die
Roten Komma mit der Leerstelle am Ende jedes Strings achten!
Delphi-Quellcode:
procedure ApplySortToQuery(AQuery: TQuery; ASortArray: array of string);
var
I: Integer;
ASortString, AFilter: string;
begin
ASortString := '';
for I := 0 to High(ASortArray) do
ASortString := ASortString + ASortArray[I];
// Achtung, die letzten zwei Zeichen werden gelöscht!
System.Delete(ASortString, Length(ASortString)-1, 2);
AFilter := AQuery.Filter;
try
AQuery.DisableControls;
AQuery.Close;
AQuery.Filter := '';
if pos('order by', AQuery.SQL.Strings[AQuery.SQL.Count-1]) > 0 then
AQuery.SQL.Delete(AQuery.SQL.Count-1);
if ASortString <> '' then ASortString := 'order by ' + ASortString;
AQuery.SQL.Add(ASortString);
finally
AQuery.Open;
AQuery.Filter := AFilter;
AQuery.EnableControls;
end;
end;