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

IHM Discussion :

recherche avec plusieurs mots-clé


Sujet :

IHM

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 250
    Points : 93
    Points
    93
    Par défaut recherche avec plusieurs mots-clé
    Bonjour à tous,

    Je suis en train de mettre en place un formulaire de recherche multicritères.
    Je me suis servi du tuto de Caféine ...
    Tout ne marche pas encore car j'ai plusieurs tables lièes au formulaire mais je continue à chercher ...
    Pour les zones qui marchent, je voudrais faire des recherches avec plusieurs mots clés :
    exemple : Rechercher dans le champ "tache" : balayage, lavage ...
    Comment puis-je faire ?
    Merci d'avance

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 345
    Points : 23 805
    Points
    23 805
    Par défaut
    La solution me parait de répéter le test sur les mots clefs, un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    where maZone like "*mot1*" and maZone like "*mot2*" and maZone like "*mot3*"
    si tous les mots sont impotants.

    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    where maZone like "*mot1*" or maZone like "*mot2*" or maZone like "*mot3*"
    si tu veux que cela sorte sur un des mots parmis ta liste.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 250
    Points : 93
    Points
    93
    Par défaut
    Bonjour,

    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
    Private Sub RefreshQuery()
    Dim SQL As String
    Dim SQLWhere As String
     
    SQL = "Select N°, type, type_detaille, tache, nom, prenom, departement FROM QRY_RECHERCHE where [N°] IS NOT NULL "
     
    If Not Me.chktache Then
        SQL = SQL & "And T_tache!tache like '*" & Me.tacherequete & "*' "
    End If
     
    If Not Me.chktype Then
        SQL = SQL & "And T_tache!codetype like '*" & Me.txtcodetype & "*' "
    End If
    If Not Me.chksecteurs Then
        SQL = SQL & "And T_secteur!secteuractivite like '" & Me.txtSecteur & "' "
    End If
    If Not Me.chkrechabonne Then
    SQL = SQL & "and t_abonne!type like '" & Me.cmbrechabonne & "' "
    End If
    If Not Me.chktypedetaillé Then
    SQL = SQL & "and t_abonne!type_detaille like '" & Me.cmbrechtypedetaillé & "' "
    End If
     
    SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
     
    SQL = SQL & ";"
     
    Me.lblStats.Caption = DCount("*", "QRY_RECHERCHE", SQLWhere) & " / " & DCount("*", "QRY_RECHERCHE")
    Me.Lstresults.RowSource = SQL
    Me.Lstresults.Requery
    Voilà mon code (adaptation du tuto de caféine ... mélangée avec discussion de bilouk de 01/07)
    Je ne sait pas où je mets le code que tu m'as donné ... c'est peut être pas là ...
    Merci d'avance
    Mamanhou

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 345
    Points : 23 805
    Points
    23 805
    Par défaut
    Tu dois avoir une zone ou tu saisi tes mots clef, c'est le contenu cette zone qu'il faut exploiter et ajouter à ta variable SQL.

    Si par exemple tu saisi tes mots dans la texteBox motsClef, séparé par des ; (ex : mot1;mot2;mot3)

    tu peux faire cela (access XP/2002 et +)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    dim motsClef as variant
    motsClef=split(me.motsClef,";")
    dim i as integer:for i=lbound(motsClef) to ubound(motsClef)
      SQL = SQL & "And T_tache!MonChamp like '*" & motsClef(i) & "*' "
    next i
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 250
    Points : 93
    Points
    93
    Par défaut
    bonjour,
    C'est tout à fait ce que dit Marot, je voudrais sssaisir plusieurs mots séparés par des ";" - mes zones de textes sont (voir code de mon message précédent):
    "tacherequete" ; "txtcodetype" ; "txtSecteur" et ...

    Comment insérer ton code dans celui de mon message précédent ? je n'y arrive pas ...
    Merci d 'avance
    Mamanhou

  6. #6
    Membre averti
    Directeur technique
    Inscrit en
    Novembre 2006
    Messages
    584
    Détails du profil
    Informations personnelles :
    Âge : 61

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 584
    Points : 403
    Points
    403
    Par défaut
    Bonjour à tous,

    Sans juger (je n'ai pas analysé) ni reprendre ce qui t'a déjà été répondu voici un code que j'utilise tous les jours (je n'ai pas pris le temps de l'adapter à ton contexte mais tu devrai le faire facilement):

    Dans la construction de la clause SQL de recherche tu mets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Not Me.chkMotscles Then
     SQL = SQL & GetWhereCondition(Me.txtRechMotscles)
    End If
    Dans le même module du formulaire tu mets la fonction
    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
    ' Fonction WHERE pour recherche dans le champ des mots clés
    Function GetWhereCondition(ByVal Criteria As String)
    Dim strSQL As String
    Dim straCriteria() As String
    Dim i As Integer
        'si on a un espace dans la chaine on splite
      If InStr(1, Criteria, " ") Then
        straCriteria = Split(Criteria, " ")
        '__ Ubound donne la dimension du tableau
        Select Case UBound(straCriteria())
        ' cas un seul mot
          Case Is < 1
             strSQL = "And Motscles like " & Chr(34) & Chr(42) & _
             straCriteria(0) & Chr(42) & Chr(34) & " "
        ' cas plus dun mot
          Case Else
            For i = 0 To UBound(straCriteria)
                strSQL = strSQL & IIf(i = 0, " AND", " OR") & _
                " Motscles like " & Chr(34) & Chr(42) & straCriteria(i) _
                 & Chr(42) & Chr(34) & IIf(i < UBound(straCriteria), "", " ")
            Next
     
        End Select
      Else
        'Cas où il n'y a aucun espace dans la chaine
        strSQL = "AND Motscles like " & Chr(34) & Chr(42) & _
             Criteria & Chr(42) & Chr(34) & " "
      End If
    GetWhereCondition = strSQL
    End Function
    Par principe je ne mets pas de ; pour éviter des pb avec SQL mon séparateur est donc l'espace(ce qui a tous les avantages).
    Ceci marche quelque soit le nombre et l'ordre des mots clés.
    "txtMotscles" est, chez moi, une zone spécifique où je mets des mots clés mais je pense qu'on peut l'appliquer un n'importe quel champ (d'où l'interet d'utiliser des espaces).

    Cordialement.
    Un seul conseil: la règle des 3S.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 250
    Points : 93
    Points
    93
    Par défaut
    Merci pour ce code ... il marche bien effectivement
    Je continue d'améliorer mon formulaire
    A bientôt
    Mamanhou

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

Discussions similaires

  1. faire une recherche avec plusieurs mot-clés
    Par jakouz dans le forum Débuter
    Réponses: 2
    Dernier message: 16/12/2010, 13h50
  2. [MySQL] recherche avec plusieurs mots dans mon moteur
    Par hadjiphp dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 25/05/2009, 08h53
  3. moteur de recherche avec plusieurs mots clés
    Par kadiato dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 17/02/2009, 15h44
  4. [MySQL] recherche avec plusieurs mots clé
    Par RAtiche dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 09/05/2008, 17h03
  5. Réponses: 6
    Dernier message: 04/11/2005, 17h09

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