Discussion: mode de recherche combo [WD20]

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    mars 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : mars 2014
    Messages : 37
    Points : 28
    Points
    28

    Par défaut mode de recherche combo

    Bonsoir à tous,

    Débutant sur WINDEV, je suis actuellement sur mon premier projet.
    J'ai mis en place une combo qui est liée avec une base de données (base HFSQL en local). Celle-ci permet de faire une recherche sur le nom d'une ville.
    Ma question est la suivante : est-il possible de mettre en place une recherche qui afficherait tous les résultats de la première lettre tapée par exemple? (ex : M --> Marseille, Montpellier etc...)
    Ou encore mieux est-il possible de faire une recherche sur une partie de chaîne de caractère? ( ex : PARIS, insérer RIS et le choix s'affiche!!)
    Je pense que certaine chose sont possible mais étant débutant j'ai besoin de conseils et de pistes.

    Merci d'avance pour vos retours.

  2. #2
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2004
    Messages
    1 877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2004
    Messages : 1 877
    Points : 3 097
    Points
    3 097

    Par défaut

    Bonjour,

    Dans ce cas et à mon avis, il faudrait que tu remplisses ta combo par programmation au lieu de la relier au fichier.
    Ensuite dans l'événement 'A chaque modification' de ta combo, tu lances une requête allant chercher tous les résultats de ta saisie, et tu remplis la combo avec les résultats.

  3. #3
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    décembre 2013
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : décembre 2013
    Messages : 1 187
    Points : 2 500
    Points
    2 500

    Par défaut

    Mais quand l'utilisateur a tapé juste la 1ère lettre, L par exemple, il ne faut surtout pas remplir la combo avec les 2000 ou 5000 villes qui commencent par un L, tu aurais des temps de réponse abominables, et de toutes façons l'utilisateur ne va pas scroller 1000 lignes pour trouver sa ville.
    Eventuellement, tu peux afficher les 10 villes correspondant à ce qui a été saisi, et qui ont les plus fortes populations.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    mars 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : mars 2014
    Messages : 37
    Points : 28
    Points
    28

    Par défaut

    Bonjour Lo²,

    Tout d'abord merci pour ce retour. Étant débutant, un code à me proposer pour test peut-être?
    Car après quelques recherches sur le Net, j'avais trouvé un code permettant de faire de la recherche par saisie auto... mais cela est déjà possible dans Windev 20 (via des options du champ combo)
    Rien trouvé comme code qui puisse faire ce que je cherche ou s'en rapproche...
    Merci de l'aide.

    Cdlt

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    mars 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : mars 2014
    Messages : 37
    Points : 28
    Points
    28

    Par défaut

    Bonjour tbc92,

    Merci pour le retour.
    Oui oui je comprends ce que vous voulez dire....
    Mais dans mon cas, la base ne contient pas des milliers de lignes ( on va dire seulement quelques dizaines de choix)
    De ce fait, si cela est possible d'insérer la première lettre dans la combo et en cliquant sur la flêche d'avoir les résultats je suis preneur...

    Merci.
    Cdlt

  6. #6
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2004
    Messages
    1 877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2004
    Messages : 1 877
    Points : 3 097
    Points
    3 097

    Par défaut

    Pour information, j'utilise l'index full-text pour ce genre de chose.
    Ci-dessous un exemple de code pour une recherche d'articles.

    Attention, le but de mettre à dispo mon code est de ne pas le copier/coller bêtement sans comprendre ce qui est fait


    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    // pCombo correspond à la valeur saisie dans la combo
    sSaisie est chaîne = pCombo
    // Si la saisie ne fait pas plus de 2 caractères, je ne fais pas de recherche
    SI sSaisie = "" _OU_ Taille(sSaisie) < 2 ALORS RETOUR
     
    Sablier(Vrai)
    // Requête SQL qui sera exécutée
    sSQL est chaîne = "SELECT COMposants.IDCOMposants AS ID, COMposants.COM_Code AS Code WHERE MATCH(COMposants.COM_Code) AGAINST %1"
     
    // Préparation du paraètre de la requête pour le MATCH
    sSaisieTraitement est chaîne
    POUR TOUTE CHAÎNE sMot DE sSaisie SEPAREE PAR " "
    	sSaisieTraitement += "+" + sMot + "*"
    FIN
    sSQL = ChaîneConstruit(sSQL, "('" + sSaisieTraitement + "')")
     
    ListeSupprimeTout(pCombo)
     
    maSourceSQL est une Source de Données
    SI HExécuteRequêteSQL(maSourceSQL, hRequêteDéfaut, sSQL) ALORS
    	iCpt est entier
    	POUR TOUT maSourceSQL
    		iCpt++
    		ListeAjoute(pCombo, gPoliceGras(Vrai) + maSourceSQL.Code + gPoliceGras(Faux) + " - " + ExtraitChaîne(maSourceSQL.Libellé, 1, RC))
     
    		// Affichage trop long au delà
    		SI iCpt = 5000 ALORS SORTIR
    	FIN
    FIN
    Sablier(Faux)
    ComboOuvre(pCombo)

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    mars 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : mars 2014
    Messages : 37
    Points : 28
    Points
    28

    Par défaut

    Merci Lo² pour ce code.
    En effet, cela ne me servira pas de le copier/coller tout "bêtement" sans comprendre ce qu'il fait ^^
    De ce fait, serait-il possible d'avoir quelques commentaires d'explications pour m'aider à la compréhension et adaptation de celui-ci ?

    Merci d'avance.

  8. #8
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2004
    Messages
    1 877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2004
    Messages : 1 877
    Points : 3 097
    Points
    3 097

    Par défaut

    J'ai modifié mon post en ajoutant des commentaires, mais bon il n'y a rien de très complexe non plus.
    Le plus complexe est la compréhension du MATCH dans la requête SQL, mais l'aide Windev a assez bien fichu.

    C'est une base de travail, donc commence à faire des petits trucs et si tu as des questions plus précises avec un début de code, reviens vers nous

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    mars 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : mars 2014
    Messages : 37
    Points : 28
    Points
    28

    Par défaut

    Merci beaucoup je vais me pencher sur le code, tenter de le comprendre et surtout l'adapter à mon cas avec les annotations
    Et je reviens vers vous dans tous les cas : si besoin d'aide ou bug ou pour le compléter si besoin.
    Bonne journée.
    Cdlt

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 21/05/2014, 08h52
  2. Pentaho en mode Cloud : recherche d'informations
    Par Thibault Crawley dans le forum Pentaho
    Réponses: 1
    Dernier message: 09/03/2010, 08h47
  3. Autocomplete mode dans datagridview combo
    Par olibara dans le forum Windows Forms
    Réponses: 0
    Dernier message: 21/08/2009, 18h58
  4. Mode de recherche
    Par Mapokko dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/04/2009, 19h32

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