IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

HLitRecherchePremier renvoie faux [WD18]


Sujet :

WinDev

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Février 2014
    Messages : 19
    Points : 14
    Points
    14
    Par défaut HLitRecherchePremier renvoie faux
    Bonjour,

    Je tente d'utiliser la fonction "HLitRecherchePremier" sur une requête.

    La requête manipulée dépend d'une variable, définie par un choix de l'utilisateur.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HLitRecherchePremier({"REQ_" + ChoixUtilisateur}, "Couleur", COMBO_Couleur..ValeurAffichée)
    Bien entendu, la fonction devrait trouver un enregistrement dont la couleur correspond à celle affichée dans le combo.

    Malheureusement, le résultat est toujours négatif, aucun enregistrement n'est trouvé.

    Comment résoudre le problème ?

    Merci :-)

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonjour,

    Comment résoudre le problème ?
    Déjà en nous informant d'avantage, notamment

    - "REQ_" + ChoixUtilisateur} ?
    - montrez nous votre requête
    - avez-vous testé votre requête ?

    Ne confondez pas :
    Développez.com, "Club des développeurs", pas "Club des devins" !

    Bonne journée

    Hemgé

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 128
    Points : 170
    Points
    170
    Par défaut
    Salut,

    Je ne sais pas si ça vient de là mais pourquoi utilises-tu une indirection?
    Avec un simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HLitRecherchePremier("REQ_" + ChoixUtilisateur, "Couleur", COMBO_Clé..ValeurAffichée)
    Ça fonctionne?

    [EDIT]
    Il est vrai que je me suis lancé un peu vite
    Pas pensé que ca pouvait venir d'ailleurs, on verra bien...

  4. #4
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Février 2014
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Hum.. au temps pour moi, j'ai voulu faire simple.

    Mon projet est pourvu de multiples requêtes, ces dernières sont appelées (ou non) selon les choix de l'utilisateur (d'où la variable "ChoixUtilisateur").

    Ayant testé une par une les requêtes, je suis en mesure de dire qu'elles fonctionnent (un état est d'ailleurs généré selon la requête utilisée).

    J'ai bien testé ce code..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HLitRecherchePremier("REQ_" + ChoixUtilisateur, "Couleur", COMBO_Couleur..ValeurAffichée)
    ..mais le résultat est toujours le même.

    La requête en elle même est basique, la voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT 
            DONNEES.Nom AS Nom,
            DONNEES.Prenom AS Prenom,
            DONNEES.Equipe AS Equipe,
    	DONNEES.Couleur AS Couleur,		
    WHERE 
    	DONNEES.Equipe = 1
    	AND	DONNEES.Couleur = 1
    Voilà,

    Merci pour vos réponses.

  5. #5
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonsoir,

    3 observations :

    je n'avais pas remarqué que vous aviez utilisé une indirection. Honnêtement, je ne sais pas si vous pouvez le faire là et je ne peux tester ce soir.
    il faudrait alors tester aussi avec la constante indFichier censée accélérer la recherche ou parfois rendre l'instruction efficace. Il me semble en effet avoir déjà rencontré des blocages quand j'avais omis de renseigner une constante (adéquate bien entendu).

    Je crois que vous devriez qualifier le nom de la rubrique sur laquelle vous effectuez la recherche : "nom_requête.nom_rubrique"
    Je ne suis pas certain que Windev connaisse ses rubriques, mais sans certitude parce que je n'utilise pas l'éditeur de requête de Windev et que mes requêtes ne sont donc pas répertoriées.

    Et surtout, une fois votre problème éclairci, je vous suggère d'utiliser des requêtes paramétrées :
    - vous en aurez sans doute beaucoup moins
    - la maintenance serait plus aisée
    - les choix utilisateurs pourront évoluer sans contrainte
    - vous n'aurez pas de problème de construction de nom de requête

    Dans l'immédiat, deux tests à pratiquer pour vous orienter :
    Essayez avec un nom de requête en dur : HLitRecherchePremier("REQ_2", "Couleur", COMBO_Couleur..ValeurAffichée)
    Si cela échoue, essayez avec le nom en dur et le préfixage de la rubrique : HLitRecherchePremier("REQ_2", "Req_2.Couleur", COMBO_Couleur..ValeurAffichée)
    Si cela ne fonctionne toujours pas, alors il faudra voir si COMBO_Couleur..ValeurAffichée correspond bien à une des valeurs de Couleur : par exemple, "2" n'est pas égal à "02"

    Bonne chasse

    Hemgé

  6. #6
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    Bonjour,

    dans votre requête vous avez mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT 
            DONNEES.Nom AS Nom,
            DONNEES.Prenom AS Prenom,
            DONNEES.Equipe AS Equipe,
    	DONNEES.Couleur AS Couleur,		
    WHERE 
    	DONNEES.Equipe = 1
    	AND	DONNEES.Couleur = 1
    où couleur sera égale à 1 tous le temps ! Vous pouvez modifier autant que vous voulez la combo, tant que celle-ci ne sera pas égale à 1 aussi vous n'aurez pas le résultat attendu.

    Enlevez la condition fixe de couleur pour une condition paramétrée et ça devrait beaucoup mieux marcher !

    à bientôt,

    Nicolas

  7. #7
    Membre averti
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    256
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2010
    Messages : 256
    Points : 435
    Points
    435
    Par défaut
    Bonjour,

    On suppose aussi que COMBO_Couleur..ValeurAffichée est égale à un truc du genre "Rouge", "Bleu", ... et pas 1 ou 2
    Or, DONNEES.Couleur est égale à 1 dans votre requête...
    Etes-vous sûr de chercher sur le bon argument?

    Patrick

  8. #8
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Février 2014
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    En réalité, le combo est lui-même alimenté selon la requête. Autrement dit, la fonction "HLitRecherchePremier" doit systématiquement renvoyer vrai.

    J'ai testé en inscrivant la requête en "dur" comme dans cet exemple : HLitRecherchePremier("REQ_2", "Couleur", COMBO_Couleur..ValeurAffichée), et ça a fonctionné.

    Et, finalement, ce code fonctionne également :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HLitRecherchePremier({"REQ_" + ChoixUtilisateur, indFichier}, {"REQ_" + ChoixUtilisateur + ".Couleur"}, COMBO_Couleur..ValeurAffichée)
    Une dernière chose, admettons que je souhaite "transformer" ma requête en une requête paramétrée.. ce qui donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT *
    FROM DONNEES  	
    WHERE 
    	{%1} = '1'
    	AND	{%2} = '1'
    Déjà, est ce la syntaxe vous paraît bonne ? Deuxièmement, je n'arrive pas à exécuter la requête... Si je reprends par exemple le code permettant de remplir le fameux combo :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // Remplit le combo
    HExécuteRequête(REQ_Paramétrée,hRequêteDéfaut,"DONNEES.Couleur","DONNEES.Equipe")
    POUR TOUT REQ_DateType 
    	ListeAjoute(COMBO_Couleur, REQ_Paramétrée.Couleur)
    FIN
    J'ai testé plusieurs écritures mais rien n'y fait, le combo reste vide :-(

    Merci à vous

  9. #9
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Donc, vous avez bien avancé. OK

    Vous n'avez pas besoin d'indirection avec les paramètres.
    Voyez du côté de ChaîneConstruit pour passer vos paramètres à votre requête.

    Bonsoir

    PS : Et quand tout sera bon, n'oubliez pas de passer en [Résolu]

  10. #10
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Février 2014
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Bordel, c'est au top :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // Initialisation de la requête
    REQ_DONNEES est une Source de Données
    MaChaîne est une chaîne = "SELECT * FROM DONNES WHERE %1 = '1' AND %2 = '1'"
    MonRésultat est une chaîne = ChaîneConstruit(MaChaîne,[Equipe,Couleur])
    //Info(MonRésultat)
    HExécuteRequêteSQL(REQ_DONNEES,hRequêteDéfaut,MonRésultat)
     
    // Remplit le combo
    POUR TOUT REQ_DONNEES  
    	ListeAjoute(COMBO_Couleur, REQ_DONNEES.Couleur)
    FIN
    Un grand merci :-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ajax Hlitpremier renvoie Faux
    Par dsr57 dans le forum WebDev
    Réponses: 4
    Dernier message: 03/06/2014, 17h18
  2. Réponses: 3
    Dernier message: 30/03/2012, 13h27
  3. Réponses: 6
    Dernier message: 04/05/2010, 10h18
  4. méthode sans erreur de syntaxe renvoie faux
    Par Vincent Heude dans le forum 4D
    Réponses: 1
    Dernier message: 13/04/2009, 21h25
  5. Réponses: 1
    Dernier message: 23/01/2008, 18h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo