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

Requêtes et SQL. Discussion :

Requête pour une recherche sur champs multiple d'une table


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2008
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Requête pour une recherche sur champs multiple d'une table
    Bonjour,

    je cherche à faire une requête qui irait chercher les enregistrements d'une table à partir d'une recherche sur plusieurs champs d'une même table et ce dans une requête qui n'est pas dynamique(qui se monte en vérifiant s'il y a des valeurs dans les champs)

    Voici un exemple:
    La table Client contient un nom, un titre et un age.

    J'écris dans les champs de ma fenetre Christian pour le nom, Plombier pour le titre et 20 pour l'âge. Je veux que ma recherche sorte tous les Christian, tous les Plombier et tous les personnes ayant 20.

    Je me doute qu'il y aure l'utilisation du Like '%Christian%' et ainsi de suite mais je ne sais pas trop comment faire pour le reste de la requête... si vous pouviez m'aiguillez... ca serait grandement apprécié!!!

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 154
    Points : 148
    Points
    148
    Par défaut
    Bonsoir

    Une petite précision :
    TU veux chercher tous les "Christian" ou les "plombiers" ou tous ceux qui ont "20 ans" ?
    Ou bien tous les christians qui sont plombiers et qui ont 20ans ?
    (ce qui m'étonnerait..)

    A mon avis c'est plutôt le premier cas non ?
    C'est dans le requêteur Access , tu vas mettre ton critères , par exemple "Christian" pour le nom.. Pour "Plombier", il faut que tu l'indique sur une autre ligne du requêteur, un cran plus bas, et idem pour l'age..

    Comme sur l'image ci-jointe..

    Bon courage

    Didier71
    Images attachées Images attachées  

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2008
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Effectivement c'est une requête avec des Ou et non des Et... mais ce que je cherche précisément... ce sont des termes contenus dans les champs voulues.
    Les noms pourraient être louis, christian, jean-christian et dom. Les titres pourraient etre Facteur, Plombier, Plombier-soudeur et soudeur. L'age pourrait etre 20, 21, 24 et 120.... Ce que je voudrais c'est qu'il me sorte... les enregistrements contenant le nom Christian, contenant Plombier et ayant 20 ans...
    Donc de mon résultat... il me sortirait christian, jean-christian, plombier, plombier-soudeur et 20.

    Exemple:
    Code sQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Nom, Titre, Age
    FROM Client
    WHERE (((Nom) Like '%Christian%')) OR (((Titre) Like '%Plombier%')) OR (((Age) Like '%20'));

    Mais en plus... si le champ est laissé à blanc... prenons le Titre... je voudrais que cette section soit tjrs dans la requête... OR (((Titre) Like '%%'... est-ce que ca va fonctionner pareil! Me donner comme résultat les Christian qui ont 20 ans peu importe leur titre?

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 154
    Points : 148
    Points
    148
    Par défaut
    Bonsoir...

    Je crois que ce n'est pas le symbole % qu'il faut utiliser, mais l'étoile *

    Dans une requête, lorsque tu mets * tout seul, ça prend tout....

    Pour le cas ou tu ne saisit rien, il faut mettre dans le champ de ton formulaire, la valeur par défaut à *
    Ensuite, si le formulaire est basé sur ta requete, dans les critères tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Comme Forms[Nom Formulaire]![Champ)
    Ca ne résoud pas le problème du *Christian*.. La je sèche un peu..
    Je suis à peu près sur qu'il y a une autre fonction que Like...
    Genre IN, ou quelque chose, mais je n'en suis pas sur..

    J'espère que tu pourras avancer un peu..

    Bon courage

    Didier71

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2008
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Ok pour les * au lieu des % ca fonctionne! Merci!

    Ce qui accroche maintenant... c'est l'exemple d'un champ de recherche vide...
    La requête compte toujours le Like '*[valeur]*' comme valeur ne contient rien... il ne sort pas tout... comme si cette section de la requête n'existait pas!

    dans mon exemple... si je fais
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select * 
    from Client 
    where nom like '*Christian*' and titre like '**'
    ca ne donne pas le meme nb de résultat que si j'étais capable de monter dynamiquement ma requête et enlever la section and dans le cas ou il n'y a pas de titre de saisie. exemple Select * from Client where nom like '*Christian*' tout court.

    Meme chose lorsque tout les champs de recherche sont vides...

    La requête se lirait ainsi
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select * 
    from Client 
    where Nom like '**' and titre like '**' and age like '*'

    J'espere etre précis... pas évident à expliquer quand meme!

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 154
    Points : 148
    Points
    148
    Par défaut
    Bonsoir..

    Il ne faut pas doubler les *...

    Mais il y un bon tuto sur un formulaire de recherche...
    Tu devrais t'en inspirer...
    C'est ici
    http://cafeine.developpez.com/access...echerchemulti/

    Bon courage
    Didier71

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2008
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci Didier!
    Je fouille ca et j'essaie de creuser pour l'avoir!

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2008
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Finalement... une fois les champs de la bd tous remplis... tout fonctionne no.1
    Suffisait d'avoir des données partout...

    Reste que si jamais ce n'est pas le cas... pas évident de faire une requête de la sorte qui fonctionne!

    Merci encore!

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    503
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 503
    Points : 503
    Points
    503
    Par défaut
    Salut,

    pour ton cas, tu devrais passer par un IIF:
    si le champs est remplis, je prends la valeur du champs, sinon, je prends tous les cas (même les vides ou nuls)
    Ca devrait ressembler à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    WHERE nom Like Forms[Nom Formulaire]![Champ]
    OR IIF (nom = "*", nom is null))
    Ce qui permet de sélectionner aussi les valeurs nulles...

Discussions similaires

  1. faire une recherche sur la colonne d'une liste annuaire
    Par gracouille dans le forum SharePoint
    Réponses: 1
    Dernier message: 13/10/2008, 17h06
  2. Réponses: 1
    Dernier message: 03/10/2008, 21h34
  3. Syntaxe pour une recherche sur 2 listes déroutantes
    Par christ-94 dans le forum Access
    Réponses: 2
    Dernier message: 24/05/2006, 17h51
  4. je ne retrouve plus le lien pour lancer une recherche sur le forum
    Par harlock59 dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 2
    Dernier message: 19/04/2006, 12h44
  5. une requete effectuant une recherche sur tous les champs
    Par raynor911 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/02/2006, 15h06

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