AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi [SQL] Problem mit String in IN
Thema durchsuchen
Ansicht
Themen-Optionen

[SQL] Problem mit String in IN

Ein Thema von Igotcha · begonnen am 6. Okt 2004 · letzter Beitrag vom 6. Okt 2004
Antwort Antwort
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#1

[SQL] Problem mit String in IN

  Alt 6. Okt 2004, 11:58
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

... IN ("PIM5231","PIM5244") funktioniert es.

Benutze ich die Parameterfunktion

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
  Mit Zitat antworten Zitat
Benutzerbild von Treffnix
Treffnix

Registriert seit: 25. Jun 2003
Ort: AC
740 Beiträge
 
Delphi 7 Professional
 
#2

Re: [SQL] Problem mit String in IN

  Alt 6. Okt 2004, 12:06
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.
  Mit Zitat antworten Zitat
PRehders

Registriert seit: 31. Okt 2003
Ort: Hamburg
42 Beiträge
 
#3

Re: [SQL] Problem mit String in IN

  Alt 6. Okt 2004, 12:09
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
Peter Rehders
Man sollte niemanden ernst nehmen, der sich ernst nimmt.
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

Re: [SQL] Problem mit String in IN

  Alt 6. Okt 2004, 12:10
Hallo,

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

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

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#5

Re: [SQL] Problem mit String in IN

  Alt 6. Okt 2004, 12:13
@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?
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#6

Re: [SQL] Problem mit String in IN

  Alt 6. Okt 2004, 12:19
Zitat von Gollum:
So müsste es gehen:
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!
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#7

Re: [SQL] Problem mit String in IN

  Alt 6. Okt 2004, 12:22
Zitat von Igotcha:
Zitat von Gollum:
So müsste es gehen:
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 Uhr.
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