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 :

HTrouve = faux renvoie ..plan [WD15]


Sujet :

WinDev

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 87
    Points : 49
    Points
    49
    Par défaut HTrouve = faux renvoie ..plan
    Bonjour à tous

    je vous explique mon problème.

    J'ai une analyse qui se nome "Base" avec 3 colonnes "IDBASE","Noms","Définitions".

    Dans ma fenêtre, j'ai un champ de recherche nommé "SAI_Saisie1". En dessous j'ai une table nommé "TABLE_Base" ou s'affiche tous les Noms.

    Lorsque je fait une recherche dans le champ recherche sa me cherche le mot demander sans souci. Ce que je cherche à faire est si je recherche un mot qui ne se trouve pas dans la base qu'il me renvoi sur un autre ..plan.

    Dans mon champ "SAI_Saisie1" j'ai (A chaque modification):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TableSelectPlus(TABLE_Base,TableCherche(Noms,SansEspace(SAI_Saisie1),Faux))
     
    SI HTrouve(Base) ALORS
    	ExécuteTraitement(TABLE_Base,trtSélection)
    FIN
    Dans la table "TABLE_Base" j'ai (Sélection d'une ligne) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    sRepExe est une chaîne 
     
    SI EnModeTest() ALORS 
    	sRepExe = fRepEnCours()
    SINON
    	sRepExe = Remplace(ExeInfo(exeRépertoire),"\","/")
    FIN
     
     
    SI HTrouve(Base) ALORS
    	test..Plan = 1
    	HTM_HTML1=Remplace(Base.Définitions,"*Chemin*",sRepExe+"/Medias")	
    FIN
    J'ai tester avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    sRepExe est une chaîne 
     
    SI EnModeTest() ALORS 
       sRepExe = fRepEnCours()
    SINON
       sRepExe = Remplace(ExeInfo(exeRépertoire),"\","/")
    FIN
     
    HLitRecherche(Base,Noms,TABLE_Base[TableSelect(TABLE_Base)])
     
    SI HTrouve(Base) = Vrai ALORS
       test..Plan = 1
       HTM_HTML2=Remplace(Base.Définitions,"*Chemin*",sRepExe+"/Medias")
    FIN
     
     
    SI PAS HTrouve(Base) = Faux ALORS
       test..Plan = 2
    FIN
    Là sa m'ouvre bien le ..plan 2 mais directement à la première lettre écrite dans le champ de recherche.

    J'ai encore tester avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    sRepExe est une chaîne 
     
    SI EnModeTest() ALORS 
       sRepExe = fRepEnCours()
    SINON
       sRepExe = Remplace(ExeInfo(exeRépertoire),"\","/")
    FIN
     
    HLitRecherche(Base,Noms,TABLE_Base[TableSelect(TABLE_Base)])
     
    SI HTrouve(Base) ALORS
       test..Plan = 1
       HTM_HTML2=Remplace(Base.Définitions,"*Chemin*",sRepExe+"/Medias")
    SINON
       test..Plan = 2
    FIN
    Là sa me fait rien sa recherche juste et s’arrête si il y a une faute.

    J'ai donc tester le HTrouve avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    sRepExe est une chaîne 
     
    SI EnModeTest() ALORS 
       sRepExe = fRepEnCours()
    SINON
       sRepExe = Remplace(ExeInfo(exeRépertoire),"\","/")
    FIN
     
    HLitRecherche(Base,Noms,TABLE_Base[TableSelect(TABLE_Base)])
     
    SI HTrouve(Base) ALORS
       ExécuteTraitement(TABLE_Base,trtSélection)
       Info("Enregistrement trouvé")
    SINON
       Erreur("Aucun enregistrement ne correspond")
    FIN
    que je fasse une bonne ou une mauvaise recherche, j'ai toujours le droit à : "Enregistrement trouvé"

    Si quelqu'un pourrais me donner un coup de main.

    amicalement

  2. #2
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Bonsoir,

    La fonction HTrouve permet de savoir si une recherche dans un fichier a abouti. Dans ton 1er bout de code, tu fais un test avec htrouve mais tu n'effectue pas de recherche dans le fichier, du coup htrouve à comme valeur le résultat de la dernier recherche ce qui dans ton cas est une valeur indéfini. Il faut que tu utilise avant htrouve un h<quelque chose> qui effectue une recherche.

    Dans ton 4ième bout de code, tu indique que le résultat est toujours "enregistrement trouvé". Ceci me semble normal dans le sens où HLitRecherche effectue une recherche générique, c'est à dire qu'il cherche le premier enregistrement dont la clé est >= à la valeur cherché (voir la documentation http://doc.pcsoft.fr/fr-fr/?3044050&...erche-fonction)

    Pour effectuer une recherche, je préconiserais donc :
    1) effectuer une recherche avec HLitRecherchePremier
    2) tester après le résultat de la recherche avec HTrouve
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 87
    Points : 49
    Points
    49
    Par défaut
    Merci DelphiManiac d'avoir répondu

    J'ai essayer de le transformer en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    sRepExe est une chaîne 
     
    SI EnModeTest() ALORS 
    	sRepExe = fRepEnCours()
    SINON
    	sRepExe = Remplace(ExeInfo(exeRépertoire),"\","/")
    FIN
     
     
    HLitRecherche(Base,Noms,Base.Noms,hIdentique)
    HLitRecherchePremier(Base, Noms, Base.Noms)
     
    TANTQUE HTrouve()=Vrai
    	test..Plan = 1
    	HTM_HTML1=Remplace(Base.Définitions,"*Chemin*",sRepExe+"/Medias")
    	HLitSuivant(Base, Noms)
    FIN
     
    TANTQUE HTrouve()=Faux
    	test..Plan = 2
    FIN
    Mais le programme se lance pas comment je peu faire les conditions avec TANTQUE ?

    amicalement

  4. #4
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Je reprend en fonction de ce que j'ai compris :

    Dans le champ sai_saisie1, l'utilisateur tape une valeur a rechercher. Si tu garde ton code tel quel il a été présenté au début (donc avec l'appel à la recherche à chaque modification), dès que l'utilisateur va taper quelque chose, la recherche sera lancé et si aucun élément ne correspond alors tu passes sur le plan 2. Si j'ai bien compris, ce dont j'ai un doute, dès que l'utilisateur va taper la lettre A par exemple, il y a de forte chance que personne ne se nomme A, du coup on va passer sur le plan 2 direct.

    D'après ce que je dis avant, il serait dans ces cas préférable de rechercher quelque chose qui commence par A et si on ne trouve pas la valeur exacte, mais seulement quelque chose qui commence par A on ne fait rien, on attend juste que l'utilisateur continue de taper. Dès que l'on le trouve pas quelque chose qui est égal à la valeur recherché et qui ne commence pas par la valeur recherché on passe au plan 2.

    La troisième solution serait de ne pas faire la recherche a chaque modification mais de lancer la recherche quand l'utilisateur quitte le champ.


    Dans un premier temps il faudrait que je comprenne précisément quels type de saisie tu veux réaliser.
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 87
    Points : 49
    Points
    49
    Par défaut
    En faite pour faire plus simple quand je fait une recherche dans le champ de saisie, le champ table commence directement à chercher le mot.

    Dans la table j'ai de A à Z en passant y compris par les chiffres.

    Donc si par exemple j'ai dans la table avion et je cherche aviation, avi est commun aux deux mais quand je rajoute le "a" de aviation mot inexistant sa passe donc sur le plan 2

    amicalement

  6. #6
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Je n'avais pas bien compris la demande alors !! HLitRecherche est plus adapté dans ce cas.

    Dans le code "a chaque modification" de sai_saiei1 tu ne laisse que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TableSelectPlus(TABLE_Base,TableCherche(Noms,SansEspace(SAI_Saisie1),Faux))
    Recherche()
    tu déclare par ailleurs une procédure nommé Recherche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procédure Recherche()
    HLitRecherche(Base,Noms,SAI_Saisie1)
     
    SI pas HTrouve(Base) ALORS
       test..Plan = 2
    FIN
    On recherche tout enregistrement commençant par la valeur saisie dans SAI_Saisie1. HlitRecherche étant, d'après la doc, une recherche générique, extrait de la doc :

    - Recherche générique : recherche de tous les enregistrements commençant par la valeur indiquée

    la fonction doit donc chercher tout enregistrement égal ou commençant par la valeur recherché, si après la recherche HTrouve = faux, cela signifie qu'aucun enregistrement ne correspond et on switch alors sur le plan 2.

    Je ne pense pas dire de bêtises, mais je n'ai pas testé ^^
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 87
    Points : 49
    Points
    49
    Par défaut
    Merci DelphiManiac c'est exactement se que je recherchais

    Merci bien

    Amicalement

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 04/05/2010, 11h18
  2. méthode sans erreur de syntaxe renvoie faux
    Par Vincent Heude dans le forum 4D
    Réponses: 1
    Dernier message: 13/04/2009, 22h25
  3. mon formulaire de connexion renvoie toujours faux
    Par jerem070695 dans le forum Langage
    Réponses: 2
    Dernier message: 23/11/2008, 09h03
  4. select qui renvoie vrai ou faux
    Par tortuegenie dans le forum Langage SQL
    Réponses: 6
    Dernier message: 18/03/2008, 17h00
  5. Réponses: 1
    Dernier message: 23/01/2008, 19h04

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