Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.419 Beiträge
 
Delphi 7 Professional
 
#7

AW: FB: Prepared Query mit In-Statement ?

  Alt 30. Dez 2017, 17:41
Token unknown lässt auf einen Syntaxfehler im SQL schließen, vermutlich ist das aber nur eine Teilmenge der Fehlermeldung.
Bitte mal das vollständige SQL und die vollständige Fehlermeldung. So ist das nur was für die

Ein Parameter = ein Wert.
Wenn ein Wert aus mehreren Zeichenfolgen besteht, geht das.

Wenn ein Parameter aber mehrere einzelne Werte enthält, die eigentlich separat ins IN sollen, dann geht das nicht.
Delphi-Quellcode:
qry.SQL.Text := 'select * from x where feld2 IN (:Parameter)';
qry.Params[0].AsString := 'Das ist jetzt mal etwas Text.';
funktioniert.
Das wird zu select * from x where feld2 IN ('Das ist jetzt mal etwas Text.') , wobei hier das IN auch durch ein = ersetzt werden könnte.
Delphi-Quellcode:
qry.SQL.Text := 'select * from x where feld2 IN (:P1,:P2,:P3,:P4,:P5,:P6)';
qry.Params[0].AsString := 'Das'
qry.Params[1].AsString := 'ist'
qry.Params[2].AsString := 'jetzt'
qry.Params[3].AsString := 'mal'
qry.Params[4].AsString := 'etwas'
qry.Params[5].AsString := 'Text.'
funktioniert, kann aber zu einem deutlich anderen Ergebnis, als die vorherige Variante, führen.
Delphi-Quellcode:
qry.SQL.Text := 'select * from x where feld2 IN (:Parameter)';
qry.Params[0].AsString := '''Das'',''ist'',''jetzt'',''mal'',''etwas'',''Text.''';
funktioniert eventuell technisch. Im IN steht aber nur ein Wert, nach dem gesucht werden soll, und nicht sechs Werte, wie der Aufbau des Parameters suggerieren könnte. Und wenn hier die Anzahl der ' nicht so ganz passt, könnte die daraus resultierende Fehlermeldung auch 'Token unknown' enthalten.
  Mit Zitat antworten Zitat