Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL Select IN Abfrage mit Parameter ? (https://www.delphipraxis.net/171299-sql-select-abfrage-mit-parameter.html)

user0815 30. Okt 2012 12:41

Datenbank: Firebird • Version: 2.5.1 • Zugriff über: UniDAC

SQL Select IN Abfrage mit Parameter ?
 
Delphi-Quellcode:
  SQL.Clear;
  SQL.Add('SELECT');
  SQL.Add(' FELD1, FELD2, DATUM');
  SQL.Add('WHERE');
  SQL.Add(' FELD1 IN (1,2,3,4,5,6,7,8,9) AND');
  SQL.Add(' DATUM >= :DATE1');
  SQL.Add('ORDER BY');
  SQL.Add(' FELD1 DESC');

  ParamCheck := true;
  ParamByName('DATE1').AsDateTime:= StartOfTheDay(DateTimePicker1.Date);
Frage: Kann man für die FELD1 IN Abfrage auch mit Parametern arbeiten, & wenn ja wie ?

Grüße
user0815

Medium 30. Okt 2012 12:42

AW: SQL Select IN Abfrage mit Parameter ?
 
"...IN (:p00, :p01, :p02, :p03, ...)" geht bei MySQL zumindest prima.

mkinzler 30. Okt 2012 13:00

AW: SQL Select IN Abfrage mit Parameter ?
 
Ich vermute mal er meint aber ein Parameter für die Liste. Und das geht bei den mir bekannten DBMS nicht.

user0815 30. Okt 2012 13:06

AW: SQL Select IN Abfrage mit Parameter ?
 
Schade + Danke !

Also ne Parameter Schleife für die Werte 'bauen', ....

himitsu 30. Okt 2012 13:11

AW: SQL Select IN Abfrage mit Parameter ?
 
Geht denn sowas?
Delphi-Quellcode:
  SQL.Clear;
  SQL.Add('SELECT');
  SQL.Add(' FELD1, FELD2, DATUM');
  SQL.Add('WHERE');
  SQL.Add(' FELD1 IN (&liste) AND');
  SQL.Add(' DATUM >= :DATE1');
  SQL.Add('ORDER BY');
  SQL.Add(' FELD1 DESC');

  ParamCheck := true;
  ParamByName('DATE1').AsDateTime:= StartOfTheDay(DateTimePicker1.Date);
  MakroByName('DATE1').Value:= ':p0,:p1,:p2,:p3';
  ParamByName('p0').AsIrgendwas:= ...;
  ParamByName('p1').AsIrgendwas:= ...;
Den String für das Makro müßte man berechnen lassen, oder, wenn's mit Makro nicht geht, dann StringReplace oder so, direkt ins SQL.Text
Ohne das Makro hatte ich sowas mal verwendet. :oops:

Medium 30. Okt 2012 13:12

AW: SQL Select IN Abfrage mit Parameter ?
 
Die Frage war nach Parametern. Ich kenne auch kein DBMS, dass einen Listentypen in dieser Weise unterstützen würde. Man könnte sich ansonsten noch ggf. über eine temporäre Tabelle helfen, die man dann joined. Dann müsste man diese befüllen statt String-Gewurschtel, klingt üppiger, gefiele mir aber grad bei variabler Anzahl der Listenitems irgendwie besser.

alex517 30. Okt 2012 13:28

AW: SQL Select IN Abfrage mit Parameter ?
 
ich mach das mit einer SP

Parameterliste für where .. IN (..)

alex

Union 30. Okt 2012 14:31

AW: SQL Select IN Abfrage mit Parameter ?
 
Du könntest auch eine temporäre Tabelle verwenden:
Code:
WHERE FELD1 IN (SELECT FELD1 FROM #Temp)

mikhal 31. Okt 2012 10:29

AW: SQL Select IN Abfrage mit Parameter ?
 
Bei den UniDACs gibt es die Möglichkeit Macros in deinem Statement unterzubringen. Damit kann man auch eine Parameterliste sauber übergeben. Ist in der Hilfe gut beschrieben.

Grüße
Mikhal

user0815 31. Okt 2012 10:53

AW: SQL Select IN Abfrage mit Parameter ?
 
DANKE !
In der Hilfe gefunden, ausprobiert, funktioniert.

Zitat:

Working with Macros
Macros help you to change SQL statements dynamically. They allow partial replacement of the query statement by user-defined text. Macros are identified by their names which are then referred from SQL statement to replace their occurrences for associated values.
First step is to assign macros with their names and values to a dataset object.
Then modify SQL statement to include macro names into desired insertion points. Prefix each name with & ("at") sign to let UniDAC discriminate them at parse time. Resolved SQL statement will hold macro values instead of their names but at the right places of their occurrences. For example, having the following statement with the TableName macro name:

SELECT * FROM &TableName

You may later assign any actual table name to the macro value property leaving your SQL statement intact.

Query1.SQL.Text := 'SELECT * FROM &TableName';
Query1.MacroByName('TableName').Value := 'Dept';
Query1.Open;

UniDAC replaces all macro names with their values and sends SQL statement to the server when SQL execution is requested.

Delphi-Quellcode:
  SQL.Clear;
  SQL.Add('SELECT');
  SQL.Add(' FELD1, FELD2, DATUM');
  SQL.Add('WHERE');
  SQL.Add(' FELD1 IN (&Feldwerte) AND');
  SQL.Add(' DATUM >= :DATE1');
  SQL.Add('ORDER BY');
  SQL.Add(' FELD1 DESC');

  ParamCheck := true;
  ParamByName('DATE1').AsDateTime:= StartOfTheDay(DateTimePicker1.Date);
  MacroByName('Feldwerte').Value := '1,2,3,4,5,6,7,8,9';


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:49 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