[WD12] Est dans la liste et Bool

Le
MJ.Finar
Bonjour,

J’avais déjà lancé un topic sur le sujet que je vais =
aborder, mais
sans réponse… Le problème devenant de plus en plusâ€=
¦ Problématique, je
vais essayer de clarifier le problème en espérant que cela facilit=
era
l’apport de solutions, ou tout du moins de pistes 

Le principe :
Une requête de sélection, qui sélectionne donc un certain nom=
bre
d’enregistrement et les affiche dans une table qui est donc basÃ=
©e sur
cette requête. Jusqu'à la, pas de soucis.

A cette requête vient s’ajouter un certain nombre de paramÃ=
¨tres, dont
je ne garderais que ceux qui après divers tests, s’avèrent=
faire
partis du problème.
Ces paramètres donc :
- Est dans la liste, sur ma rubrique ID
- Egal à, sur un booléen.

Et voila, selon les cas, comment réagit ma requête :
- Aucun paramètre de renseigné : Tous les enregistrements de mon
fichier s’affiche correctement.
- ParamBooleen renseigné à 1 : Tous mes enregistrements dont le
Booléen est à 1 s’affichent bien.
- ParamListeID renseigné avec une liste d’ID au format « I=
D, ID, ID,
ID » : Tous mes enregistrements dont l’ID se trouve dans la lis=
te
s’affichent bien.
- Ces deux paramètres renseignés en même temps : Aucun enregi=
strement
ne s’affiche, ou éventuellement parfois le premier correspondan=
t aux
paramètres.

Bien sur, j’ai vérifié les données, et il y a bien de=
s enregistrements
correspondant aux deux paramètres à la fois, et pas qu’un.=
De plus,
cela fonctionnait parfaitement sous WinDev 11.
J’ai également tracé dans tous les sens possibles le dÃ=
©roulement de
tout cela, et hormis le fait que la requête ne renvoi aucun (ou un
seul) enregistrement, tout se passe bien. Pas de messages d’erreurs,=

HExecuteRequete qui renvoie bien Vrai, etc etc…

Après avoir retourné le code, le fichier, la requête, et tout=
ce que
je pouvais dans tous les sens, je me suis laissé dire que le fondement
du problème était à un niveau plus basique, j’ai donc=
essayé diverses
requête en SQL directement, via WDMap, et via le Centre de Contrôl=
e
HyperFile, les résultats :
- « SELECT *
FROM CLIENTS_FOURNISSEURS
WHERE IDClientFournisseur IN
(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,=
29,30)» :
Renvoit bien les enregistrements correspondants à la liste d’ID=
.

- « SELECT *
FROM CLIENTS_FOURNISSEURS
WHERE ClientOuFournisseur=1 » : Renvoi bien les enregistrements avec
le booléen à 1.

- « SELECT * FROM CLIENTS_FOURNISSEURS
WHERE IDClientFournisseur IN
(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,=
29,30)
AND ClientOuFournisseur=1 » : Ne renvoi aucun enregistrement. La
encore bien sur, j’ai vérifié que des enregistrements corr=
espondaient
bien aux deux conditions à la fois, et il y en.

L’application est assez grosse et utilise des paramètres de ce =
types à
plusieurs endroits, paramètres qu’il est difficile de remplacer=
. Le
problème est donc des plus gênant…


Merci d’avoir lu, et merci d’avance pour ceux qui réfl=
échiront au
problème,

Finar, désespéré.

PS : Concernant le séparateur « , » dans la liste. Les rÃ=
©actions ne
sont pas meilleures avec TAB, RC, etc…
PS2 : Les différents modes d’éxécution hRequeteDefaut=
,
hRequeteSansCorrection, hRequeteSansCorretionHF, etc, ne change rien
au problème, ou « l’aggrave » juste.
PS3 : Une requete a été envoyée au Support Technique, sans r=
éponse
pour le moment.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Pascal F
Le #14482681
>
- « SELECT * FROM CLIENTS_FOURNISSEURS
WHERE IDClientFournisseur IN
(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30)
AND ClientOuFournisseur=1 » : Ne renvoi aucun enregistrement. La
encore bien sur, j’ai vérifié que des enregistrements correspondaient
bien aux deux conditions à la fois, et il y en.




Juste pour avoir eu un problème un peu similaire, as tu essayé en inversant les conditions?
WHERE ClientOuFournisseur=1 AND IDClientFournisseur IN
(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30)»



--
Pascal

Ne garder que le prénom pour me joindre
MJ.Finar
Le #14482671
On 22 jan, 10:27, Pascal F
> - << SELECT * FROM CLIENTS_FOURNISSEURS
> WHERE IDClientFournisseur IN
> (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27 ,28,29,30)
> AND ClientOuFournisseur=1 >> : Ne renvoi aucun enregistrement. La
> encore bien sur, j'ai vérifié que des enregistrements correspondaien t
> bien aux deux conditions à la fois, et il y en.

Juste pour avoir eu un problème un peu similaire, as tu essayé en inve rsant les conditions?

> WHERE ClientOuFournisseur=1 AND IDClientFournisseur IN
> (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27 ,28,29,30)>>

--
Pascal

Ne garder que le prénom pour me joindre



A l'instant, sans plus de succès :-/
Romain PETIT
Le #14482651
avait énoncé :
A l'instant, sans plus de succès :-/



En mettant des parenthèses ?

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
MJ.Finar
Le #14482641
On 22 jan, 11:32, Romain PETIT
avait énoncé :

> A l'instant, sans plus de succès :-/

En mettant des parenthèses ?

--
Romain PETIThttp://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)



Des parenthèses... A quel niveau ?
Romain PETIT
Le #14482631
a formulé la demande :
Des parenthèses... A quel niveau ?



SELECT * FROM CLIENTS_FOURNISSEURS
WHERE
(
(
IDClientFournisseur IN
(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30)
)
AND
(
ClientOuFournisseur=1
)
)

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Albert
Le #14482621
Bonjour,

Personnellement, je préférerais dans votre cas utilisez l'instruction
BETWEEN que IN

SELECT *
FROM CLIENTS_FOURNISSEURS
WHERE IDClientFournisseur BETWEEN 1 AND 30
AND ClientOuFournisseur = 1

Cordialement

Albert
MJ.Finar
Le #14482611
On 22 jan, 14:15, Albert
Bonjour,

Personnellement, je préférerais dans votre cas utilisez l'instruction
BETWEEN que IN

 SELECT *
 FROM CLIENTS_FOURNISSEURS
 WHERE IDClientFournisseur BETWEEN 1 AND 30
 AND ClientOuFournisseur = 1

Cordialement

Albert



Romain PETIT : Malheureusement, ca ne change rien non plus, merci
quand même.

Albert,
Les valeurs utilisées dans la requete ne sont la que pour test, en
réalité, il s'agit de fichiers avec plusieurs milliers, voir dizaine
de milliers d'enregistrement, et la liste de valeurs est rarement
continue, autant ici j'utilise
(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28, 29,30)
pour simplifier, autant concretement, il s'agit plus de
(145,198,2021,2059,... ) etc...
J'aurais du etre plus explicite sur ce point, ca portait un peu à
confusion.
Daniel
Le #14482601
a écrit :
On 22 jan, 14:15, Albert
Bonjour,

Personnellement, je préférerais dans votre cas utilisez l'instruction
BETWEEN que IN

SELECT *
FROM CLIENTS_FOURNISSEURS
WHERE IDClientFournisseur BETWEEN 1 AND 30
AND ClientOuFournisseur = 1

Cordialement

Albert



Romain PETIT : Malheureusement, ca ne change rien non plus, merci
quand même.

Albert,
Les valeurs utilisées dans la requete ne sont la que pour test, en
réalité, il s'agit de fichiers avec plusieurs milliers, voir dizaine
de milliers d'enregistrement, et la liste de valeurs est rarement
continue, autant ici j'utilise
(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30)
pour simplifier, autant concretement, il s'agit plus de
(145,198,2021,2059,... ) etc...
J'aurais du etre plus explicite sur ce point, ca portait un peu à
confusion.



C'est plus qu'embêtant.

Ta requête est bien entendu ok.

Essaie peut être de refaire une réindexation.

--
suivre ce lien pour répondre:
http://cerbermail.com/?2KrV3YZXnn
Daniel
;-)
MJ.Finar
Le #14482591
On 22 jan, 14:53, Daniel
a écrit :



> On 22 jan, 14:15, Albert >> Bonjour,

>> Personnellement, je préférerais dans votre cas utilisez l'instructi on
>> BETWEEN que IN

>>  SELECT *
>>  FROM CLIENTS_FOURNISSEURS
>>  WHERE IDClientFournisseur BETWEEN 1 AND 30
>>  AND ClientOuFournisseur = 1

>> Cordialement

>> Albert

> Romain PETIT : Malheureusement, ca ne change rien non plus, merci
> quand même.

> Albert,
> Les valeurs utilisées dans la requete ne sont la que pour test, en
> réalité, il s'agit de fichiers avec plusieurs milliers, voir dizaine
> de milliers d'enregistrement, et la liste de valeurs est rarement
> continue, autant ici j'utilise
> (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27 ,28,29,30)
> pour simplifier, autant concretement, il s'agit plus de
> (145,198,2021,2059,... ) etc...
> J'aurais du etre plus explicite sur ce point, ca portait un peu à
> confusion.

C'est plus qu'embêtant.

Ta requête est bien entendu ok.

Essaie peut être de refaire une réindexation.

--
suivre ce lien pour répondre:http://cerbermail.com/?2KrV3YZXnn
Daniel
  ;-)



La vérification des index, réindexation etc a déja été tentée...

Nouveau constat au passage (vérifié sur plusieurs fichiers différents,
donc ce n'est pas un problème de données, d'autant que j'ai vérifié) :
Si la requete est "sensée" renvoyer 20 résultat ou moins, elle
fonctionne, 21 et plus, et le problème apparait.
J.B.
Le #14482581
Le Tue, 22 Jan 2008 14:22:17 +0100,
On 22 jan, 14:15, Albert
Bonjour,

Personnellement, je préférerais dans votre cas utilisez l'instruction
BETWEEN que IN

 SELECT *
 FROM CLIENTS_FOURNISSEURS
 WHERE IDClientFournisseur BETWEEN 1 AND 30
 AND ClientOuFournisseur = 1

Cordialement

Albert



Romain PETIT : Malheureusement, ca ne change rien non plus, merci
quand même.

Albert,
Les valeurs utilisées dans la requete ne sont la que pour test, en
réalité, il s'agit de fichiers avec plusieurs milliers, voir dizaine
de milliers d'enregistrement, et la liste de valeurs est rarement
continue, autant ici j'utilise
(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30)
pour simplifier, autant concretement, il s'agit plus de
(145,198,2021,2059,... ) etc...
J'aurais du etre plus explicite sur ce point, ca portait un peu à
confusion.



Pas suivi le début du fil , donc je peux être à côté. Sous Oracle le nombre
de valeurs du IN est limité à 255.

--
J.Bratières
Publicité
Poster une réponse
Anonyme