Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi IN-String als Parameter? (https://www.delphipraxis.net/44815-string-als-parameter.html)

Igotcha 25. Apr 2005 12:44

Datenbank: mySQL • Zugriff über: Zeos

IN-String als Parameter?
 
Hallo zusammen,

als Verfechter von "ParamByName" habe ich leider momentan eine Blockade, wie ich einen String in der Form (so liegt er in der DB und eingelesen wird er in der Variablen strWERTE):

Delphi-Quellcode:
'WERT1', 'WERT2', 'WERT3'
als Parameter in die IN-Bedingung eines SQL-Statements bekomme:

Delphi-Quellcode:
'... WHERE i.PAGID IN (:WERT) ...';
ZQuery.ParamByName('WERT').AsString:=strWERTE;
Aussehen muss es ja später so:

Delphi-Quellcode:
... IN ('WERT1', 'WERT2', 'WERT3')
Gruß Igotcha

Stevie 25. Apr 2005 13:40

Re: IN-String als Parameter?
 
Hi Igotcha,

hierbei handelt es sich um sogenannte Substitution-Parameter oder -Variablen, die du benötigst, das heißt, der Wert, den du in den Parameter einträgst, wird im SQL ersetzt.
Damit wäre zum Beispiel dann Folgendes theoretisch möglich (wenn die Datenbank geschachtelte SELECTs unterstützt):
Delphi-Quellcode:
ZQuery.SQL.Text := 'SELECT * FROM Werte WHERE Wert IN (:Wert)';
with ZQuery.ParamByName('Wert') do
begin
  Value := 'SELECT Wert FROM AndereWerte WHERE Wert > 0';
  ParamType := ptSubst; // gibt's (noch) nicht...
end;
Leider unterstützen die Zeos-Komponenten diese Art der Parameter im Moment (noch) nicht.

Eine Möglichkeit ohne das - wie ich finde - von der Optik ;-) unschöne Verketten von Strings wäre:
Delphi-Quellcode:
ZQuery.SQL.Text := Format('SELECT * FROM Werte WHERE Wert IN (%s)', [Wert]);
MfG
Stevie

Igotcha 25. Apr 2005 13:54

Re: IN-String als Parameter?
 
Danke Dir, aber mit Verkettung kann ich es auch hinbekommen ;-)

Meine Frage bezog sich ja mehr darauf, warum ein in der DB abgelegter String der Form (so steht er in der DB)

'WERT', 'WERT2', 'WERT3'

offensichtlich so nicht als Parameter übergeben werden kann? Und hier war die Frage nicht, wie ich diesen auslese, sondern eher in Bezug auf die ''.

Wenn ich diesen String aus der DB in eine Variable auslese, was steht dann in der Variablen?

'\'WERT1\', \'WERT2\', \'WERT3\''

Gebe ich direkte ein "... IN ('WERT', 'WERT2', 'WERT3')" funktioniert die Abfrage.

Gruß Igotcha

P.S. Wobei das von Dir aufgeführte Beispiel auch sehr nett wäre, wenn es möglich wäre ;-)

Stevie 25. Apr 2005 14:24

Re: IN-String als Parameter?
 
Zitat:

ein in der DB abgelegter String der Form (so steht er in der DB)

'WERT', 'WERT2', 'WERT3'

offensichtlich so nicht als Parameter übergeben werden kann?
Ähm? Ist das jetzt ein Wert, oder sind das mehrere?

SQL-Code:
SELECT ... IN ('Wert1', 'Wert2', 'Wert3')
ist ja demnach nix anderes, als
SQL-Code:
SELECT ... (Wert = 'Wert1) OR (Wert = 'Wert2') OR (Wert = 'Wert3')

Waldteufel 25. Apr 2005 14:26

Re: IN-String als Parameter?
 
Hi.

Zitat:

Zitat von Stevie
SQL-Code:
SELECT ... IN ('Wert1', 'Wert2', 'Wert3')
ist ja demnach nix anderes, als
SQL-Code:
SELECT ... (Wert = 'Wert1) OR (Wert = 'Wert2') OR (Wert = 'Wert3')

Genau.

mfg, Waldteufel

Igotcha 25. Apr 2005 14:45

Re: IN-String als Parameter?
 
Zitat:

Zitat von Stevie
Zitat:

ein in der DB abgelegter String der Form (so steht er in der DB)

'WERT', 'WERT2', 'WERT3'

offensichtlich so nicht als Parameter übergeben werden kann?
Ähm? Ist das jetzt ein Wert, oder sind das mehrere?

Das ist ein Wert, in einem VARCHAR-Feld in der DB abgelegt.

Hintergrund ist, dass man in der DB bestimmte Selektions-Sichten hinterlegen kann. Ich möchte in einem Feld die Selektionskriterien für das IN bereits so hinterlegen und dann nur noch per ParamByName übergeben, da die Anzahl der "Werte" variieren kann.

Stevie 25. Apr 2005 14:58

Re: IN-String als Parameter?
 
Nee, da wird's dann erstmal keine Param-Lösung für geben fürchte ich.
Das musste, wie gesagt über Verkettung machen.


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