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 de recherche sur l'ensemble de la table. [AC-2007]


Sujet :

Requêtes et SQL.

  1. #1
    Membre habitué Avatar de DurDur
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2005
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2005
    Messages : 243
    Points : 135
    Points
    135
    Par défaut Requête de recherche sur l'ensemble de la table.
    Bonjour,

    J'ai une table de X enregistrements.
    Chaque enregistrement est composé de 5 champs.
    Dans un enregistrement, plusieurs champs peuvent correspondre à ma recherche.

    Mes questions sont :

    Est il possible et comment faire une requête de recherche sur l'ensemble de la table ?

    Si oui, comment ne prendre en compte qu'une seule fois l'enregistrement même si plusieurs champs correspondent à ma recherche ?

    Et cerise sur le gâteau, comment visualiser les enregistrements trouvés ?

    J'ai réussi à le faire avec excel, mais pour des raisons de mise en place sur un autre ordi, je voudrais le faire sous ACCESS et en faire un RunTime.

    Merci de vos réponses.

    JC57
    Windows 10 - ACCESS 2007

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 600
    Points : 56 698
    Points
    56 698
    Billets dans le blog
    40
    Par défaut
    Bonjour,

    Citation Envoyé par DurDur Voir le message
    Chaque enregistrement est composé de 5 champs.
    Dans un enregistrement, plusieurs champs peuvent correspondre à ma recherche.
    C'est une curieuse utilisation de la clause IN, mais on peut commencer par écrire :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM LaTable
    WHERE [valeur recherchée] IN (champ1, champ2, champ3, champ4, champ5)

    À tester, c'est peut-être tout à fait contre-performant...

    Sinon, plus classiquement :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT Id, champ1 as champ FROM LaTable
    UNION ALL
    SELECT Id, champ2 FROM LaTable
    UNION ALL
    SELECT Id, champ3 FROM LaTable
    UNION ALL
    SELECT Id, champ4 FROM LaTable
    UNION ALL
    SELECT Id, champ5 FROM LaTable

    puis un :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT Id FROM LaRequeteAvecUNION
    WHERE champ=[valeur recherchée]

  3. #3
    Membre habitué Avatar de DurDur
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2005
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2005
    Messages : 243
    Points : 135
    Points
    135
    Par défaut
    Bonjour,

    Merci pour cette réponse rapide et mille excuses pour pour mes remerciements tardifs.

    J'ai essayé de mettre en oeuvre les deux solutions proposées :
    La première avec "in" ne fonctionne pas et pour la seconde, je n'ai pas réussi à la mettre en oeuvre, alors j'ai construit une requête retranscrit en vba ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SQL = "SELECT * from MaTable where "
        SQL = SQL & "Champs1 like " & Chr(34) & "*" & TxtRecherche & "*" & Chr(34) & ""
        SQL = SQL & "or Champs2 like " & Chr(34) & "*" & TxtRecherche & "*" & Chr(34) & ""
        SQL = SQL & "or Champs3 like " & Chr(34) & "*" & TxtRecherche & "*" & Chr(34) & ""
        SQL = SQL & "or Champs4 like " & Chr(34) & "*" & TxtRecherche & "*" & Chr(34) & ""
        SQL = SQL & " order by MaTable!Champs1;"
    et ça fonctionne.
    Dans ma demande d'aide, j'avais omis de spécifier que mes champs contiennent du texte et que l'objet de la recherche pouvais se trouver n'importe où dans le champs.

    Le résultat de la requête ne comportant pas d'enregistrement en double, mes demandes 1 et 2 sont résolues.

    Maintenant j'ai le résultat de ma recherche stocké dans une zone de liste, et en double-click sur un enregistrement je n'arrive pas à mettre mon formulaire à jour, que faut-il faire ?
    Je procéde de cette manière : je lance la recherche par un bouton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Recherche_Click()
        DoCmd.OpenForm "frm_MsgRech", , , , , acDialog
        TxtRecherche.Visible = True
        TxtRecherche.SetFocus
        strCritere = "NumFiche = " & MaSelection
        Recordset.FindFirst strCritere
    End Sub
    Ma recherche est lancée par la mise à jour du contrôle "TxtRecherche":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub TxtRecherche_AfterUpdate()
    ResultRecherche.Visible = True
    MaRecherche
    End Sub
    Ensuite double-click sur l'enregistrement souhaité contenu dans la zone de liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub ResultRecherche_DblClick(Cancel As Integer)
        MaSelection = Me.ResultRecherche
        SUIVANT.SetFocus
        TxtRecherche.Visible = False
        ResultRecherche.Visible = False
    End Sub
    Mais mon formulaire ne se met pas à jour avec l'enregistrement sélectionné.

    Avez vous une idée ?

    Je vous remercie paour vos suggestions.

    JCB57
    Windows 10 - ACCESS 2007

  4. #4
    Membre habitué Avatar de DurDur
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2005
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2005
    Messages : 243
    Points : 135
    Points
    135
    Par défaut
    Pour mettre à jour le formulaire, il suffit d'ajouter "Refresh" ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub ResultRecherche_DblClick(Cancel As Integer)
        MaSelection = Me.ResultRecherche
        SUIVANT.SetFocus
        TxtRecherche.Visible = False
        ResultRecherche.Visible = False
        strCritere = "NumFiche = " & MaSelection
        Recordset.FindFirst strCritere
        Me.Refresh
        End Sub

    Bonne soirée à tous.

    JCB57
    Windows 10 - ACCESS 2007

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

Discussions similaires

  1. Requête de recherche sur un Memo
    Par GDev80 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 09/06/2011, 14h43
  2. Recherche sur un ensemble de Data Set ?
    Par Jean_Peuplus dans le forum z/OS
    Réponses: 14
    Dernier message: 01/06/2010, 08h36
  3. Requête pour une recherche sur champs multiple d'une table
    Par fred777 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 07/10/2008, 16h33
  4. Réponses: 8
    Dernier message: 13/04/2008, 14h44

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