OVH Cloud OVH Cloud

[WD8 314i] Problème avec la clause IN

7 réponses
Avatar
Eric
Bonjour,

Un problème très curieux : j'ai créé une requête sous l'éditeur intégré
et cette requête contient une clause IN.
SELECT Client.Nom, Client.Prenom FROM Client WHERE Client.CleUnique IN
(1,2,4)

Si je définis le contenu de cette clause comme une liste de valeurs (que
j'entre directement dans la condition), aucun problème.
SELECT Client.Nom, Client.Prenom FROM Client WHERE Client.CleUnique IN
(1,2,4)

Si j'indique que le contenu du IN provient d'un paramètre et que, à
l'exécution de la requête, je rentre les mêmes valeurs que ci-dessus,
seul l'enregistrement correspondant au premier membre de la liste m'est
retourné (si les valeurs sont numériques car, dans le cas d'un IN avec
une liste de valeurs alpha, rien n'est retourné).
Je donne la valeur "1,2,4" à Param1
SELECT Client.Nom, Client.Prenom FROM Client WHERE Client.CleUnique IN
({Param1})

Le résultat est le même si j'exécute la requête depuis mon programme
avec ExecuteRequete en lui passant ma liste de paramètres.

Je précise que si je copie le code SQL de la requête dans mon programme
et que je l'exécute avec ma liste de valeurs en paramètre par
ExecuteRequeteSQL, ça fonctionne.

Quelqu'un a-t-il eu ce genre de problème avec la clause IN ?

--
Cordialement

7 réponses

Avatar
jacques trepp
Eric wrote:
Bonjour,

Un problème très curieux : j'ai créé une requête sous l'éditeur
intégré et cette requête contient une clause IN.
SELECT Client.Nom, Client.Prenom FROM Client WHERE Client.CleUnique IN
(1,2,4)

Si je définis le contenu de cette clause comme une liste de valeurs
(que j'entre directement dans la condition), aucun problème.
SELECT Client.Nom, Client.Prenom FROM Client WHERE Client.CleUnique IN
(1,2,4)

Si j'indique que le contenu du IN provient d'un paramètre et que, à
l'exécution de la requête, je rentre les mêmes valeurs que ci-dessus,
seul l'enregistrement correspondant au premier membre de la liste
m'est retourné (si les valeurs sont numériques car, dans le cas d'un
IN avec une liste de valeurs alpha, rien n'est retourné).
Je donne la valeur "1,2,4" à Param1
SELECT Client.Nom, Client.Prenom FROM Client WHERE Client.CleUnique IN
({Param1})



Bonsoir,
et si tu fais :
g_requete est une chaine
g_requete = "SELECT Client.Nom, Client.Prenom FROM Client WHERE
Client.CleUnique IN ("+Param1+")"
ça doit bien de donner comme requete :
SELECT Client.Nom, Client.Prenom FROM Client WHERE Client.CleUnique IN
(1,2,4)
Non ?

Jacques TREPP
AlbyGest




---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.662 / Virus Database: 425 - Release Date: 20/04/2004
Avatar
Eric
Le 21 avril 2004 à 17:55, jacques trepp nous disait :

et si tu fais :
g_requete est une chaine
g_requete = "SELECT Client.Nom, Client.Prenom FROM Client WHERE
Client.CleUnique IN ("+Param1+")"
ça doit bien de donner comme requete :
SELECT Client.Nom, Client.Prenom FROM Client WHERE Client.CleUnique IN
(1,2,4)
Non ?



Là, tu me proposes de passer par ExecuteRequeteSQL et, comme je le
signale, ça marche ! Le problème se pose avec les requêtes créees sous
l'éditeur, que ce soit en exécution depuis l'éditeur ou depuis mon
programme avec ExecuteRequete.

--
Cordialement
Avatar
Roumegou
Il se trouve que Eric a formulé :
Le 21 avril 2004 à 17:55, jacques trepp nous disait :

et si tu fais :
g_requete est une chaine
g_requete = "SELECT Client.Nom, Client.Prenom FROM Client WHERE
Client.CleUnique IN ("+Param1+")"
ça doit bien de donner comme requete :
SELECT Client.Nom, Client.Prenom FROM Client WHERE Client.CleUnique IN
(1,2,4)
Non ?



Là, tu me proposes de passer par ExecuteRequeteSQL et, comme je le
signale, ça marche ! Le problème se pose avec les requêtes créees sous
l'éditeur, que ce soit en exécution depuis l'éditeur ou depuis mon
programme avec ExecuteRequete.



Faut-il utiliser cet éditeur ? là est la question.
Pour ma part, j'ai essayé une fois et j'ai abandonné car c'était
vraiment trop limité.

--
Eric Roumegou
http://cerbermail.com/?TSoulBerPA
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Eric
Le 21 avril 2004 à 18:17, Roumegou nous disait :

Là, tu me proposes de passer par ExecuteRequeteSQL et, comme je le
signale, ça marche ! Le problème se pose avec les requêtes créees sous
l'éditeur, que ce soit en exécution depuis l'éditeur ou depuis mon
programme avec ExecuteRequete.



Faut-il utiliser cet éditeur ? là est la question.
Pour ma part, j'ai essayé une fois et j'ai abandonné car c'était
vraiment trop limité.



Pour des requêtes simples, du genre de celles qui alimentent des tables,
c'est pratique. Et je trouve qu'il a fait des progrès significatifs en
v8. Sauf pour les clauses IN... :-)

--
Cordialement
Avatar
Dev
Bonjour,
la rétro-analyse à l'air de commencer à fonctionner et dans certains cas, il
est plus simple d'écrire la requête à la main, puis de la retro-analyser.
Par contre il est toujours impossible de mettre des valeurs négatives dans
les In, et ce depuis toujours!!

--
Cordialement
Christophe Charron

Service Développement
PROLOGIQ
7 bis Rue des Aulnes
69410 Champagne au Mont d'Or

Tel : 0 437 499 107
Fax : 0 437 499 105
mailto:

"Eric" <ericb33+ a écrit dans le message de
news:
Le 21 avril 2004 à 18:17, Roumegou nous disait :

>> Là, tu me proposes de passer par ExecuteRequeteSQL et, comme je le
>> signale, ça marche ! Le problème se pose avec les requêtes créees sous
>> l'éditeur, que ce soit en exécution depuis l'éditeur ou depuis mon
>> programme avec ExecuteRequete.
>
> Faut-il utiliser cet éditeur ? là est la question.
> Pour ma part, j'ai essayé une fois et j'ai abandonné car c'était
> vraiment trop limité.

Pour des requêtes simples, du genre de celles qui alimentent des tables,
c'est pratique. Et je trouve qu'il a fait des progrès significatifs en
v8. Sauf pour les clauses IN... :-)

--
Cordialement


Avatar
Antoine
Dev wrote:
Bonjour,
la rétro-analyse à l'air de commencer à fonctionner et dans certains
cas, il est plus simple d'écrire la requête à la main, puis de la
retro-analyser. Par contre il est toujours impossible de mettre des
valeurs négatives dans les In, et ce depuis toujours!!


"Eric" <ericb33+ a écrit dans le message de
news:
Le 21 avril 2004 à 18:17, Roumegou nous disait :

Là, tu me proposes de passer par ExecuteRequeteSQL et, comme je le
signale, ça marche ! Le problème se pose avec les requêtes créees
sous l'éditeur, que ce soit en exécution depuis l'éditeur ou
depuis mon programme avec ExecuteRequete.



Faut-il utiliser cet éditeur ? là est la question.
Pour ma part, j'ai essayé une fois et j'ai abandonné car c'était
vraiment trop limité.



Pour des requêtes simples, du genre de celles qui alimentent des
tables, c'est pratique. Et je trouve qu'il a fait des progrès
significatifs en v8. Sauf pour les clauses IN... :-)

--
Cordialement





Tu as la réponse sur le forum de pcsoft. Cet éditeur est capable de faire ce
traitement.
toutefois, comme c'est indiqué dans la doc, le séparateur de parametres
n'est pas "," mais RC ou TAB ou ";".
Avatar
Eric
Le 23 avril 2004 à 07:25, Antoine nous disait :

Tu as la réponse sur le forum de pcsoft. Cet éditeur est capable de faire ce
traitement.
toutefois, comme c'est indiqué dans la doc, le séparateur de parametres
n'est pas "," mais RC ou TAB ou ";".



Voilà ma réponse dans le forum PC Soft (pour ceux qui ne le liraient
pas) :

C'est exact. Cependant, si en description de requête j'indique que ma
rubrique est dans une liste de valeurs/paramètres et que j'indique 2
valeurs, ces valeurs sont séparées par une virgule lorsque je visualise
le code SQL généré.
D'autre part, si j'écris ma requête à la main, avec des valeurs séparées
par des virgules, et que je l'exécute avec ExecuteRequeteSQL, ça
fonctionne aussi.
C'est pourquoi je trouve ces différences pas très cohérentes.

--
Cordialement