Requète sql

Résolu
cs_lolodero Messages postés 21 Date d'inscription samedi 24 mai 2008 Statut Membre Dernière intervention 20 février 2009 - 4 févr. 2009 à 07:08
cs_lolodero Messages postés 21 Date d'inscription samedi 24 mai 2008 Statut Membre Dernière intervention 20 février 2009 - 6 févr. 2009 à 05:15
Salut à tous,
je suis en train de réalisé une requète en vba, requète ou le résultat sera affiché dans une liste box.
mais j'ai un problème lors de l'éxécution rien ne se passe.
je vous montre mon code:

Private Sub refresh_query()
Dim SQL As String
Dim SQLWhere As String


SQL = "Select CLIENT.NomClient,CLIENT.PrenomClient, COURS.NomCours, SOCIETE.NomSoc, FORMATEUR.NomFormateur, FORMATEUR.PrenomFormateur" & _
"From CLIENT,SOCIETE,PRENDRE,COURS,NIVEAU,VERSION,ENSEIGNER,FORMATEUR" & _
"Where SOCIETE.IDSoc=CLIENT.IDSoc" & _
"And CLIENT.IDClient=PRENDRE.IDClient" & _
"And PRENDRE.IDCours=COURS.IDCours" & _
"And COURS.IDNiveau=NIVEAU.IDNiveau" & _
"And COURS.IDVersion=VERSION.IDVersion" & _
"And COURS.IDCours=ENSEIGNER.IDCours" & _
"And ENSEIGNER.IDFormateur=FORMATEUR.IDFormateur" & _
"AND CLIENT!IDClient<>0"
SQL = SQL & "And CLIENT.IDClient= '" & Me.cbonom & "' "


SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
SQL = SQL & ";"


Me.lstrecherche.RowSource = SQL
Me.lstrecherche.Requery
End Sub

je c que c un peu long mais voila.
Quelqu'un aurait il une solution a proposer?svp

8 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
4 févr. 2009 à 08:46
Salut

Mets des espaces avant le from where and"

Normalement tu devrais faire ta requete avec des inner join performant que des where pour les liaisons entre les tables

Quelle est l'erreur ?
Si tu executes en direct dans access il y a - t- il une erreur.

Execute sans le where il y a - t -il encore l'erreur

passe avec le degogeur et les espions dessus le code.

Tu trouveras.
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
4 févr. 2009 à 09:35
Oui, pour les espaces :
..."Where SOCIETE.IDSoc=CLIENT.IDSoc " & _
                                    ^
   "And CLIENT.IDClient=PRENDRE.IDClient " & _  ...
                                        ^
sinon, la syntaxe de ta requète ressemblerait à "... IDSocAnd CLIENT...."

Avec les requètes SQL, pense à faire un arrêt avec le debug F9 et visualise le contenu de ta requète dans la fenêtre de debug (Ctrl-G) avec la simple commande
    ? SQL  
(? = raccourci pourPrint)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
cs_lolodero Messages postés 21 Date d'inscription samedi 24 mai 2008 Statut Membre Dernière intervention 20 février 2009
4 févr. 2009 à 10:27
Merci pour vos réponse super rapide,

alors g suivi vos conseil mais g toujours aucune érreur, je ne compren pas.
ma requète ne fonctionne pas, et g pas d'érreur. vous ne pensez pas que la syntaxe ne peut ne pas etre bonne? vous avez des proposition?
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
4 févr. 2009 à 12:36
Re
Es-tu sûr d'avoir bien ajouté les espaces partout où c'est nécessaire ?
Que donne une syntaxe simple comme :
   SQL = "Select CLIENT.NomClient" & _
         "  From CLIENT"
histoire d'être sûr que le problème vient de la requète.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
4 févr. 2009 à 12:52
Suggestion de présentation :
    SQL = "Select CLIENT.NomClient, " & _
          "       CLIENT.PrenomClient, " & _
          "       COURS.NomCours, " & _
          "       SOCIETE.NomSoc, " & _
          "       FORMATEUR.NomFormateur, " & _
          "       FORMATEUR.PrenomFormateur " & _
          "  From CLIENT, SOCIETE, PRENDRE, COURS, NIVEAU, " & _
          "       VERSION, ENSEIGNER, FORMATEUR " & _
          " Where SOCIETE.IDSoc         = CLIENT.IDSoc " & _
          "   And CLIENT.IDClient       = PRENDRE.IDClient " & _
          "   And PRENDRE.IDCours       = COURS.IDCours " & _
          "   And COURS.IDNiveau        = NIVEAU.IDNiveau " & _
          "   And COURS.IDVersion       = VERSION.IDVersion " & _
          "   And COURS.IDCours         = ENSEIGNER.IDCours " & _
          "   And ENSEIGNER.IDFormateur = FORMATEUR.IDFormateur " & _
          "   And CLIENT ! IDClient <> 0 " & _
          "   And CLIENT.IDClient = '" & Me.cbonom.Text & "'"
   Do While InStr(1, SQL, "  ")   ' Histoire de retirer les espaces inutiles
      SQL = Replace(SQL, "  ", " ")
   Loop

As-tu remarqué que tu utilisais un ! dans ta syntaxe (dernières lignes) ?
Rappel : Si IDClient est défini comme un champ numérique dans la DB, il ne faut pas d'encadrement (les ' ) de la valeur :
          "   And CLIENT.IDClient = " & Me.cbonom .Text

Vala
Jack, =fr MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
4 févr. 2009 à 12:56
Au fait, comment IDClient peut-il être testé <> 0 alors qu'on lui demanderait une comparaison de texte ensuite ?
Une des 2 dernières lignes est de trop.
Si tu dois tester que <> 0, il faut le faire sur cboNom avant de faire la requète.
Erreur de champ ?
Ne serait-ce plutôt CLIENT.NomClient que tu recherches ?
3
cs_lolodero Messages postés 21 Date d'inscription samedi 24 mai 2008 Statut Membre Dernière intervention 20 février 2009
5 févr. 2009 à 05:38
Wai tu as raison as propos des deux lignes de la fin, g supprimé la clause <>0.

En fait l'IDClient correspond a son numéro de carte d'identité, donc sa le rend vraiement unique contrairement au nom.

Merci pour tes proposition, je les ai appliqué et je débouche sur un msg d'érreur: Erreur de syntaxe dans la clause FROM, g bo chercher je ne voi vraiment pas ou est le problème.

merci davoir rep
3
cs_lolodero Messages postés 21 Date d'inscription samedi 24 mai 2008 Statut Membre Dernière intervention 20 février 2009
6 févr. 2009 à 05:15
Salut à tous,
Le problème est réglé!!!
Au fait l'érreur vennait du fait que la combo "cbonom" revoyait le nom du client alors que je croyait qu'elle renvoyait son Identifiant.
Donc g changé la requète qui génère la combo et sa marche!!!

voila, merci pour tes conseil Jack tu ma bien aider à voir plus claire dans mon programme.


merci encor,

loic
0
Rejoignez-nous