Requete

[Résolu]
Signaler
Messages postés
623
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
15 juin 2010
-
Messages postés
623
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
15 juin 2010
-
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

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
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)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
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)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
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)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
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)
Messages postés
623
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
15 juin 2010

Merci jack
Messages postés
623
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
15 juin 2010

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.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
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)
Messages postés
623
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
15 juin 2010

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