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 :

Créer une requête avec deux tables non liées [AC-2010]


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2019
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2019
    Messages : 125
    Points : 43
    Points
    43
    Par défaut Créer une requête avec deux tables non liées
    Bonjour,

    Dans une base de donnée, j'ai 2 tables; la principale et une table secondaire non liée, qui contient une série de mots clés (accédé via une liste déroulante dans un formulaire).
    Est-il possible de créer une requête (avec regroupement et compte) avec la table principale avec un critère basé sur la table avec les mots clés ?

    Par exemple, j'ai plusieurs enregistrement où le Champ1 contient la chaîne "maison", "maison" est également un des mots clés dans ma table secondaire.
    Dans ma requête, je veux compter le nombre d'enregistrements où le Champ1 contient "maison", et faire la même chose avec tous les mots clés.

    Je devrais donc obtenir une liste qui énumère le nombre d'enregistrements où le Champ1 contient le mot clé, et ce pour chaque mot clé.

    Nom : tableau.jpg
Affichages : 156
Taille : 16,6 Ko

    Merci de votre aide.

  2. #2
    Expert éminent

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

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

    Ben, tu lies tes 2 tables (lors de la requête) !

    Cordialement.
    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
    Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2019
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2019
    Messages : 125
    Points : 43
    Points
    43
    Par défaut
    Bonjour,

    J'ai oublié de mentionner que Champ1 est un champ mémo !
    Donc impossible de lier.

  4. #4
    Membre éprouvé Avatar de star
    Homme Profil pro
    .
    Inscrit en
    Février 2004
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée Du Nord

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Février 2004
    Messages : 902
    Points : 1 066
    Points
    1 066
    Par défaut
    Bonjour,
    Laisse tomber le type Memo en lieu et place utilise Varchar2
    Tu pourras alors faire toutes les interrogations possibles et imaginables
    Bon DEV
    .
    Diviser c'est régner : United we stand, Divided we fall
    .

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2019
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2019
    Messages : 125
    Points : 43
    Points
    43
    Par défaut
    Bonjour Star,

    Heu..., Varchar2 c'est avec le SQL d'Oracle, d'après ce que j'ai pu voir, mais je suppose que tu veux parler de Varchar qui est un type de champ SQL server.
    Dans mon cas il s'agit dune bdd Access, de plus, je ne suis qu'un humble gestionnaire système et mes connaissance de développeur se limite à des scripts Windows et occasionnellement un peu de VBA. Le langage SQL Access est limité aux types de champs d'Access.

    Merci tout de même pour ton conseil.

    Bonne journée,
    Gaston

  6. #6
    Expert éminent

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

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

    Il y a une solution pour ce problématique proposé ICI;

    Cordialement.
    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
    Membre éprouvé Avatar de star
    Homme Profil pro
    .
    Inscrit en
    Février 2004
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée Du Nord

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Février 2004
    Messages : 902
    Points : 1 066
    Points
    1 066
    Par défaut
    Bonjour,
    Le langage SQL Access est limité aux types de champs d'Access
    Dans ce cas, limite toi aux types proposés par Access
    Pas bien compliqué en soit
    .
    Diviser c'est régner : United we stand, Divided we fall
    .

  8. #8
    Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2019
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2019
    Messages : 125
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par madefemere Voir le message
    Bonjour,

    Il y a une solution pour ce problématique proposé ICI;
    Merci pour le lien madefemere,

    Ca aurait pu marcher, mais je ne cherche pas à compter les occurrences d'un mot dans un texte, je cherche à compter les occurrences des enregistrements où le champ, du type memo, contient le mot.

    Dans ce cas, limite toi aux types proposés par Access
    Pas bien compliqué en soit
    Judicieuse remarque star, mais le client n'est pas disposé à changer de base de données, je dois donc faire avec ce que j'ai...

  9. #9
    Expert éminent

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 846
    Points : 7 983
    Points
    7 983
    Par défaut
    Re-Bonjour,

    Cette fonction devrait faire l'affaire, à utiliser dans la requête basée sur les mots à chercher :

    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
    Public Function comptermot(argMot As String) As Integer
    Dim nbmot As Integer
    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    nbmot = 0
    Set db = CurrentDb
    Set rst = db.OpenRecordset("TPrincipale", dbOpenDynaset)
    With rst
        .FindFirst "[ChampLire] LIKE '*" & argMot & "*'"
        While Not .EOF
            If Not .NoMatch Then
                nbmot = nbmot + 1
                'Debug.Print nbmot
            End If
            .FindNext "[ChampLire] LIKE '*" & argMot & "*'"
            .MoveNext
        Wend
    End With
    comptermot = nbmot
    rst.Close
    Set rst = Nothing
    End Function
    Cordialement.
    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

  10. #10
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 817
    Points : 14 911
    Points
    14 911
    Par défaut
    bonjour,
    pour autant que je sache, le champ Mémo (maintenant appelé Texte long) a toujours été un type de champ reconnu dans SQL Access ... donc aucun problème tant qu'on ne tente pas une jointure interne (INNER JOIN), à la place, on utilisera plutôt WHERE qui est l'équi-jointure d'origine des premiers SQL.

    Ce que tu demandes peut être fait avec une requête SQL Access:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT tblSecond.motcle, DCount("*","tblprincip","champ1 like '*" & [tblSecond].[motcle] & "*'") AS occurrences FROM tblSecond;
    si, en plus, tu souhaites avoir le détail de chaque mot-clé, tu nommes la première requête req_CptNbreMots (par exemple), tu crées la requête ci-dessous en utilisant une non_équijointure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT req_CptNbreMots.motcle, req_CptNbreMots.occurrences, tblPrincip.champ1
    FROM req_CptNbreMots, tblPrincip
    WHERE (((tblPrincip.champ1) Like "*" & [motcle] & "*"))
    ORDER BY req_CptNbreMots.motcle;
    on pourrait évidemment faire une seule requête avec la première requête en tant que sous-requête ...
    ATTENTION quand même aux temps de réponses si la table principale contient un nombre très élevé d'enregistrements du fait de l'utilisation d'une clause WHERE sur un champ Texte Long non indexé par nature
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  11. #11
    Membre émérite Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 485
    Points : 2 266
    Points
    2 266
    Par défaut
    Bonsoir,
    je suis pas certain d'avoir compris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT TableA.*FROM TableA
    INNER JOIN TableB ON TableA.champMémo LIKE "*" & TableA.Champ1 & "*";

  12. #12
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 817
    Points : 14 911
    Points
    14 911
    Par défaut
    bonsoir Thumb down,
    Citation Envoyé par Thumb down Voir le message
    Bonsoir,
    je suis pas certain d'avoir compris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT TableA.*FROM TableA
    INNER JOIN TableB ON TableA.champMémo LIKE "*" & TableA.Champ1 & "*";
    impossible de faire une jointure sur un champ mémo
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  13. #13
    Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2019
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2019
    Messages : 125
    Points : 43
    Points
    43
    Par défaut
    Bonjour tee_grandbois,

    Ta première requête SQL fonctionne parfaitement, mais on constate déjà une nette augmentation du temps de réponse, pour une petite base de données de 1500 enregistrements!
    En principe c'est le résultat escompté.

    Citation Envoyé par tee_grandbois Voir le message

    Ce que tu demandes peut être fait avec une requête SQL Access:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT tblSecond.motcle, DCount("*","tblprincip","champ1 like '*" & [tblSecond].[motcle] & "*'") AS occurrences FROM tblSecond;
    Ta deuxième requête par-contre, me donne une erreur de syntaxe (opérateur absent) dans "SELECT req_CptNbreMots.motcle" (motcle surligné).

    Citation Envoyé par tee_grandbois Voir le message
    si, en plus, tu souhaites avoir le détail de chaque mot-clé, tu nommes la première requête req_CptNbreMots (par exemple), tu crées la requête ci-dessous en utilisant une non_équijointure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT req_CptNbreMots.motcle, req_CptNbreMots.occurrences, tblPrincip.champ1
    FROM req_CptNbreMots, tblPrincip
    WHERE (((tblPrincip.champ1) Like "*" & [motcle] & "*"))
    ORDER BY req_CptNbreMots.motcle;
    Bonjour madefemere,

    Comment puis-je visualiser la requête ainsi créée ?

    Cette fonction devrait faire l'affaire, à utiliser dans la requête basée sur les mots à chercher :

  14. #14
    Expert éminent

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 846
    Points : 7 983
    Points
    7 983
    Par défaut
    Citation Envoyé par Gaston62 Voir le message


    Bonjour madefemere,

    Comment puis-je visualiser la requête ainsi créée ?
    Bonjour,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT T_motcherche.motachercher, comptermot([motachercher]) AS nboccur
    FROM T_motcherche;
    Cordialement.
    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

  15. #15
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 817
    Points : 14 911
    Points
    14 911
    Par défaut
    bonjour,
    Citation Envoyé par Gaston62
    Ta première requête SQL fonctionne parfaitement, mais on constate déjà une nette augmentation du temps de réponse
    oui, d'ailleurs, je l'ai bien souligné dans mon post ...
    Il faut multiplier le nombre d'enregistrements de la première table par le nombre d'enregistrements de la seconde et comme un texte long peut contenir jusqu'à 1 Gigaoctet de caractères à scruter, cela donne une idée de la masse de données à traiter !
    Pour gagner du temps de réponse tu peux essayer de créer un index sur le champ mémo (contrairement à ce que je pensais, c'est possible) mais cela pourrait se révéler coûteux en terme d'espace disque. A essayer en tests ...
    Ou bien utiliser la solution de madefemere ...

    Citation Envoyé par Gaston62
    La deuxième requête par-contre, me donne une erreur de syntaxe (opérateur absent) dans "SELECT req_CptNbreMots.motcle" (motcle surligné).
    je n'ai pas d'explication à cette erreur ..
    sauf peut-être si tu as coché Syntaxe compatible SQL Server (ANSI 92) dans les paramètres de la base (ALIKE et % en ANSI-92 et LIKE et * en ANSI-89) ...
    dans la base test ci-jointe, cela fonctionne avec la norme ANSI-89, celle par défaut dans Access:
    CompterMots.zip
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  16. #16
    Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2019
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2019
    Messages : 125
    Points : 43
    Points
    43
    Par défaut
    Bonjour tee_grandbois et madefemere,

    Désolé de ne pas avoir réagi plus tôt, mais j'avais d'autres chats à fouetter.

    Citation Envoyé par tee_grandbois Voir le message
    je n'ai pas d'explication à cette erreur ..
    sauf peut-être si tu as coché Syntaxe compatible SQL Server (ANSI 92) dans les paramètres de la base (ALIKE et % en ANSI-92 et LIKE et * en ANSI-89) ...
    dans la base test ci-jointe, cela fonctionne avec la norme ANSI-89, celle par défaut dans Access:
    CompterMots.zip
    Je suis bien en ANSI-89 (par défaut), j'ai recréé la requête avec un copier/coller de la commande SQL, et là ça marche !?
    Malheureusement le temps de réponse devient trop long; 39 secondes contre 3 secondes pour la première requête.
    Mais pas de problème la première requête répond à mes besoins.

    Citation Envoyé par madefemere Voir le message

    Cette fonction devrait faire l'affaire, à utiliser dans la requête basée sur les mots à chercher :

    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
    Public Function comptermot(argMot As String) As Integer
    Dim nbmot As Integer
    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    nbmot = 0
    Set db = CurrentDb
    Set rst = db.OpenRecordset("TPrincipale", dbOpenDynaset)
    With rst
        .FindFirst "[ChampLire] LIKE '*" & argMot & "*'"
        While Not .EOF
            If Not .NoMatch Then
                nbmot = nbmot + 1
                'Debug.Print nbmot
            End If
            .FindNext "[ChampLire] LIKE '*" & argMot & "*'"
            .MoveNext
        Wend
    End With
    comptermot = nbmot
    rst.Close
    Set rst = Nothing
    End Function
    Lorsque j'applique ta fonction dans ma bdd, elle reste apparemment dans une boucle infinie (ou alors c'est très, très long).
    Si je l'applique dans la petite bdd que m'a envoyé tee_grandbois, j'obtiens un comptage erroné.

    req_CptNbreMots avec la méthode de tee_grandbois (comptage correcte) et req_CptNbreMots_2 avec ta méthode (comptage erroné) :

    Nom : req1.jpg
Affichages : 62
Taille : 22,8 KoNom : req2.jpg
Affichages : 61
Taille : 21,9 Ko

  17. #17
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 817
    Points : 14 911
    Points
    14 911
    Par défaut
    bonjour,
    j'avoue que je n'ai pas regardé dans le détail la fonction de madefemere (et j'avoue que je n'utilise que très rarement FindFirst/FindNext dans une boucle quand je peux utiliser une autre méthode), il y a probablement un dysfonctionnement quelque part car, mis à part pour 2 mots-clés les comptages son faux et on constate également que pour "pavillon", où on devrait trouver 0 occurrence, la fonction en trouve 11: comme le nombre total d'enregistrements de la table tblPrincip.

    En ce qui concerne le temps de réponse de la seconde requête, on ignore le nombre d'enregistrements de la table secondaire (celle contenant les mots-clés) mais je rappelle qu'au final le nombre d'enregistrements à traiter est le produit cartésien des 2 tables, donc 39 secondes ne me parait pas si long pour lire n fois 1500 enregistrements de tables non jointes et en scrutant autant de fois les caractères d'un champ de type mémo pour trouver une correspondance.

    Cela dit, si tu n'as pas besoin de 2ème requête et que la première te donne le bon résultat, tout va pour le mieux...
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  18. #18
    Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2019
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2019
    Messages : 125
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    bonjour,
    j'avoue que je n'ai pas regardé dans le détail la fonction de madefemere (et j'avoue que je n'utilise que très rarement FindFirst/FindNext dans une boucle quand je peux utiliser une autre méthode), il y a probablement un dysfonctionnement quelque part car, mis à part pour 2 mots-clés les comptages son faux et on constate également que pour "pavillon", où on devrait trouver 0 occurrence, la fonction en trouve 11: comme le nombre total d'enregistrements de la table tblPrincip.

    En ce qui concerne le temps de réponse de la seconde requête, on ignore le nombre d'enregistrements de la table secondaire (celle contenant les mots-clés) mais je rappelle qu'au final le nombre d'enregistrements à traiter est le produit cartésien des 2 tables, donc 39 secondes ne me parait pas si long pour lire n fois 1500 enregistrements de tables non jointes et en scrutant autant de fois les caractères d'un champ de type mémo pour trouver une correspondance.

    Cela dit, si tu n'as pas besoin de 2ème requête et que la première te donne le bon résultat, tout va pour le mieux...
    Bonjour et merci pour tes précieux conseils tee_grandbois,
    La table secondaire contient tout de même 1862 enregistrements, ce qui fait 1500 x 1862 = 2.793.000...
    Le plus sage est donc de se limiter à la première requête simple qui me convient parfaitement.

    Merci à tous pour votre aide, c'est toujours un plaisir d'utiliser le forum de developpez.net,
    Gaston

  19. #19
    Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2019
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2019
    Messages : 125
    Points : 43
    Points
    43
    Par défaut
    Bonjour,

    Je rouvre cette discussion, car je voudrais combiner la fonction Replace(variable, "'","''") avec la commande SQL que tee_grandbois m'a proposé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT tblSecond.motcle, DCount("*","tblprincip","champ1 like '*" & [tblSecond].[motcle] & "*'") AS occurrences FROM tblSecond;
    ...mais je ne vois pas trop comment procéder.

    Il me faudrait quelque chose du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT tblSecond.motcle, DCount("*", "tblprincip","champ1 like '*" & [tblSecond].[motcle] & Replace([tblSecond].[motcle], "'", "''") & "*'") AS NbClients FROM Clients;

  20. #20
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 817
    Points : 14 911
    Points
    14 911
    Par défaut
    bonjour,
    en effet, j'avais pensé à cette éventualité d'avoir une apostrophe dans un mot-clé ...
    2 solutions:
    1) si il n'y aura jamais de guillemets dans les mots-clés, remplacer les apostrophes entourant le mot par des double guillemets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT tblSecond.motcle, DCount("*", "tblprincip","champ1 like ""*" & [tblSecond].[motcle]  & "*""") AS NbClients FROM Clients;
    2) sinon doubler l'apostrophe par remplacement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT tblSecond.motcle, DCount("*", "tblprincip","champ1 like '*" & Replace([tblSecond].[motcle], "'", "''") & "*'") AS NbClients FROM Clients;
    mais telle quelle, la requête est fausse car Clients n'est pas la source de la requête, c'est TblSecond ...
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Requete sur deux tables non liés
    Par dark-liline dans le forum Langage SQL
    Réponses: 6
    Dernier message: 23/03/2010, 15h22
  2. [Toutes versions] calcul avec deux forms non liés ?
    Par nico62370 dans le forum IHM
    Réponses: 2
    Dernier message: 10/09/2009, 16h43
  3. affichage d'une valeur en relation avec deux tables
    Par mealtone dans le forum PHP & Base de données
    Réponses: 19
    Dernier message: 04/08/2006, 13h52
  4. Optimisation d'une base avec des tables liés
    Par snoopy69 dans le forum Access
    Réponses: 2
    Dernier message: 28/04/2006, 09h11
  5. Faire une procédure stockée avec deux tables
    Par mister3957 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/03/2006, 13h54

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