Les paramètres ne fonctionnent pas comme ça ; ils n'ont aucune idée que ce que vous essayez de fournir est une liste de valeurs séparées par des virgules. Si vous définissez ParamByName('WhatEver').AsString
ou Value
, il pense que vous voulez dire une chaîne entre guillemets qui contient tout ce qui appartient à ce paramètre. Donc, il fait exactement ce qu'il semble - il passe IN ('1, 2, 3')
, au lieu du prévu IN (1, 2, 3)
.
Vous devrez soit recommencer à l'analyser vous-même et utiliser une table temporaire, soit créer le WHERE
clause dynamiquement et en la concaténant avant d'exécuter la requête. (En fait, vous pouvez construire la requête dynamiquement, en créant un nouveau paramètre pour chacun des éléments dans le IN
clause, puis bouclez et attribuez des valeurs à chacun de ces paramètres créés dynamiquement, mais cela devient très moche très rapidement.)