Zitat:
ORDER BY :SuchenSortFeld
Wenn ich es so mache saagt er mir das er BY nicht kennt.
Tja, leider funktionieren Parameter meistens nur auf der "rechten Seite" und nicht für Feldnamen.
SQL-Code:
-- erlaubt, richtig
WHERE Feld17=:Feld17
-- verboten, nicht möglich
WHERE :Feld17=False
ORDER BY :OrderFeld
Deshalb musst du wohl doch die
SQL-Anweisungen zur Laufzeit modifizieren.
Dazu hilft folgende Procedure:
Delphi-Quellcode:
procedure ImplantSqlOrderByClause(
SQL:TStrings;
const OrderByClause:
string);
var
i : Integer;
s :
string;
begin
if OrderByClause = '
'
then
begin
for i :=
SQL.Count - 1
downto 0
do
begin
s := UpperCase(Trim(
SQL.Strings[i]));
if AnsiSameText('
ORDER BY', Copy(s, 1, 8))
then
begin
SQL.Delete(i);
Exit;
end;
end;
end
else
begin
for i :=
SQL.Count - 1
downto 0
do
begin
s := UpperCase(Trim(
SQL.Strings[i]));
if s = '
'
then
Continue;
if AnsiSameText('
ORDER BY', Copy(s, 1, 8))
then
begin
SQL.Strings[i] := OrderByClause;
Exit;
end;
end;
SQL.Add(OrderByClause);
end;
end;
Beispiele:
Delphi-Quellcode:
ImplantSqlOrderByClause(qrSuchen.SQL, 'ORDER BY Abteilung ASC'); // sortieren nach Abteilung
ImplantSqlOrderByClause(qrSuchen.SQL, ''); // keine Sortierung
PS: das ORDER BY muss immer in einer eigenen Zeile stehen, sonst funktioniert ImplantSqlOrderByClause nicht.