Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[WD12] Est dans la liste et Bool

17 réponses
Avatar
MJ.Finar
Bonjour,

J=E2=80=99avais d=C3=A9j=C3=A0 lanc=C3=A9 un topic sur le sujet que je vais =
aborder, mais
sans r=C3=A9ponse=E2=80=A6 Le probl=C3=A8me devenant de plus en plus=E2=80=
=A6 Probl=C3=A9matique, je
vais essayer de clarifier le probl=C3=A8me en esp=C3=A9rant que cela facilit=
era
l=E2=80=99apport de solutions, ou tout du moins de pistes =EF=81=8A

Le principe :
Une requ=C3=AAte de s=C3=A9lection, qui s=C3=A9lectionne donc un certain nom=
bre
d=E2=80=99enregistrement et les affiche dans une table qui est donc bas=C3=
=A9e sur
cette requ=C3=AAte. Jusqu'=C3=A0 la, pas de soucis.

A cette requ=C3=AAte vient s=E2=80=99ajouter un certain nombre de param=C3=
=A8tres, dont
je ne garderais que ceux qui apr=C3=A8s divers tests, s=E2=80=99av=C3=A8rent=
faire
partis du probl=C3=A8me.
Ces param=C3=A8tres donc :
- Est dans la liste, sur ma rubrique ID
- Egal =C3=A0, sur un bool=C3=A9en.

Et voila, selon les cas, comment r=C3=A9agit ma requ=C3=AAte :
- Aucun param=C3=A8tre de renseign=C3=A9 : Tous les enregistrements de mon
fichier s=E2=80=99affiche correctement.
- ParamBooleen renseign=C3=A9 =C3=A0 1 : Tous mes enregistrements dont le
Bool=C3=A9en est =C3=A0 1 s=E2=80=99affichent bien.
- ParamListeID renseign=C3=A9 avec une liste d=E2=80=99ID au format =C2=AB I=
D, ID, ID,
ID =C2=BB : Tous mes enregistrements dont l=E2=80=99ID se trouve dans la lis=
te
s=E2=80=99affichent bien.
- Ces deux param=C3=A8tres renseign=C3=A9s en m=C3=AAme temps : Aucun enregi=
strement
ne s=E2=80=99affiche, ou =C3=A9ventuellement parfois le premier correspondan=
t aux
param=C3=A8tres.

Bien sur, j=E2=80=99ai v=C3=A9rifi=C3=A9 les donn=C3=A9es, et il y a bien de=
s enregistrements
correspondant aux deux param=C3=A8tres =C3=A0 la fois, et pas qu=E2=80=99un.=
De plus,
cela fonctionnait parfaitement sous WinDev 11.
J=E2=80=99ai =C3=A9galement trac=C3=A9 dans tous les sens possibles le d=C3=
=A9roulement de
tout cela, et hormis le fait que la requ=C3=AAte ne renvoi aucun (ou un
seul) enregistrement, tout se passe bien. Pas de messages d=E2=80=99erreurs,=

HExecuteRequete qui renvoie bien Vrai, etc etc=E2=80=A6

Apr=C3=A8s avoir retourn=C3=A9 le code, le fichier, la requ=C3=AAte, et tout=
ce que
je pouvais dans tous les sens, je me suis laiss=C3=A9 dire que le fondement
du probl=C3=A8me =C3=A9tait =C3=A0 un niveau plus basique, j=E2=80=99ai donc=
essay=C3=A9 diverses
requ=C3=AAte en SQL directement, via WDMap, et via le Centre de Contr=C3=B4l=
e
HyperFile, les r=C3=A9sultats :
- =C2=AB 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)=C2=BB :
Renvoit bien les enregistrements correspondants =C3=A0 la liste d=E2=80=99ID=
.

- =C2=AB SELECT *
FROM CLIENTS_FOURNISSEURS
WHERE ClientOuFournisseur=3D1 =C2=BB : Renvoi bien les enregistrements avec
le bool=C3=A9en =C3=A0 1.

- =C2=AB 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=3D1 =C2=BB : Ne renvoi aucun enregistrement. La
encore bien sur, j=E2=80=99ai v=C3=A9rifi=C3=A9 que des enregistrements corr=
espondaient
bien aux deux conditions =C3=A0 la fois, et il y en.

L=E2=80=99application est assez grosse et utilise des param=C3=A8tres de ce =
types =C3=A0
plusieurs endroits, param=C3=A8tres qu=E2=80=99il est difficile de remplacer=
. Le
probl=C3=A8me est donc des plus g=C3=AAnant=E2=80=A6


Merci d=E2=80=99avoir lu, et merci d=E2=80=99avance pour ceux qui r=C3=A9fl=
=C3=A9chiront au
probl=C3=A8me,

Finar, d=C3=A9sesp=C3=A9r=C3=A9.

PS : Concernant le s=C3=A9parateur =C2=AB , =C2=BB dans la liste. Les r=C3=
=A9actions ne
sont pas meilleures avec TAB, RC, etc=E2=80=A6
PS2 : Les diff=C3=A9rents modes d=E2=80=99=C3=A9x=C3=A9cution hRequeteDefaut=
,
hRequeteSansCorrection, hRequeteSansCorretionHF, etc, ne change rien
au probl=C3=A8me, ou =C2=AB l=E2=80=99aggrave =C2=BB juste.
PS3 : Une requete a =C3=A9t=C3=A9 envoy=C3=A9e au Support Technique, sans r=
=C3=A9ponse
pour le moment.

10 réponses

1 2
Avatar
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 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
Avatar
MJ.Finar
On 22 jan, 10:27, Pascal F wrote:
> - << 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 :-/
Avatar
Romain PETIT
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é)
Avatar
MJ.Finar
On 22 jan, 11:32, Romain PETIT wrote:
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 ?
Avatar
Romain PETIT
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é)
Avatar
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
Avatar
MJ.Finar
On 22 jan, 14:15, Albert wrote:
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.
Avatar
Daniel
a écrit :
On 22 jan, 14:15, Albert wrote:
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
;-)
Avatar
MJ.Finar
On 22 jan, 14:53, Daniel wrote:
a écrit :



> On 22 jan, 14:15, Albert wrote:
>> 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.
Avatar
J.B.
Le Tue, 22 Jan 2008 14:22:17 +0100, a écrit:

On 22 jan, 14:15, Albert wrote:
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
1 2