Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Parameter Übergabe in SQL-Abfrage (https://www.delphipraxis.net/45745-parameter-uebergabe-sql-abfrage.html)

compi22 11. Mai 2005 18:02

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!!

Sharky 11. Mai 2005 19:33

Re: Parameter Übergabe in SQL-Abfrage
 
Hai compi22,

ich habe deinen Code jetzt nicht näher geprüft. Aber eines sollte auffallen ;-)

Delphi-Referenz durchsuchen.ExecSQL ist dafür da einen SQL-Befehl auszuführen der keine Rückgabemenge besitzt (INSERT, UPDATE..).
Bei einem SELECT musst Du .Open verwenden.

bttb930 11. Mai 2005 20:01

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

MrSpock 11. Mai 2005 21:39

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:

compi22 11. Mai 2005 22:05

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!!

Union 11. Mai 2005 22:07

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;

Bernhard Geyer 12. Mai 2005 07:28

Re: Parameter Übergabe in SQL-Abfrage
 
Zitat:

Zitat von Union
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.

Habe es für MS SQL-Server direkt im Query Analyser überprüft. In ORDER BY-Teil werden @Px (für Parameter) nicht erkannt.

Zitat:

Zitat von Union
Nachteil: Der Gesamte Originale ORDER BY muss in nur einer, und zwar der letzten Zeile (laut SQL Syntax) stehen.

Stimmt nicht. Zeilenumbrüche stören nicht:
SQL-Code:
select
*
from
mytable
order
by
feld1,
feld2
ist ein gültiges konstrukt.

Sharky 12. Mai 2005 07:46

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;

Robert_G 12. Mai 2005 08:48

Re: Parameter Übergabe in SQL-Abfrage
 
Zitat:

Zitat von Sharky
Hai ihr,

ich habe das eben mal mit mySQL und den Zeos-Komponenten versucht. Da geht es:

Das hatten wir doch schonmal ;) (Ist aber schon ein Weilchen her...)
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.

Sharky 12. Mai 2005 09:06

Re: Parameter Übergabe in SQL-Abfrage
 
Zitat:

Zitat von Robert_G
..Also effektiv sortiert eine Folge gleicher Werte. :mrgreen: ....

Hmmm bei meinem Test hat er nach dem Feldnamen sortiert den ich via Edit1 übergeben habe.

Zitat:

,,, einen neuen Plan erforndern und damit das Prinzip von Parametern komplett witzlos machen.
Das ist natürlich richtig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:08 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz