![]() |
Datenbank: SQL-Server • Zugriff über: ADO
Parameter Übergabe in SQL-Abfrage
[/cpp]
Hallo Leute, weiss jemand wie ich in einer SQL-Abfrage einen Parameter für den Abfragezuatz "Order by" übergeben kann. Bei unten gezeigten Quelltext passiert nichts. Paramterübergaben bei Where-Klauseln sind an sich kein Thema Aber hier!!! :wall: ADOQuery1->SQL->Add("Select Table1.Kennummer,Table1.Mon,Table1.Tag"); ADOQuery1->SQL->Add("FROM Table1 "); ADOQuery1->SQL->Add("Order by:_Sort "); ADOQuery1->Parameters->ParamByName("_Sort")->Value=Feld; ADOQuery1->ExecSQL(); Danke!! |
Re: Parameter Übergabe in SQL-Abfrage
Hai compi22,
ich habe deinen Code jetzt nicht näher geprüft. Aber eines sollte auffallen ;-) ![]() Bei einem SELECT musst Du .Open verwenden. |
Re: Parameter Übergabe in SQL-Abfrage
was soll das - das ist ein feldname, und das kann man nicht parametrisieren.
bau dir doch einfach den string für die abfrage selbst zusammen: ... "ORDER BY " + Feld ... jedenfalls schneller als einen thread zu eröffnen |
Re: Parameter Übergabe in SQL-Abfrage
Hallo bttb930,
"was soll das", frage ich Dich. Die Frage von compi22 widerspricht keiner Regel und ist auch sonst eine ganz normale Frage. Deine patzige Antwort ist alles andere als freundlich und außerdem unangebracht. Reiß Dich in Zukunkt zusammen. :warn: |
Re: Parameter Übergabe in SQL-Abfrage
Hallo MrSpock,
danke für den Hinweis-> klappt trotzdem nicht. An bttb930 kannst Du bitte Deine Antwort etwas konkretisieren Danke!! |
Re: Parameter Übergabe in SQL-Abfrage
Soweit ich weiss und bisher auch zu meinem Leidwesen verifizieren konnte, sind Parameter nur in WHERE und JOIN zulässig. By ORDER, GROUP usw. musst Du leider weiter mit String-Zusammensetzungen arbeiten. Du kannst Dir aber z.B. so einer Hilfsprocedur verwenden. Nachteil: Der Gesamte Originale ORDER BY muss in nur einer, und zwar der letzten Zeile (laut SQL Syntax) stehen.
Delphi-Quellcode:
procedure ApplySortToQuery(AQuery: TADSQuery; ASortArray: array of string);
var I: Integer; ASortString, AFilter: string; begin ASortString := ''; for I := 0 to High(ASortArray) do ASortString := ASortString + ASortArray[I]; 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; |
Re: Parameter Übergabe in SQL-Abfrage
Zitat:
Zitat:
SQL-Code:
ist ein gültiges konstrukt.
select
* from mytable order by feld1, feld2 |
Re: Parameter Übergabe in SQL-Abfrage
Hai ihr,
ich habe das eben mal mit mySQL und den Zeos-Komponenten versucht. Da geht es:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin ZConnection1.Disconnect; ZConnection1.Connect; with ZQuery1 do begin Close; SQL.Text := 'SELECT * FROM test1 ORDER BY :feld'; ParamCheck := True; ParamByName('feld').AsString := Edit1.Text; Open; end; end; |
Re: Parameter Übergabe in SQL-Abfrage
Zitat:
Er sortietrt nach dem String im Parameter. Also effektiv sortiert eine Folge gleicher Werte. :mrgreen: Feldnamen über Parameter zu besetzen würde doch das eigentliche Statement verändern, einen neuen Plan erforndern und damit das Prinzip von Parametern komplett witzlos machen. |
Re: Parameter Übergabe in SQL-Abfrage
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz