Requete

Résolu
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010 - 3 juin 2008 à 15:50
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010 - 4 juin 2008 à 09:14
Slt, j'ai une requete qui suit et j'ai un message d'erreur "erreur de syntaxe(virgule) dans l'expression '[ref reseau]=5". Je ne vois pas mon erreur.help pleaz.

 If dgsr1.Check50.Value = 1 Then
        Set Db = DBEngine.OpenDatabase(Bdd)
        Set Rs = Db.OpenRecordset("SELECT [Nom Financeur],[codeFinanceur]" & _
                   "FROM [Financeur]" & _
                   "WHERE ([Ref reseau]=" & glob_sres & ")" & _
                   "ORDER BY [codeFinanceur] ", dbOpenForwardOnly)
        i = 10
        Do Until Rs.EOF
            sNom(i) = Rs![Nom Financeur]
            sql_glob_rs = sql_glob_rs & ", Financeurs_OP.Fin" & i & " as [" & sNom(i) & "]"
            Rs.MoveNext
            i = i + 1
        Loop
        sql_glob_rs = sql_glob_rs & " From Financeurs_OP WHERE ((Financeurs_OP.[Code Sres]=" & glob_sres & "))"
        Me.Dat_financeurs.RecordSource = sql_glob_rs
        Me.Dat_financeurs.Refresh
        Me.Financeurs.MaxRows = Me.Dat_financeurs.Recordset.RecordCount
        dgsr1.coche = True

8 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
3 juin 2008 à 16:49
Décidemment, beaucoup de problèmes :
Dans ta boucle Do-Loop :
   sql_glob_rs = sql_glob_rs & ", Financeurs_OP.Fin" & i & " as [" & sNom(i) & "]"
Au premier passage, que vaut sql_glob_rs ?
Si c'est une chaine vide, elle commencera donc avec une virgule !

Juste avant cette ligne
   Me.Dat_financeurs.RecordSource = sql_glob_rs
ajoute aussi un 
   Debug.print sql_glob_rs
Tu verras ainsi :
- qu'il manque le SELECT de tête
- que la syntaxe commence par une virgule

Il faut donc que, après la boucle, tu vires la virgule qui est en tête (Voir Mid, Left, Right)

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_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
3 juin 2008 à 16:33
Salut
On te l'a déjà signalé :
Mets des espaces en fin de ligne de code avant de passer à la ligne avant le _
Sinon, ton code sera du genre :
"SELECT [Nom Financeur],[codeFinanceur]FROM [Financeur]WHERE ([Ref reseau]=5)ORDER BY [codeFinanceur]"
Normal dans ces conditions que le moteur SQL ait du mal à repérer les mots clés

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)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
3 juin 2008 à 16:34
PS : Est-ce que ton champ [ref reseau] est de type numérique dans ta DB ?
Si oui, Ok, la syntaxe est bonne
Si non (texte par exemple), encadre ta valeur avec des ' :  [Ref reseau]='5'

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)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
3 juin 2008 à 16:42
Encore moi
Pense aussi à vérifier ta syntaxe SQL avant de la soumettre : Tu verras te tes propres yeux les problèmes :
Avant de la soumettre, insère un :
   Debug.Print maRequète
où maRequète est la chaine qui contient la requète (à faire)
Par exemple, après ton Loop :
   Debug.Print sql_glob_rs
Et visualise la chaine dans la fenêtre de debug (Ctrl-G)

Tu verras ainsi que cette ligne peut ne pas fonctionner :
   ... Financeurs_OP.Fin" & i & " as ...
Si 'i' vaut 1, la syntaxe donnera :
   ... Financeurs_OP.Fin 1 as ...
avec un espace devant le 1
--> Utilise CStr pour convertir des nombres en chaine
   ... Financeurs_OP.Fin" & CStr(i) & " as ...

Même si VB sait concaténer des nombres à des chaines, il vaut mieux toujours lui macher le travail, ça évite ce genre de problème.

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)
0

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

Posez votre question
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010
3 juin 2008 à 17:25
Merci jack
0
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010
3 juin 2008 à 17:56
Pour te répondre: mon champ [ref reseau] est en numérique.
Je suppose que j'ai pas besoin de convertir i  et au début de mon code j'avais mis un "SELECT".
Après vérification et tenant compte de ce que tu m'as dis, j'ai la meme erreur.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
3 juin 2008 à 19:44
Re
Alors copie/colle ici la requète telle qu'elle apparait dans la fenêtre de debug avec les "Debug.Print" dont je t'ai parlé.
Si possible, colle ces textes avec la police "Courrier New" taille 2 afin qu'on ne se bousille pas les neuronnes à lire.

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)
0
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010
4 juin 2008 à 09:14
voila ce qu'il y a dans la fenetre debug:

select [Ref reseau],[Nom Financeur] as [Financeur(s)],[Part Financeur] as [Part en %] from financeur where [ref reseau] =5 ,Financeurs_OP.Fin10 as [CG 91] ,Financeurs_OP.Fin11 as [Communauté Agglo ou Commune] ,Financeurs_OP.Fin12 as [ETAT] ,Financeurs_OP.Fin13 as [RATP] ,Financeurs_OP.Fin14 as [Région IDF] ,Financeurs_OP.Fin15 as [RFF] ,Financeurs_OP.Fin16 as [SNCF] From Financeurs_OP WHERE ((Financeurs_OP.[Code Sres]=5))
0
Rejoignez-nous