Clause SQL « WHERE IN » paramétrée ?
Posted in 2005
Topics: SQL Development & Query Writing, Connectivity: ODBC / JDBC / .NET
Translated from English by DrWatson — View original
Bonjour, J'essaie de trouver un moyen de passer une variable de Visual FoxPro à Informix via le pilote ODBC actuel, quelque chose qui ressemblerait à ceci : SELECT * FROM MyTable WHERE MyField IN (?MyListOfValues) ?MyListOfValues est une variable contenant la liste sur laquelle je souhaite filtrer. Du genre : 'a', 'b', 'c', 'd', 'e'. Le point d'interrogation est simplement la façon dont VFP indique qu'il s'agit d'une valeur de paramètre à remplacer par le contenu de la variable avant d'envoyer le SQL (et cela fonctionne avec des clauses normales du type WHERE x = ?Var). Pour une raison quelconque, ça ne marche pas avec le « WHERE IN » ! Je peux coder la liste en dur dans l'instruction SELECT et cela fonctionne très bien, mais si j'essaie d'utiliser une variable définie dynamiquement, je n'obtiens aucun résultat. Des suggestions ? Pour information — je me bats actuellement avec l'utilitaire ODBC Trace sous WinXP, mais pour une raison quelconque il ne capture aucun SQL, même lorsque j'exécute une requête valide qui renvoie un jeu de résultats. Le fichier journal est bien créé, mais il fait zéro octet. Je pense que ce journal serait intéressant pour voir comment le SQL a été formaté avant d'être envoyé au serveur. Merci. -- William Fields MCSD - Microsoft Visual FoxPro US Bankruptcy Court Phoenix, AZ « Je n'ai aucun talent particulier, je suis seulement passionnément curieux » - Albert Einstein
William Fields a écrit : > Bonjour, > > J'essaie de trouver un moyen de passer une variable de Visual > FoxPro à Informix via le pilote ODBC actuel, quelque chose > qui ressemblerait à ceci : > > SELECT * FROM MyTable WHERE MyField IN (?MyListOfValues) > > ?MyListOfValues est une variable contenant la liste sur laquelle je veux filtrer. > Du genre : 'a', 'b', 'c', 'd', 'e'. Je ne connais pas FoxPro, je ne peux donc que supposer quel type de variable vous utilisez pour stocker la partie 'a','b','c'. S'agit-il d'une chaîne de caractères ? Je vais le supposer. Lorsque MyListOfValues sera liée lors de l'exécution de l'instruction, cela donnera probablement ceci : ... WHERE MyField IN ("'a', 'b', 'c', 'd', 'e'") autrement dit, une seule et unique chaîne comprenant les lettres, les virgules, les espaces et les guillemets. Aucun système de liaison SQL dynamique que j'aie jamais vu ne fait ce que vous demandez. Vous pourriez peut-être tirer parti des types ROW d'Informix SI vous parvenez à lier un tableau à un ?, mais j'en doute, surtout via ODBC. Du côté positif, ce genre de cas est précisément la raison pour laquelle il est acceptable de préparer et de re-préparer une instruction à la volée. Construisez manuellement la chaîne et soumettez-la sans utiliser de ?