![]() |
[SQL] Problem mit String in IN
Hallo zusammen,
ich benutze mySQL mit den ZEOS-Komponenten. Es geht um folgendes SQL-Statement:
Delphi-Quellcode:
Es geht um den Parameter ":pagid" in der vorletzten Zeile. Wenn ich dort per Hand schreibe
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');
Delphi-Quellcode:
funktioniert es.
... IN ("PIM5231","PIM5244")
Benutze ich die Parameterfunktion
Delphi-Quellcode:
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.
frmMain.ZQPOS.ParamByName('pagid').AsString:=strDataID;
Irgendeine Idee? Gruß Igotcha |
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. |
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:
Bis dann
...
and i.pagid IN (select unique pagid from <table>) ... Peter |
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]));
|
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? |
Re: [SQL] Problem mit String in IN
Zitat:
Danke! |
Re: [SQL] Problem mit String in IN
Zitat:
|
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