Requète sql

[Résolu]
Signaler
Messages postés
21
Date d'inscription
samedi 24 mai 2008
Statut
Membre
Dernière intervention
20 février 2009
-
Messages postés
21
Date d'inscription
samedi 24 mai 2008
Statut
Membre
Dernière intervention
20 février 2009
-
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

Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
36
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.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
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)
Messages postés
21
Date d'inscription
samedi 24 mai 2008
Statut
Membre
Dernière intervention
20 février 2009

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?
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
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)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
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)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
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 ?
Messages postés
21
Date d'inscription
samedi 24 mai 2008
Statut
Membre
Dernière intervention
20 février 2009

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
Messages postés
21
Date d'inscription
samedi 24 mai 2008
Statut
Membre
Dernière intervention
20 février 2009

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