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.

7 réponses

1 2
Avatar
Albert
Bonjour,

Désolé mais a la premiere lecture de votre post

De plus, cela fonctionnait parfaitement sous WinDev 11.



cette précision m'a échappée

Si cette requête fonctionnait correctement en WD11 théoriquement elle
devrait également fonctionner en WD12

Il semblerait donc que cette dernière version serait en cause ce qui
n'est pas impossible au vu des nombreux post signalant des difficultés
de tous ordres

Personnellement je n'ai encore rien testé en WD12

Dans le forunm d'en face

[Re: [WD12] Est dans la liste et booléen.]

De : Sébastien BOUDOT
Le : 22/01/2008 13:19

donne le code d'un test qu'il a réalisé et qui fonctionne

je relève que sa liste est structurée comme suit :

et un bouton qui affiche les valeurs
REQ_Requête1.fType = Vrai
REQ_Requête1.fListe = "1;2;3;4;5;6;7;8;9;10"



et il termine :

Ca fonctionne, je n'ai que les clients...


/> / résultat de la requete ( fenetre trace )
Execution OK
1<TAB>C1<TAB>Client 1<TAB>1
3<TAB>C3<TAB>Client 3<TAB>1
5<TAB>C5<TAB>Client 5<TAB>1
7<TAB>C7<TAB>Client 7<TAB>1
9<TAB>C9<TAB>Client 9<TAB>1
Ceci en HF classique, je n'ai pas encore installé le C/S WD12 ^^



Cordialement

Albert
Avatar
Daniel
a écrit :
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'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
;-)



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.



dans ce cas tu fais plusieurs In.

Une limite de IN à 20 membres, c'est un peu limite... surtout que la
requête pourrait renvoyer un message d'erreur au lieu d'un résultat
incorrect.


--
suivre ce lien pour répondre:
http://cerbermail.com/?2KrV3YZXnn
Daniel
;-)
Avatar
MJ.Finar
On 22 jan, 15:42, Albert wrote:
Bonjour,

Désolé mais a la premiere lecture de votre post

> De plus, cela fonctionnait parfaitement sous WinDev 11.

cette précision m'a échappée

Si cette requête fonctionnait correctement en WD11 théoriquement elle
devrait également fonctionner en WD12

Il semblerait donc que cette dernière version serait en cause ce qui
n'est pas impossible au vu des nombreux post signalant des difficultés
de tous ordres

Personnellement je n'ai encore rien testé en WD12

Dans le forunm d'en face

[Re: [WD12] Est dans la liste et booléen.]

 De :  Sébastien BOUDOT
 Le : 22/01/2008 13:19

donne le code d'un test qu'il a réalisé et qui fonctionne

je relève que sa liste est structurée comme suit :

> et un bouton qui affiche les valeurs
> REQ_Requête1.fType = Vrai
>REQ_Requête1.fListe = "1;2;3;4;5;6;7;8;9;10"

et il termine :

> Ca fonctionne, je n'ai que les clients...

/> / résultat de la requete ( fenetre trace )

> Execution OK
> 1<TAB>C1<TAB>Client 1<TAB>1
> 3<TAB>C3<TAB>Client 3<TAB>1
> 5<TAB>C5<TAB>Client 5<TAB>1
>7<TAB>C7<TAB>Client 7<TAB>1
> 9<TAB>C9<TAB>Client 9<TAB>1
> Ceci en HF classique, je n'ai pas encore installé le C/S WD12 ^^

Cordialement

Albert



En effet... J'avais déja testé ainsi la semaine passée, sans succès.
Je viens de retenter au cas ou, et le ";" ne passe tout simplement
pas. J'avais également essayé TAB, et RC d'ailleurs.
Avatar
Roumegou Eric
vient de nous annoncer :
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.



attention aux clauses in. Fut un temps, sur oracle (ou peut être mysql)
c'était limité à 255 valeurs, maintenant je ne sais pas
Avatar
Roumegou Eric
Après mûre réflexion, Roumegou Eric a écrit :


attention aux clauses in. Fut un temps, sur oracle (ou peut être mysql)
c'était limité à 255 valeurs, maintenant je ne sais pas



Oups bis repetitae ... j'avais pas lu la meme rmq plus haut.
Dsl
Avatar
Daniel
Roumegou Eric a écrit :
vient de nous annoncer :
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.



attention aux clauses in. Fut un temps, sur oracle (ou peut être mysql)
c'était limité à 255 valeurs, maintenant je ne sais pas





Pour mysql tu peux le paramétrer avec max_allowed_packet.

Par défaut tu es à 16Mo pour une requête.

--
suivre ce lien pour répondre:
http://cerbermail.com/?2KrV3YZXnn
Daniel
;-)
Avatar
MJ.Finar
On 22 jan, 16:51, Daniel wrote:
Roumegou Eric a écrit :



> vient de nous annoncer :
>> On 22 jan, 14:15, Albert wrote:
>>> Bonjour,

>>> Personnellement, je préférerais dans votre cas utilisez l'instruct ion
>>> 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 dizain e
>> 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,2 7,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.

> attention aux clauses in. Fut un temps, sur oracle (ou peut être mysql )
> c'était limité à 255 valeurs, maintenant je ne sais pas

Pour mysql tu peux le paramétrer avec max_allowed_packet.

Par défaut tu es à 16Mo pour une requête.

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



Je vais me renseigner de ce coté la, au cas ou, mais une limitation à
20 enregistrements... Ca me parait peu probable.
1 2