Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi [SQL] Problem mit String in IN (https://www.delphipraxis.net/31229-%5Bsql%5D-problem-mit-string.html)

Igotcha 6. Okt 2004 11:58


[SQL] Problem mit String in IN
 
Hallo zusammen,

ich benutze mySQL mit den ZEOS-Komponenten. Es geht um folgendes SQL-Statement:

Delphi-Quellcode:
frmMain.ZQPOS.SQL.Clear;
frmMain.ZQPOS.SQL.Add('SELECT p.posid, p.posbez, ');
frmMain.ZQPOS.SQL.Add('SUM(JAN) AS JAN, SUM(FEB) AS FEB, SUM(MAR) AS MAR, SUM(APR) AS APR, SUM(MAI) AS MAI, SUM(JUN) AS JUN, SUM(JUL) AS JUL, SUM(AUG) AS AUG, SUM(SEP) AS SEP, SUM(OKT) AS OKT, SUM(NOV) AS NOV, SUM(DEZ) AS DEZ, ');
frmMain.ZQPOS.SQL.Add('SUM(JAN_1) AS JAN_1, SUM(FEB_1) AS FEB_1, SUM(MAR_1) AS MAR_1, SUM(APR_1) AS APR_1, SUM(MAI_1) AS MAI_1, SUM(JUN_1) AS JUN_1 ');
frmMain.ZQPOS.SQL.Add('FROM positionen p, daten_prognose i ');
frmMain.ZQPOS.SQL.Add('WHERE p.pgid=:pgid AND p.posid=i.position AND i.pagid IN (:pagid) ');
frmMain.ZQPOS.SQL.Add('GROUP BY p.posid');
Es geht um den Parameter ":pagid" in der vorletzten Zeile. Wenn ich dort per Hand schreibe

Delphi-Quellcode:
... IN ("PIM5231","PIM5244")
funktioniert es.

Benutze ich die Parameterfunktion

Delphi-Quellcode:
frmMain.ZQPOS.ParamByName('pagid').AsString:=strDataID;
wobei strDataID einen String aus der DB enthält, der dort als "PIM5231","PIM5244" hinterlegt ist, funktioniert es nicht - die Datenmenge ist dann "0". Das selbe Ergebnis erhalte ich auch, wenn in strDataID 'PIM5231','PIM5244' steht.

Irgendeine Idee?

Gruß Igotcha

Treffnix 6. Okt 2004 12:06

Re: [SQL] Problem mit String in IN
 
Ich weiss nicht, ob ich dich richtig verstehe. Du schreibst die Anführungszeichen mit in den Parameter? Das musst du nicht. Der Parameter ist automatisch schon als String definiert.

Edit: Ach, jetzt hab ich mal genauer hingeschaut. Sollte mir mal den Spruch "Erst lesen, dann posten" zu Herzen nehmen...

Was du da vorhast geht nicht über Parameter, fürchte ich. Wenn du im Quelltext eingibst A in ( B, C, D ) sind B, C und D für SQL jeweils eigene Werte. In einen Parameter kannst du aber immer nur einen Wert schreiben.
Du könntest aber einfach das Statement jeweils ersetzen und die Werte direkt in den SQL-Text schreiben.

PRehders 6. Okt 2004 12:09

Re: [SQL] Problem mit String in IN
 
Hallo Igotcha,

das wird so nicht funktionieren, da es sich nur um einen einzigen Parameter handelt. Es wäre besser, wenn die Page-IDs in einer Tabelle der DB hinterlegt sind, von wo Du dann eine Subquery anlegst, also nicht i.pagid IN (<Liste>) , sondern

SQL-Code:
 ...
and i.pagid IN (select unique pagid from <table>)
...
Bis dann

Peter

Gollum 6. Okt 2004 12:10

Re: [SQL] Problem mit String in IN
 
Hallo,

das Problem liegt daran, dass für das IN-Statement keine Parameter übergeben werden können.

So müsste es gehen:
Delphi-Quellcode:
frmMain.ZQPOS.SQL.Add(Format('WHERE p.pgid=:pgid AND p.posid=i.position AND i.pagid IN (%s) ', [strDataID]));

Igotcha 6. Okt 2004 12:13

Re: [SQL] Problem mit String in IN
 
@treffnix

Hmmm, da der Inhalt des Parameters bei IN ein Stringabgleich ist, müssen doch in der Klammer die Strings aufgeführt werden. Also so ... IN ("string1", "string2", "string3").

In meiner Datenbank ist das, was in der Klammer stehen soll gespeichert (Inhalt komt aus einem Konfigurationsprogramm). Also "string1", "string2", "string3".

Wie soll ich das denn sonst machen?

Igotcha 6. Okt 2004 12:19

Re: [SQL] Problem mit String in IN
 
Zitat:

Zitat von Gollum
So müsste es gehen:
Delphi-Quellcode:
frmMain.ZQPOS.SQL.Add(Format('WHERE p.pgid=:pgid AND p.posid=i.position AND i.pagid IN (%s) ', [strDataID]));

Und wie das geht ;-)

Danke!

generic 6. Okt 2004 12:22

Re: [SQL] Problem mit String in IN
 
Zitat:

Zitat von Igotcha
Zitat:

Zitat von Gollum
So müsste es gehen:
Delphi-Quellcode:
frmMain.ZQPOS.SQL.Add(Format('WHERE p.pgid=:pgid AND p.posid=i.position AND i.pagid IN (%s) ', [strDataID]));


bitte nicht vergessen das in strDataID keine esc-zeichen sind.


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