Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

erreur de compilation dans vba97

13 réponses
Avatar
Gundt
bonjour à tous,

J'ai une erreur du même genre que celle discutée justement dans ce forum
ces jours derniers : "Trop de paramètres : 2 attendus".
J'ai donc regardé le fil de ce post. J'ai vu que cela pouvait porter sur
une erreur de nom. J'ai donc changé tous les noms de champs pour qu'il
n'y en ait aucun de semblable.

Comme l'a conseillé Eric, j'ai essayé de faire debug.print sql mais j'ai
un message d'erreur dans la ligne de la chaîne sql (alors que cette
requête fonctionne très bien en mode requête quand je la lance
manuellement).
Quand je clique sur compiler, il m'affiche erreur de compilation et
s'arrête sur le 1er " de mm. Comme il y en a déjà un au début de la
chaîne, je suppose qu'il prend cela pour la fin de la chaîne sql.

La voici :
Dim db As Database
Dim r As Recordset, s As Recordset, f As Form
Dim suivnum1 As String, suivnum2 As String, suivnum As String, nouvnum
As String
Dim numero As Long
Dim codecli1 As Long
Dim mm As Byte
Dim yyyy As Long
Dim sql1 As String


Set db = DBEngine(0)(0)

' ----------------------------
sql1 = "SELECT DISTINCTROW [BL TEMP].CodeClient, CLIENTS.Codetab,
CLIENTS.[Code service], SERVICES.[Nom du service],
SERVICES.Factureindividuelle, CLIENTS.[Nom], CLIENTS.Monsieur,
CLIENTS.Prénom, CLIENTS.Adresse, CLIENTS.Ville, CLIENTS.[Code Postal],
Format([DateSortie_temp], "mm") AS MoisBL, Format([DateSortie_temp],
"yyyy") AS AnnéeBL FROM (SERVICES INNER JOIN CLIENTS ON
SERVICES.Codeservice = CLIENTS.[Code service]) INNER JOIN [BL TEMP] ON
CLIENTS.Codeclient = [BL TEMP].CodeClient GROUP BY [BL TEMP].CodeClient,
CLIENTS.Codetab, CLIENTS.[Code service], SERVICES.[Nom du service],
SERVICES.Factureindividuelle, CLIENTS.[Nom], CLIENTS.Monsieur,
CLIENTS.Prénom, CLIENTS.Adresse, CLIENTS.Ville, CLIENTS.[Code Postal],
Format([DateSortie_temp],"mm"), Format([DateSortie_temp],"yyyy") HAVING
(((Format([DateSortie_temp], "mm")) = [Forms]![Choix_fact_perso]![Mois])
And ((Format([DateSortie_temp], "yyyy")) =
[Forms]![Choix_fact_perso]![Année])) ORDER BY [BL TEMP].CodeClient ; "

Debug.Print sql1

' en attendant de trouver l'erreur
' Set r = db.OpenRecordset("BL1 chrono", DB_OPEN_DYNASET)

Set s = db.OpenRecordset("Factures", DB_OPEN_DYNASET)


Comment lui indiquer que c'est une expression et non la fin de la chaîne
sql ?

Merci d'avance.

Gundt

10 réponses

1 2
Avatar
Eric
Bonjour,

Remplaces tous les guillemets (") qui entourent mm ou yyyy par des
quotes ('), un pour un.

bonjour à tous,

J'ai une erreur du même genre que celle discutée justement dans ce forum
ces jours derniers : "Trop de paramètres : 2 attendus".
J'ai donc regardé le fil de ce post. J'ai vu que cela pouvait porter sur
une erreur de nom. J'ai donc changé tous les noms de champs pour qu'il
n'y en ait aucun de semblable.

Comme l'a conseillé Eric, j'ai essayé de faire debug.print sql mais j'ai
un message d'erreur dans la ligne de la chaîne sql (alors que cette
requête fonctionne très bien en mode requête quand je la lance
manuellement).
Quand je clique sur compiler, il m'affiche erreur de compilation et
s'arrête sur le 1er " de mm. Comme il y en a déjà un au début de la
chaîne, je suppose qu'il prend cela pour la fin de la chaîne sql.
...


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Gundt
re,

Bonjour,

Remplaces tous les guillemets (") qui entourent mm ou yyyy par des
quotes ('), un pour un.
Oui, ça marche : il n'y a plus l'erreur de compilation. !!

Merci Eric pour cette solution.

bon mais j'ai une erreur plus loin :

Set db = DBEngine(0)(0)
' ----------------------------
sql1 = "SELECT DISTINCTROW [BL TEMP].Co [...] TEMP].CodeClient ; "
' --------------------------------
Debug.Print sql1
'Set r = db.OpenRecordset("BL1 chrono", DB_OPEN_DYNASET)
Set r = db.OpenRecordset(sql1, DB_OPEN_DYNASET)

J'ai donc utilisé la chaîne sql à la place de l'instruction Set r =
db.OpenRecordset("BL1 chrono", DB_OPEN_DYNASET) mais cela me renvoie
toujours la même erreur :
"Trop peu de paramètres : 2 attendus."
Et il s'arrête en surligné jaune sur Set r = db.OpenRecordset(sql1,
DB_OPEN_DYNASET).

Je ne sais pas trop ce qu'il faut faire.

merci de votre coup de main.

Gundt

Avatar
Eric
re,

Essaies:
sql1 = "SELECT DISTINCTROW [BL TEMP].CodeClient, CLIENTS.Codetab,
CLIENTS.[Code service], SERVICES.[Nom du service],
SERVICES.Factureindividuelle, CLIENTS.[Nom], CLIENTS.Monsieur,
CLIENTS.Prénom, CLIENTS.Adresse, CLIENTS.Ville, CLIENTS.[Code Postal],
Format([DateSortie_temp], 'mm') AS MoisBL, Format([DateSortie_temp],
'yyyy') AS AnnéeBL FROM (SERVICES INNER JOIN CLIENTS ON
SERVICES.Codeservice = CLIENTS.[Code service]) INNER JOIN [BL TEMP] ON
CLIENTS.Codeclient = [BL TEMP].CodeClient GROUP BY [BL TEMP].CodeClient,
CLIENTS.Codetab, CLIENTS.[Code service], SERVICES.[Nom du service],
SERVICES.Factureindividuelle, CLIENTS.[Nom], CLIENTS.Monsieur,
CLIENTS.Prénom, CLIENTS.Adresse, CLIENTS.Ville, CLIENTS.[Code Postal],
Format([DateSortie_temp],'mm'), Format([DateSortie_temp],'yyyy') HAVING
Format([DateSortie_temp], 'mm') =" & [Forms]![Choix_fact_perso]![Mois]
& " And Format([DateSortie_temp], "yyyy") =" &
[Forms]![Choix_fact_perso]![Année]) & " ORDER BY [BL TEMP].CodeClient ;"

Derrière mets un debug.print sql1 pour voir ce que donne ce sql.
Je suppose que DateSortie_temp est un champ de la table [BL TEMP]
Normalement si pas d'erreurtu devrais avoir un truc comme
... Having Format([DateSortie_temp], 'mm') = 3
And Format([DateSortie_temp], "yyyy") = 2007 ....

re,

Bonjour,

Remplaces tous les guillemets (") qui entourent mm ou yyyy par des
quotes ('), un pour un.
Oui, ça marche : il n'y a plus l'erreur de compilation. !!

Merci Eric pour cette solution.

bon mais j'ai une erreur plus loin :

Set db = DBEngine(0)(0)
' ----------------------------
sql1 = "SELECT DISTINCTROW [BL TEMP].Co [...] TEMP].CodeClient ; "
' --------------------------------
Debug.Print sql1
'Set r = db.OpenRecordset("BL1 chrono", DB_OPEN_DYNASET)
Set r = db.OpenRecordset(sql1, DB_OPEN_DYNASET)

J'ai donc utilisé la chaîne sql à la place de l'instruction Set r =
db.OpenRecordset("BL1 chrono", DB_OPEN_DYNASET) mais cela me renvoie
toujours la même erreur :
"Trop peu de paramètres : 2 attendus."
Et il s'arrête en surligné jaune sur Set r = db.OpenRecordset(sql1,
DB_OPEN_DYNASET).

Je ne sais pas trop ce qu'il faut faire.

merci de votre coup de main.

Gundt


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr


Avatar
Gundt
Re,

Pour essayer de faire avancer le schmiblic, je viens d'essayer à la
place de l'autre requête cette requête et j'ai maintenant une erreur de
type 3139 (erreur de syntaxe dans la clause parameter) :

sql1 = "PARAMETERS [Forms]![Choix_fact_perso]![Mois] Byte,
[Forms]![Choix_fact_perso]![Année] Short SELECT DISTINCTROW [BL
TEMP].CodeClient, CLIENTS.Codetab, CLIENTS.[Code service], SERVICES.[Nom
du service], SERVICES.Factureindividuelle, CLIENTS.Nom,
CLIENTS.Monsieur, CLIENTS.Prénom, CLIENTS.Adresse, CLIENTS.Ville,
CLIENTS.[Code Postal], Format([DateSortie_temp],'mm') AS MoisBL,
Format([DateSortie_temp],'yyyy') AS AnnéeBL FROM (SERVICES INNER JOIN
CLIENTS ON SERVICES.Codeservice = CLIENTS.[Code service]) INNER JOIN [BL
TEMP] ON CLIENTS.Codeclient = [BL TEMP].CodeClient GROUP BY [BL
TEMP].CodeClient, CLIENTS.Codetab, CLIENTS.[Code service], SERVICES.[Nom
du service], SERVICES.Factureindividuelle, CLIENTS.Nom,
CLIENTS.Monsieur, CLIENTS.Prénom, CLIENTS.Adresse, CLIENTS.Ville,
CLIENTS.[Code Postal], Format([DateSortie_temp],'mm'),
Format([DateSortie_temp],'yyyy') " _
& "HAVING (((Format([DateSortie_temp], 'mm')) =
[Forms]![Choix_fact_perso]![Mois]) And ((Format([DateSortie_temp],
'yyyy')) = [Forms]![Choix_fact_perso]![Année])) ORDER BY [BL
TEMP].CodeClient ; "

' --------------------------------

Cette fois-ci, j'ai un message d'erreur :"Erreur de syntaxe 3139 (erreur
de syntaxe dans la clause parameter)".
Il s'arrête à :
Set r = db.OpenRecordset(sql1, DB_OPEN_DYNASET)

Je ne sais si c'est l'équivalent de l'autre requête sql mais je voulais
essayer.

Gundt
Avatar
Eric
.../...

J'ai oublié de corriger le dernier Format()
& " And Format([DateSortie_temp], "yyyy") =" &


doit être :
& " And Format([DateSortie_temp], 'yyyy') =" &


re,

Essaies:
sql1 = "SELECT DISTINCTROW [BL TEMP].CodeClient, CLIENTS.Codetab,
CLIENTS.[Code service], SERVICES.[Nom du service],
SERVICES.Factureindividuelle, CLIENTS.[Nom], CLIENTS.Monsieur,
CLIENTS.Prénom, CLIENTS.Adresse, CLIENTS.Ville, CLIENTS.[Code Postal],
Format([DateSortie_temp], 'mm') AS MoisBL, Format([DateSortie_temp],
'yyyy') AS AnnéeBL FROM (SERVICES INNER JOIN CLIENTS ON
SERVICES.Codeservice = CLIENTS.[Code service]) INNER JOIN [BL TEMP] ON
CLIENTS.Codeclient = [BL TEMP].CodeClient GROUP BY [BL TEMP].CodeClient,
CLIENTS.Codetab, CLIENTS.[Code service], SERVICES.[Nom du service],
SERVICES.Factureindividuelle, CLIENTS.[Nom], CLIENTS.Monsieur,
CLIENTS.Prénom, CLIENTS.Adresse, CLIENTS.Ville, CLIENTS.[Code Postal],
Format([DateSortie_temp],'mm'), Format([DateSortie_temp],'yyyy') HAVING
Format([DateSortie_temp], 'mm') =" & [Forms]![Choix_fact_perso]![Mois]
& " And Format([DateSortie_temp], "yyyy") =" &
[Forms]![Choix_fact_perso]![Année]) & " ORDER BY [BL TEMP].CodeClient ;"



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Eric
re,

Il te manque un ; avant le Select.
Dans le cas de la définition d'une requête paramétrée, il faut séparer
la clause Parameters du Select par un ;

Re,

Pour essayer de faire avancer le schmiblic, je viens d'essayer à la
place de l'autre requête cette requête et j'ai maintenant une erreur de
type 3139 (erreur de syntaxe dans la clause parameter) :

sql1 = "PARAMETERS [Forms]![Choix_fact_perso]![Mois] Byte,
[Forms]![Choix_fact_perso]![Année] Short SELECT DISTINCTROW [BL
...



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Gundt
.../...
J'ai mis ce que tu m'as dit si c'est bien cela :

sql1 = "SELECT DISTINCTROW [BL TEMP].CodeClient, CLIENTS.Codetab,
CLIENTS.[Code service], SERVICES.[Nom du service],
SERVICES.Factureindividuelle, CLIENTS.[Nom], CLIENTS.Monsieur,
CLIENTS.Prénom, CLIENTS.Adresse, CLIENTS.Ville, CLIENTS.[Code Postal],
Format([DateSortie_temp], 'mm') AS MoisBL, Format([DateSortie_temp],
'yyyy') AS AnnéeBL FROM (SERVICES INNER JOIN CLIENTS ON
SERVICES.Codeservice = CLIENTS.[Code service]) INNER JOIN [BL TEMP] ON
CLIENTS.Codeclient = [BL TEMP].CodeClient GROUP BY [BL TEMP].CodeClient,
CLIENTS.Codetab, CLIENTS.[Code service], SERVICES.[Nom du service],
SERVICES.Factureindividuelle, CLIENTS.[Nom], CLIENTS.Monsieur,
CLIENTS.Prénom, CLIENTS.Adresse, CLIENTS.Ville, CLIENTS.[Code Postal],
Format([DateSortie_temp],'mm'), Format([DateSortie_temp],'yyyy') HAVING
Format([DateSortie_temp], 'mm') =" & [Forms]![Choix_fact_perso]![Mois]
& " And Format([DateSortie_temp], 'yyyy') =" &
[Forms]![Choix_fact_perso]![Année]) & " ORDER BY [BL TEMP].CodeClient ;"

Il me dit "erreur de syntaxe : erreur de compilation."

Merci à Eric pour sa patience.

Gundt

Avatar
Gundt
re,

Il te manque un ; avant le Select.
Dans le cas de la définition d'une requête paramétrée, il faut séparer
la clause Parameters du Select par un ;
Ok; Je n'ai plus cette erreur mais il me revient toujours la même erreur

: Trop peu de paramètres. 2 attendus.

Gundt

Avatar
Gundt
.../...
J'ai oublié de dire :


l'erreur s'arrête sur le signe ) après Année en fin de ligne comme
ci-dessous :
& [Forms]![Choix_fact_perso]![Année])

Le Debug.Print sql1 est-il à placer avant ou après le sql1 = "SELECT
DISTINCTROW [BL TEMP].CodeClient, ... ?

merci.

Gundt


Avatar
Eric
re,

La parenthèse est en trop, vires-la.
Difficile de corriger le SQL d'access avec les préfixes sur les champs
quand cela n'est pas nécessaire, les parenthèses non justifiées ...

Le debug.print se met après la construction de la chaine sql, sinon tu
ne verrais rien puisque la variable ne serait pas définie.

Pour l'autre post, je te donnais la correction de la syntaxe liée à la
clause Parameters mais le problème tient au fait que tu ne sors pas de
la chaine tes variables, à savoir [Forms]![Choix_fact_perso]![Année] et
[Forms]![Choix_fact_perso]![Mois].
Comme j'avais répondu sur ce fil, je ne voulais pas répéter la même chose.

.../...
J'ai oublié de dire :


l'erreur s'arrête sur le signe ) après Année en fin de ligne comme
ci-dessous :
& [Forms]![Choix_fact_perso]![Année])

Le Debug.Print sql1 est-il à placer avant ou après le sql1 = "SELECT
DISTINCTROW [BL TEMP].CodeClient, ... ?

merci.

Gundt


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr



1 2