PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → Il doit y avoir une solution simple!
Il doit y avoir une solution simple!
Iniciado por Steven B., jun., 28 2005 8:47 PM - 5 respostas
Publicado em junho, 28 2005 - 8:47 PM
Je veux initialiser une requête d'un état, qui possède 4 paramètres:

iInitRequeteEtat(Etat_Fiche_Lttrac, lotValeur, chauValeur, dateDebValeur, dateFinValeur)

Cependant, dépendant si l'usager a rempli les champs ou non, je voudrais passer seulement quelques paramètres (ceux qui qui ont une valeur dans le champ correspondant). Le problème, c'est que même si je met la valeur des paramètrse (lotValeur, chauValeur...) à Null, la requête fait une comparaison à Null au lieu d'ignorer le paramètre. Il faut explicitement que je mette null dans l'iInitRequeteEtat, comme ceci:

(Etat_Fiche_Lttrac, null, chauValeur, dateDebValeur, dateFinValeur)

pour qu'une condition de sélection soit ignorée (ici lotValeur). Il faudrait donc que je fasse 16 SI pour vérifier quels champs sont vides et appeler la méthode de façon conséquente.

Mais je suis sur qu'il y a une façon plus simple, quelqu'un a quelque chose à me proposer? :)

Steven
Publicado em junho, 29 2005 - 12:19 AM
Dans un message Steven B. disait :


iInitRequeteEtat(Etat_Fiche_Lttrac, lotValeur, chauValeur,
dateDebValeur, dateFinValeur)

Cependant, dépendant si l'usager a rempli les champs ou non, je
voudrais passer seulement quelques paramètres (ceux qui qui ont une
valeur dans le champ correspondant). Le problème, c'est que même si
je met la valeur des paramètrse (lotValeur, chauValeur...) à Null, la
requête fait une comparaison à Null au lieu d'ignorer le paramètre.
Il faut explicitement que je mette null dans l'iInitRequeteEtat,
comme ceci:



Ah qqun qui a la même pouic que moi ;-))))

la seule solution que j'ai trouve est de faire la requête EN DEHORS de
l'état,
de déclarer l'état basé sur la requête.

initialiser les paramètres avant l'appel à l'état avec null ou valeur
selon...
et cela marche.

Et au fait ne pas oublier les Hannuledeclaration pour que la prochaine
exécution reprenne bien les paramètres nouveaux


HTH
--
Michel HERRSCHER CONSULTANT
Président WINDASSO - Association des utilisateurs WxxDEV(c)
Tel : +33450870912 Fax:+33450871741
http://www.windasso.org
Publicado em junho, 29 2005 - 9:25 AM
Personnellement je vous conseille de travailler avec une requête externe à l'état, tu pourras plus facilement l'utiliser....

Ensuite, avant de lancer ton état, lance ta requête de la manière suivante:


Si MonChampParametre1 <> "" alors
MaRequete.Parametre1 = MonChampParametre1
FIN
Si MonChampParametre2 <> "" alors
MaRequete.Parametre2 = MonChampParametre2
FIN
Si MonChampParametre3 <> "" alors
MaRequete.Parametre3 = MonChampParametre3
FIN
Si MonChampParametre4 <> "" alors
MaRequete.Parametre4 = MonChampParametre4
FIN

HExecuteRequete(MaRequete,RequeteDefaut)

iApercu(i100)
iImprimeEtat(MonEtat)


Et le tour est joué et tu à paramétré ta requête qu'avec les éléments dont tu avais besoin !!!!
Publicado em junho, 29 2005 - 10:27 AM
"Steven B." <guest@newsgroup.fr> a écrit dans le message de news:
42c17488$1@news.pcsoft.fr...
Je veux initialiser une requête d'un état, qui possède 4 paramètres:

iInitRequeteEtat(Etat_Fiche_Lttrac, lotValeur, chauValeur, dateDebValeur,
dateFinValeur)

Cependant, dépendant si l'usager a rempli les champs ou non, je voudrais
passer seulement quelques paramètres (ceux qui qui ont une valeur dans le
champ correspondant). Le problème, c'est que même si je met la valeur des
paramètrse (lotValeur, chauValeur...) à Null, la requête fait une
comparaison à Null au lieu d'ignorer le paramètre. Il faut explicitement
que je mette null dans l'iInitRequeteEtat, comme ceci:

(Etat_Fiche_Lttrac, null, chauValeur, dateDebValeur, dateFinValeur)

pour qu'une condition de sélection soit ignorée (ici lotValeur). Il
faudrait donc que je fasse 16 SI pour vérifier quels champs sont vides et
appeler la méthode de façon conséquente.

Mais je suis sur qu'il y a une façon plus simple, quelqu'un a quelque
chose à me proposer? :)

Steven

bonjour
dans un requête paramétré pour ne pas tenir compte d'une condition de
sélection donc d'un paramètre il suffit de remplacer celui si par Null et
non mettre sa valeur à Null
exemple :
iInitRequeteEtat(Etat_Fiche_Lttrac, lotValeur, Null, dateDebValeur,
dateFinValeur) ne tient pas compte de chauValeur
utiliser des variant c'est plus facile

vlotValeur est variant
vchauValeur est variant
etc....

SI MonChamp <> "" ALORS // MonChamp contient une chaine)
vlotValeur = MonChamp
SINON
vlotValeur = Null
FIN

cdt JeAn-PhI
Publicado em junho, 29 2005 - 1:35 PM
si tu veux rien programmer de plus et conserver ta requete intégrée
coches la propriété retourne Null si vide ( onglet général de la description ) pour les champs servants à paramétrer la requete

j'ai fais un test qui fonctionne

bon dev
Publicado em junho, 29 2005 - 6:27 PM
En intégrant un peu tout ce qui a été mentionné, j'ai réussi à arriver au résultat sans modifier l'état :)

Tout d'abord, j'ai mis la propriété retourne null si vide pour les champs que c'était possible (j'ai 2 champs qui proviennent d'une fenêtre interne, qui contient le résultat sous forme de concaténation des deux chaines de valeur). Ensuite, jai stocké les valeurs de mes champs dans des variables de type variant, puis vérifié si les dates correspondaient à des chaines vides, je les remplace par Null. Puis, directement dans ma fenêtre, je peux initiialiser la requête de mon état.

lotValeur, chauValeur, dateDebValeur, dateFinValeur sont des Variants

lotValeur = FiltreNoLot..Valeur
chauValeur = FiltreNoChauffeur..Valeur
dateDebValeur = ExtraitChaîne(PeriodeLog..Valeur, 1)
dateFinValeur = ExtraitChaîne(PeriodeLog..Valeur, 2)

//pour les dates, elles ne sont pas égales à Null si vides mais à "", alors on fait la modification
SI dateDebValeur = "" ALORS
dateDebValeur = Null
FIN
SI dateFinValeur = "" ALORS
dateFinValeur = Null
FIN

iInitRequeteEtat(Etat_Fiche_Lttrac, lotValeur, chauValeur, dateDebValeur, dateFinValeur)
iAperçu()
iImprimeEtat(Etat_Fiche_Lttrac, lotValeur, chauValeur, dateDebValeur, dateFinValeur)

Merci à tous pour votre aide

Steven