Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/05/2011, 11h01   #1
Nouveau Membre du Club
 
Homme Marc Bellêtre
Étudiant
Inscription : mars 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Marc Bellêtre
Âge : 20
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2011
Messages : 59
Points : 26
Points : 26
Par défaut Problème avec clause LIKE

Bonjour,

Je travaille sous Access 2007 et j'ai besoin à un moment donné d'afficher un résultat contenant les enregistrements donc l'intitulé commence par "TC". J'ai donc effectué la requête suivante :

Code SQL :
SELECT [IDX ID] FROM FICHES_POSTE WHERE [INTITULE] LIKE 'TC*'
Cette requête ne retourne rien. J'ai également essayé en remplaçant '*' par '%' mais rien n'y fait. J'aimerais savoir si cette syntaxe est correcte et si c'est donc son intégration dans ma requête complète qui ne va pas ou si j'ai mal écrit cette ligne.
Pour info, j'avais avant de rajouter cette ligne une requête assez imposante avec jointures et union qui fonctionnait exactement comme il faut. Actuellement, ma requête complète avec la requête sur laquelle je demande votre aide affiche les mêmes résultats que si elle n'y était pas. Or, ce n'est pas possible.

Merci d'avance pour vos réponses.
Cordialement,

Prettyletter


Edit :

J'ai testé ma requête seule, en affichant les résultats dans une liste et elle ne fonctionne pas. J'ai testé les lignes suivantes :

Code :
Me.lstTest.RowSource = "SELECT [INTITULE] FROM FICHES_POSTE WHERE (([INTITULE] LIKE ""TC*""));"
Code :
Me.lstTest.RowSource = "SELECT [INTITULE] FROM FICHES_POSTE WHERE (([INTITULE] LIKE 'TC*'));"
Code :
Me.lstTest.RowSource = "SELECT [INTITULE] FROM FICHES_POSTE WHERE (([INTITULE] LIKE ""TC%""));"
Code :
Me.lstTest.RowSource = "SELECT [INTITULE] FROM FICHES_POSTE WHERE (([INTITULE] LIKE 'TC%'));"
Code :
Me.lstTest.RowSource = "SELECT [INTITULE] FROM FICHES_POSTE WHERE [INTITULE] LIKE 'TC*';"
Code :
Me.lstTest.RowSource = "SELECT [INTITULE] FROM FICHES_POSTE WHERE [INTITULE] LIKE 'TC%';"
Aucune de ces requêtes n'affichent de résultat. J'ai également créé la requête par le mode graphique, ce qui m'a donné la requête suivante :

Code :
SELECT FICHES_POSTE.INTITULE FROM FICHES_POSTE WHERE (((FICHES_POSTE.INTITULE) LIKE "TC*"));
Ce code affiche bien le résultat voulu grâce au mode graphique mais copié/collé dans l'éditeur VBA (en doublant les guillemets bien sûr), il ne retourne toujours rien. Je ne comprends vraiment pas..
Prettyletter est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 12h33   #2
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour Prettyletter,

Via l'assistant graphique, qu'obtiens-tu, en saisissant Comme "TC*" ?
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 12h36   #3
Nouveau Membre du Club
 
Homme Marc Bellêtre
Étudiant
Inscription : mars 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Marc Bellêtre
Âge : 20
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2011
Messages : 59
Points : 26
Points : 26
Bonjour Richard,

Désolé, j'avais oublié de l'indiquer et j'ai édité mon post avant que tu me répondes. J'ai obtenu le résultat que je souhaitais en utilisant le mode graphique. J'ai donc regardé la requête générée et je l'ai copiée dans l'éditeur VBA, seule. Je demande l'affichage de ces résultats de cette requête dans une liste, mais rien ne s'affiche. J'ai pourtant bien testé en affichant une MsgBox avant pour vérifier que le code était bien exécuté, j'ai mis une requête différente qui retournait bien des résultats.. Le problème vient donc bien de la requête. Est-ce que ça pourrait être dû à l'utilisation des guillemets?
Prettyletter est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 12h45   #4
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Je ne connais pas VBA, désolé.

Pour moi, en copiant/collant le code SQL généré par la requête qui fonctionne (sans "with..."), cela devrait rouler : via l'assistant de création de formulaire, sur un formulaire de test, essaies de copier/coller ce code en source de données.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 12h55   #5
Nouveau Membre du Club
 
Homme Marc Bellêtre
Étudiant
Inscription : mars 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Marc Bellêtre
Âge : 20
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2011
Messages : 59
Points : 26
Points : 26
J'ai trouvé mon erreur grâce à toi. J'ai créé un nouveau formulaire, une liste, puis je me suis rendu compte en la créant que lors de la manipulation, j'ai sélectionné un seul champ mais la case "utiliser la clé en champ caché" était restée cochée. Ma première colonne, qui contenait alors mon résultat, était cachée.
Ma requête fonctionne donc depuis le début. C'est l'intégration de ce bout de requête dans la requête principale qui est fausse. Je ne pense pas que l'on puisse m'aider pour ça car elle est certainement très difficile à comprendre quand on ne l'a pas écrite. Je tente quand même !

Code :
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
' Sélection des modules, des compétences et des infos concernant leur acquisition par l'opérateur
    strFiche = "SELECT CODE, [LIBELLE], MODULES.[IDX ID], OPERATEURS_MODULES.[FORMATEUR]," _
            & " OPERATEURS_MODULES.[DATE_ACQ], OPERATEURS_MODULES.[OBSERVATIONS], MODULES_FP.[COULEUR]" _
            & " FROM MODULES INNER JOIN (MODULES_FP LEFT JOIN OPERATEURS_MODULES" _
            & " ON (OPERATEURS_MODULES.[IDX ID_MOD] = MODULES_FP.[IDX ID_MOD]" _
            & " AND OPERATEURS_MODULES.[IDX ID_OP] = " & Me.cboOperateurs & "))" _
            & " ON (MODULES_FP.[IDX ID_MOD] = MODULES.[IDX ID]" _
            & " AND MODULES_FP.[IDX ID_FP] = " & Me.lstFichesPoste & ")" _
            & " WHERE [IDX ID] IN (SELECT DISTINCT [IDX ID_MOD]" _
            & " FROM MODULES_FP, OPERATEURS_FP WHERE OPERATEURS_FP.[IDX ID_OP] = " & Me.cboOperateurs _
            & " AND (MODULES_FP.[IDX ID_FP] = " & Me.lstFichesPoste _
            & " OR MODULES_FP.[IDX ID_FP] IN(SELECT [IDX ID] FROM FICHES_POSTE WHERE [INTITULE] LIKE 'TC*')))" _
            & " ORDER BY [IDX ID]" _
            & " UNION" _
            & " SELECT CODE, [LIBELLE], COMPETENCES.[IDX ID], OPERATEURS_COMPETENCES.[FORMATEUR]," _
            & " OPERATEURS_COMPETENCES.[DATE_ACQ], OPERATEURS_COMPETENCES.[OBSERVATIONS], COMPETENCES_FP.[COULEUR]" _
            & " FROM COMPETENCES INNER JOIN (COMPETENCES_FP LEFT JOIN OPERATEURS_COMPETENCES" _
            & " ON (OPERATEURS_COMPETENCES.[IDX ID_COMP] = COMPETENCES_FP.[IDX ID_COMP]" _
            & " AND OPERATEURS_COMPETENCES.[IDX ID_OP] = " & Me.cboOperateurs & "))" _
            & " ON (COMPETENCES_FP.[IDX ID_COMP] = COMPETENCES.[IDX ID]" _
            & " AND COMPETENCES_FP.[IDX ID_FP] = " & Me.lstFichesPoste & ")" _
            & " WHERE [IDX ID] IN (SELECT DISTINCT [IDX ID_COMP]" _
            & " FROM COMPETENCES_FP, OPERATEURS_FP WHERE OPERATEURS_FP.[IDX ID_OP] = " & Me.cboOperateurs _
            & " AND (COMPETENCES_FP.[IDX ID_FP] = " & Me.lstFichesPoste _
            & " OR COMPETENCES_FP.[IDX ID_FP] IN(SELECT [IDX ID] FROM FICHES_POSTE WHERE [INTITULE] LIKE 'TC*')))" _
            & " ORDER BY [IDX ID];"
L'idée, c'est de sélectionner des modules et des compétences (deux tables différentes contenant les mêmes intitulés de champs) et de les afficher dans un même tableau avec, pour les enregistrements ayant ces informations, les champs "Formateur", "Date" et "Observations". Tout cela fonctionne. C'est lorsque je demande en plus d'afficher les fiches dont le nom commence par "TC" que ça plante. En tout cas, les éléments des fiches commençant par "TC" ne s'affichent pas.
Prettyletter est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 13h03   #6
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Je te suggère de faire tourner ta requête (6 requêtes imbriquées), sans les variables, donc avec des valeurs "en dur".
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 13h54   #7
Nouveau Membre du Club
 
Homme Marc Bellêtre
Étudiant
Inscription : mars 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Marc Bellêtre
Âge : 20
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2011
Messages : 59
Points : 26
Points : 26
Cela ne changera rien puisque les variables ne posent pas de problème. La requête produit le résultat demandé, c'est juste l'ajout de la dernière ligne avant la clause ORDER BY qui pose problème, et elle ne contient aucune variable. A mon avis, c'est plutôt l'utilisation du OR qui ne convient pas. Le problème est que le AND ne convient pas non plus, donc je dois chercher une autre solution.
Prettyletter est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 14h11   #8
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Citation:
Envoyé par Prettyletter
.../... c'est juste l'ajout de la dernière ligne avant la clause ORDER BY qui pose problème
==> si tu supprimes cette ligne, la requête fonctionne ?

Vérifies, également, que ta variable strFiche est remplie correctement via un msgbox, par exemple.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 14h22   #9
Nouveau Membre du Club
 
Homme Marc Bellêtre
Étudiant
Inscription : mars 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Marc Bellêtre
Âge : 20
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2011
Messages : 59
Points : 26
Points : 26
Oui, si je supprime cette ligne, la requête fonctionne, mais elle n'affiche pas en plus les enregistrements des fiches de poste commençant par "TC".
J'ai trouvé une partie du problème cependant. Je n'avais pas spécifié dans ma deuxième jointure la sélection des fiches commençant par "TC", et j'ai mis des choses inutiles.
Cette requête est exécutée dans un bloc conditionnel, uniquement s'il s'agit de la fiche de poste du nom de "TC". Elle doit donc afficher les résultats de TC, TC 1, TC 2, etc. Donc lorsqu'on exécute cette, requête, pas besoin de demander les résultats de la fiche de poste courante + ceux des fiches commençant par TC, il suffit de demander celles commençant par TC tout simplement. Voici donc ma nouvelle requête :

Code :
1
2
3
4
5
6
7
8
9
10
11
strFiche = "SELECT CODE, [LIBELLE], MODULES.[IDX ID], OPERATEURS_MODULES.[FORMATEUR]," _
            & " OPERATEURS_MODULES.[DATE_ACQ], OPERATEURS_MODULES.[OBSERVATIONS], MODULES_FP.[COULEUR]" _
            & " FROM MODULES INNER JOIN (MODULES_FP LEFT JOIN OPERATEURS_MODULES" _
            & " ON (OPERATEURS_MODULES.[IDX ID_MOD] = MODULES_FP.[IDX ID_MOD]" _
            & " AND OPERATEURS_MODULES.[IDX ID_OP] = " & Me.cboOperateurs & "))" _
            & " ON (MODULES_FP.[IDX ID_MOD] = MODULES.[IDX ID]" _
            & " AND MODULES_FP.[IDX ID_FP] IN(SELECT [IDX ID] FROM FICHES_POSTE WHERE [INTITULE] LIKE 'TC*'))" _
            & " WHERE [IDX ID] IN (SELECT DISTINCT [IDX ID_MOD]" _
            & " FROM MODULES_FP, OPERATEURS_FP WHERE OPERATEURS_FP.[IDX ID_OP] = " & Me.cboOperateurs _
            & " AND (MODULES_FP.[IDX ID_FP] IN(SELECT [IDX ID] FROM FICHES_POSTE WHERE [INTITULE] LIKE 'TC*')))" _
            & " ORDER BY [IDX ID];"
J'ai retiré volontairement la suite avec le UNION puisqu'il s'agit de la même chose avec des noms différents.
Maintenant, j'ai une erreur sur l'expression JOIN et je pense que c'est à cause de l'utilisation de IN qui renvoie plusieurs résultats.


Edit : J'avais oublié une parenthèse. Access me met une erreur comme quoi il ne peut pas me trouver l'objet " ". Je continue mes recherches.
Prettyletter est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 10h09   #10
Nouveau Membre du Club
 
Homme Marc Bellêtre
Étudiant
Inscription : mars 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Marc Bellêtre
Âge : 20
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2011
Messages : 59
Points : 26
Points : 26
Bonjour,

De retour au boulot après un bon weekend, je ne trouve toujours pas comment modifier ma requête. Je me demande si cela vient du IN dans la jointure, mais je ne sais pas comment m'y prendre autrement.. Si quelqu'un sait résoudre ce problème, je suis à l'écoute !

Bonne journée !

Edit : L'erreur vient bien du IN, je l'ai remplacé par la condition que j'avais mise avant et je n'ai plus d'erreur. En revanche, bien sûr, ce ne sont pas les résultats souhaités. Comment puis-je procéder pour sélectionner plusieurs éléments dans une jointure si je ne peux pas utiliser IN ?
Prettyletter est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 12h09   #11
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour Prettyletter,

Je n'ai pas le temps de débugger ton code SQL.

Je te suggère, comme précédemment, de passer par l'assistant : nous serons sûrs, alors, que la syntaxe générée est la bonne.

Eventuellement, découper ta requête.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 12h13   #12
Nouveau Membre du Club
 
Homme Marc Bellêtre
Étudiant
Inscription : mars 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Marc Bellêtre
Âge : 20
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2011
Messages : 59
Points : 26
Points : 26
J'ai finalement trouvé la solution !
J'ai repris la requête presque intégralement et c'était plus simple que ce que j'imaginais. Voilà le résultat final, si jamais ça intéresse quelqu'un :

Code :
1
2
3
4
5
6
7
8
9
10
strFiche = "SELECT CODE, [LIBELLE], MODULES.[IDX ID], OPERATEURS_MODULES.[FORMATEUR]," _
            & " OPERATEURS_MODULES.[DATE_ACQ], OPERATEURS_MODULES.[OBSERVATIONS], MODULES_FP.[COULEUR]" _
            & " FROM MODULES INNER JOIN (MODULES_FP LEFT JOIN OPERATEURS_MODULES" _
            & " ON (OPERATEURS_MODULES.[IDX ID_MOD] = MODULES_FP.[IDX ID_MOD]" _
            & " AND OPERATEURS_MODULES.[IDX ID_OP] = " & Me.cboOperateurs & "))" _
            & " ON MODULES.[IDX ID] = MODULES_FP.[IDX ID_MOD]" _
            & " WHERE MODULES_FP.[IDX ID_FP] IN(SELECT [IDX ID] FROM FICHES_POSTE INNER JOIN OPERATEURS_FP" _
            & " ON (FICHES_POSTE.[IDX ID] = OPERATEURS_FP.[IDX ID_FP]" _
            & " AND OPERATEURS_FP.[IDX ID_OP] = " & Me.cboOperateurs & ") WHERE [INTITULE] LIKE 'TC*')" _
            & " ORDER BY [IDX ID];"
Merci et à bientôt !
Prettyletter est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h06.


 
 
 
 
Partenaires

Hébergement Web