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 croisement "contient" [AC-2003]


Sujet :

Requêtes et SQL.

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Requête de croisement "contient"
    Bonjour à tous!

    J'aurais besoin d'un coup de main sur une requête sollicitant 2 tables seulement :
    - la 1 contient est la source avec les donnes à exploiter
    - la 2 est la table avec des mots clés

    Je souhaite que la table générée par la requête me ramène tous les champs de la table 1 contenant un ou plusieurs mots clés de la table 2
    Mes mots clés sont trop nombreux pour que j'utilise les "critères", comment faire ?

    Merci d'avance !

    Ripou37

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonsoir,

    Je ne vois pas de solutions sans vba avec la création de la table résultante.

    En fait, créer la table résultante et y rajouter les résultats pour chaque valeur de la table critère (par contre, je ne garantirai pas de la vitesse) avec un findfirst et findnext.

    Bonne continuation.
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci de votre réponse seulement je ne vous cache pas que je suis largement débutant et ne maîtrise pas ce genre de manips ...

    Si vous pouviez me donner encore un petit coup de pouce, j'ai mis un exemple en pièce jointe avec :
    - t01_Source --) Source des données auxquelles je dois rapatrier les "catégories"
    - t02_Catégories --) "Catégories" que je dois rappatrier aux sources

    Le deuxième point bloquant, c'est que dans l'exemple, si j'ai une ligne contenue dans la table 01 qui contient un mot appartenent à 2 lignes de la t02 alors, ma table résultante doit présenter 2lignes (1 pour chacun des résultats de la t02)
    Je ne sais pas si c'est très clair mais quoi qu'il en soit, merci d'avance si vous pouvez m'apporter ce petit coup de pouce et n'hésitez pas à me solliciter si je n'ai pas été assez clair.

    Merci

    Ripou37
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonsoir,

    Ci-joint un code qui pourrait t'aider. A mettre sur un évènement d'un objet (un bouton sur un formulaire par exemple)
    En supposant que la table t_Result soit créée avant et vide. Il n'est pas difficile je pense de rajouter des requêtes avant l'exécution pour créer ou vider la table.

    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
    33
    34
    35
    36
    37
    38
    Dim rstTabSources As DAO.Recordset
    Dim rstTabCat As DAO.Recordset
    Dim rstTabResult As DAO.Recordset
    Dim ValRech As String
    'Ouvrir objets recordset DAO
    Set rstTabSources = CurrentDb.OpenRecordset("t01_Source", dbOpenDynaset) 'Table source
    Set rstTabCat = CurrentDb.OpenRecordset("t02_Catégories") 'Table Catégorie
    Set rstTabResult = CurrentDb.OpenRecordset("t_Result") 'Table résultante
    'Travailler dans l'objet DAO correspondant à la table catégorie
    With rstTabCat
        .MoveFirst 'Aller début table catégorie
        Do While Not .EOF 'Parcourir tant qu'on n'atteint pas la fin de la table catégorie
        ValRech = rstTabCat![DESIGNATION] 'Utiliser la valeur du champ DESIGNATION
        'Travailler avec la table source
        With rstTabSources
            'Trouver première occurence dans Table source contenant la valeur de DESIGNATION de Table Catégorie
            rstTabSources.FindFirst "[NOM] like '*" & ValRech & "*'"
            Do While Not rstTabSources.NoMatch 'Parcourir tant qu'il y a correspondance
            'Ajouter valeur(s) dans la table résultat
                With rstTabResult
                    rstTabResult.AddNew
                    rstTabResult![NOM] = ValRech
                    rstTabResult.Update
                End With
                .FindNext "[NOM] like'*" & ValRech & "*'" 'Continuer recherche correspondance
            Loop ' fin boucle
        End With ' Fin travail dans table source
        .MoveNext 'Aller enregsitrement suivant table catégorie
        Loop 'fin boucle
    End With 'fin travail dans table catégorie
    'Fermer et vider les objets recordset
    rstTabResult.Close
    Set rstTabResult = Nothing
    rstTabCat.Close
    Set rstTabCat = Nothing
    rstTabSources.Close
    Set rstTabSources = Nothing
    End Sub
    Essaies de lire des trucs sur les recordset et leur utilisation.

    Bonne continuation
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  5. #5
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci pour ton aide, je n'y mets pas de la mauvaise volonté ... mais je ne parviens pas à faire fonctionner le tout!
    En PJ, et sans abuser ... j'ai mis le fichier tenant compte de tes remarques, verrais-tu d'où vient le problème ?

    Merci encore

    Ripou37
    Fichiers attachés Fichiers attachés

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,

    Dans l'évènement sur clic du bouton que tu as mis sur le formulaire, tu mets le code que j'ai transmis.

    En fait, en ouvrant la feuille de propriétés du bouton, tu vas vers les ... à droite de la ligne Sur clic de la catégorie Evènement. Tu choisis Créer un Code dans la boite de dialogue suivante.
    Et tu colles le code entre

    Private sur .... Click()
    ...
    ...
    ...
    end sub

    C'est à dire que tu as rattaché cette action à l'évènement sur clickk du bouton créé.

    Bonne continuation.
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  7. #7
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    I.M.P.E.C.C.A.B.L.E --) c'est le résultat que je cherchais!

    Il me reste un dernier point (là j'abuse vraiment ?!), il faudrait que ça me ramène en face de chaque ligne le champ 'NOM' de la t01_Source, pourrais-tu m'en dire plus (j'ai actualisé le fichier en PJ)
    Fichiers attachés Fichiers attachés

  8. #8
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Désolé, il y eut une petite erreur dans cette partie du code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
         'Ajouter valeur(s) dans la table résultat
                With rstTabResult
                    rstTabResult.AddNew
                    rstTabResult![NOM] = rstTabSources![NOM] 'ici
                    rstTabResult.Update
                End With
    La valeur à ajouter vient effectivement de la table sources mais non de la table catégorie. Erreur que t'aurais pu trouver je pense.

    Bonne continuation.
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  9. #9
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    MERCI BEAUCOUP!
    J'ai ajouté quelques modifciations de mon propre chef (oui, oui! ) et ça fonctionne nickel.

    Seule surprise, j'ai l'impression que cette solution a ses limites pusique lorsque je mets trop de données dans catégories (1077 catégories pour scanner 175000 lignes de ma source), ça m'affiche un résultat incomplet
    (erreur 3077 Erreur de syntaxe (operateur absent) dans l'expression ...)

    Merci encore

    Ripou37

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Ce message d'erreur ne signifie pas que tu as trop de données, mais une qui n'est pas conforme.

    Il faut que tu repères à quel niveau cela arrive (en passant en mode débogage) quand l'erreur se reproduit, et en passant le curseur sur la ligne en jaune pour voir les valeurs.

    Cela peut-être une donnée avec une apostrophe ou autre par exemple regardes ce qu'il y a dans la variable ValRech

    Philippe

  11. #11
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Effectivement, cétait l'origine du soucis!

    MERCI 1000 fois, je vais me mettre à radoter (et je suis dans la bonne position du demandeur) mais ça fait plaisir de recevoir un coup de main, merci pour votre patience & temps consacré!

    Ripou37

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

Discussions similaires

  1. Requête avec champ NULL simple quote
    Par tidou95220 dans le forum Requêtes
    Réponses: 2
    Dernier message: 13/07/2012, 13h15

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