Einzelnen Beitrag anzeigen

shmia

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

Re: Letzte Zeile von SQL Befehl löschen

  Alt 21. Jun 2004, 13:44
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.
Andreas
  Mit Zitat antworten Zitat