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

[Access97] Requête SQL et VBA, toujours...

11 réponses
Avatar
Jc
Bonjour(soir) Tous,

Merci de votre aide pour me corriger (encore une fois).

Une requête qui fonctionne :

UPDATE 90_Calendrier SET [90_Calendrier].[902FETE] = Null
WHERE (((Format([902DEPUI],"yyyy"))>"1950"));

J'essaie de la traduire en VBA :

DoCmd.RunSQL "UPDATE 90_Calendrier" & "SET [90_Calendrier].[902FETE] =
Null" _
& " WHERE (#" & Format([90_Calendrier].[902DEPUI], "yyyy" &
"# )>1950);")

- A l'exécution, si, dans la condition WHERE, je laisse le nom de champ
seul, càd [902DEPUI], j'ai une erreur "erreur de compilation" "Nom
externe non défini".
- Si je l'accompagne du nom de la table, càd [90_Calendrier].[902DEPUI],
j'ai la même erreur, mais sur le nom de table...

Pourtant, à la compilation, je n'ai pas d'erreur...

Une suggestion ?

Merci et
--
Bonne fin de journée.
----------------------------------------
Jclg88
Cliquer sur ce lien pour me joindre par mél :
http://cerbermail.com/?JVKAlLV1Rf
----------------------------------------

10 réponses

1 2
Avatar
Buddy
Salut
essaies ça

Dim strSQL As String
strSQL = "UPDATE 90_Calendrier SET 902FETE =Null WHERE " & Year(902DEPUI) &
">1950;"
DoCmd.RunSQL strSQL

Ouala
Bye
Buddy


"Jc" a écrit dans le message de
news:%
Bonjour(soir) Tous,

Merci de votre aide pour me corriger (encore une fois).

Une requête qui fonctionne :

UPDATE 90_Calendrier SET [90_Calendrier].[902FETE] = Null
WHERE (((Format([902DEPUI],"yyyy"))>"1950"));

J'essaie de la traduire en VBA :

DoCmd.RunSQL "UPDATE 90_Calendrier" & "SET [90_Calendrier].[902FETE] > Null" _
& " WHERE (#" & Format([90_Calendrier].[902DEPUI], "yyyy" &
"# )>1950);")

- A l'exécution, si, dans la condition WHERE, je laisse le nom de champ
seul, càd [902DEPUI], j'ai une erreur "erreur de compilation" "Nom
externe non défini".
- Si je l'accompagne du nom de la table, càd [90_Calendrier].[902DEPUI],
j'ai la même erreur, mais sur le nom de table...

Pourtant, à la compilation, je n'ai pas d'erreur...

Une suggestion ?

Merci et
--
Bonne fin de journée.
----------------------------------------
Jclg88
Cliquer sur ce lien pour me joindre par mél :
http://cerbermail.com/?JVKAlLV1Rf
----------------------------------------



Avatar
Jc
Bonjour(soir) Buddy,

"Buddy" a écrit dans le message news:

Salut
essaies ça

Dim strSQL As String
strSQL = "UPDATE 90_Calendrier SET 902FETE =Null WHERE " &
Year(902DEPUI) &

">1950;"
DoCmd.RunSQL strSQL


Un grand merci pour votre aide.

- Essai avec votre proposition :
"erreur de syntaxe" sur (902DEPUI),

- Essai en modifiant (902DEPUI) en ([902DEPUI])
"erreur de compilation" "nom externe non défini" sur ce même champ.

- Essai en modifiant ([902DEPUI]) en ([90_Calendrier].[902DEPUI]),
c'est [90_Calendrier] qui est indiqué en "erreur de compilation" "nom
externe non défini".

Une autre suggestion ?

Encore merci et
--
Bonne fin de journée.
----------------------------------------
Jclg88
Cliquer sur ce lien pour me joindre par mél :
http://cerbermail.com/?JVKAlLV1Rf
----------------------------------------

"Jc" a écrit dans le message de
news:%
Bonjour(soir) Tous,

Merci de votre aide pour me corriger (encore une fois).

Une requête qui fonctionne :

UPDATE 90_Calendrier SET [90_Calendrier].[902FETE] = Null
WHERE (((Format([902DEPUI],"yyyy"))>"1950"));

J'essaie de la traduire en VBA :

DoCmd.RunSQL "UPDATE 90_Calendrier" & "SET [90_Calendrier].[902FETE]
Null" _
& " WHERE (#" & Format([90_Calendrier].[902DEPUI], "yyyy" &
"# )>1950);")

- A l'exécution, si, dans la condition WHERE, je laisse le nom de
champ


seul, càd [902DEPUI], j'ai une erreur "erreur de compilation" "Nom
externe non défini".
- Si je l'accompagne du nom de la table, càd
[90_Calendrier].[902DEPUI],


j'ai la même erreur, mais sur le nom de table...

Pourtant, à la compilation, je n'ai pas d'erreur...

Une suggestion ?

Merci et
--
Bonne fin de journée.
----------------------------------------
Jclg88
Cliquer sur ce lien pour me joindre par mél :
http://cerbermail.com/?JVKAlLV1Rf
----------------------------------------







Avatar
Buddy
Resalut
Nom externe non défini : vérifie bien l'orthographe de tous les champs et
des tables.
Jettes aussi un coup d'oeil aux références manquantes.
(ALT+F11/Outils/Références) décoches ce qui est manquant.
La syntaxe que je t'ai proposé doit fonctionner sans problème.

Access97 se fait vieux et j'ai pas trop en mémoire les différences par
rapport aux versions actuelles.
Je passe la main.

Ouala
Bye
Buddy


"Jc" a écrit dans le message de
news:
Bonjour(soir) Buddy,

"Buddy" a écrit dans le message news:

Salut
essaies ça

Dim strSQL As String
strSQL = "UPDATE 90_Calendrier SET 902FETE =Null WHERE " &
Year(902DEPUI) &

">1950;"
DoCmd.RunSQL strSQL


Un grand merci pour votre aide.

- Essai avec votre proposition :
"erreur de syntaxe" sur (902DEPUI),

- Essai en modifiant (902DEPUI) en ([902DEPUI])
"erreur de compilation" "nom externe non défini" sur ce même champ.

- Essai en modifiant ([902DEPUI]) en ([90_Calendrier].[902DEPUI]),
c'est [90_Calendrier] qui est indiqué en "erreur de compilation" "nom
externe non défini".

Une autre suggestion ?

Encore merci et
--
Bonne fin de journée.
----------------------------------------
Jclg88
Cliquer sur ce lien pour me joindre par mél :
http://cerbermail.com/?JVKAlLV1Rf
----------------------------------------

"Jc" a écrit dans le message de
news:%
Bonjour(soir) Tous,

Merci de votre aide pour me corriger (encore une fois).

Une requête qui fonctionne :

UPDATE 90_Calendrier SET [90_Calendrier].[902FETE] = Null
WHERE (((Format([902DEPUI],"yyyy"))>"1950"));

J'essaie de la traduire en VBA :

DoCmd.RunSQL "UPDATE 90_Calendrier" & "SET [90_Calendrier].[902FETE]
Null" _
& " WHERE (#" & Format([90_Calendrier].[902DEPUI], "yyyy" &

"# )>1950);")

- A l'exécution, si, dans la condition WHERE, je laisse le nom de
champ


seul, càd [902DEPUI], j'ai une erreur "erreur de compilation" "Nom
externe non défini".
- Si je l'accompagne du nom de la table, càd
[90_Calendrier].[902DEPUI],


j'ai la même erreur, mais sur le nom de table...

Pourtant, à la compilation, je n'ai pas d'erreur...

Une suggestion ?

Merci et
--
Bonne fin de journée.
----------------------------------------
Jclg88
Cliquer sur ce lien pour me joindre par mél :
http://cerbermail.com/?JVKAlLV1Rf
----------------------------------------











Avatar
Jc
Re-Bonjour(soir) Buddy,

"Buddy" a écrit dans le message news:

Resalut
Nom externe non défini : vérifie bien l'orthographe de tous les champs
et

des tables.
Jettes aussi un coup d'oeil aux références manquantes.
(ALT+F11/Outils/Références) décoches ce qui est manquant.
La syntaxe que je t'ai proposé doit fonctionner sans problème.


Merci de votre aide. Malheureusement, il n'y a pas de référence
manquante... et l'orthographe est la bonne.

Access97 se fait vieux et j'ai pas trop en mémoire les différences par
rapport aux versions actuelles.
Je passe la main.


Encore merci et si une autre bonne âme avait une autre suggestion... (je
rappelle que la requête SQL, appelée par une macro, fonctionne
parfaitement).
--
Bonne fin de journée.
----------------------------------------
Jclg88
Cliquer sur ce lien pour me joindre par mél :
http://cerbermail.com/?JVKAlLV1Rf
----------------------------------------

"Jc" a écrit dans le message de
news:
Bonjour(soir) Buddy,

"Buddy" a écrit dans le message news:

Salut
essaies ça

Dim strSQL As String
strSQL = "UPDATE 90_Calendrier SET 902FETE =Null WHERE " &
Year(902DEPUI) &

">1950;"
DoCmd.RunSQL strSQL


Un grand merci pour votre aide.

- Essai avec votre proposition :
"erreur de syntaxe" sur (902DEPUI),

- Essai en modifiant (902DEPUI) en ([902DEPUI])
"erreur de compilation" "nom externe non défini" sur ce même champ.

- Essai en modifiant ([902DEPUI]) en ([90_Calendrier].[902DEPUI]),
c'est [90_Calendrier] qui est indiqué en "erreur de compilation"
"nom


externe non défini".

Une autre suggestion ?

Encore merci et
--
Bonne fin de journée.
----------------------------------------
Jclg88
Cliquer sur ce lien pour me joindre par mél :
http://cerbermail.com/?JVKAlLV1Rf
----------------------------------------

"Jc" a écrit dans le message
de



news:%
Bonjour(soir) Tous,

Merci de votre aide pour me corriger (encore une fois).

Une requête qui fonctionne :

UPDATE 90_Calendrier SET [90_Calendrier].[902FETE] = Null
WHERE (((Format([902DEPUI],"yyyy"))>"1950"));

J'essaie de la traduire en VBA :

DoCmd.RunSQL "UPDATE 90_Calendrier" & "SET
[90_Calendrier].[902FETE]




Null" _
& " WHERE (#" & Format([90_Calendrier].[902DEPUI], "yyyy" &


"# )>1950);")

- A l'exécution, si, dans la condition WHERE, je laisse le nom
de




champ
seul, càd [902DEPUI], j'ai une erreur "erreur de compilation"
"Nom




externe non défini".
- Si je l'accompagne du nom de la table, càd
[90_Calendrier].[902DEPUI],


j'ai la même erreur, mais sur le nom de table...

Pourtant, à la compilation, je n'ai pas d'erreur...

Une suggestion ?

Merci et
--
Bonne fin de journée.
----------------------------------------
Jclg88
Cliquer sur ce lien pour me joindre par mél :
http://cerbermail.com/?JVKAlLV1Rf
----------------------------------------
















Avatar
Jc
Re-Bonjour(soir) Buddy et tous les Autres,

Cà y est, çà marche, grâce à votre suggestion de remplacer Format() par
Year()

DoCmd.RunSQL "UPDATE 90_Calendrier" & " SET [90_Calendrier].[902FETE] Null" & " WHERE (((Year([902DEPUI]))>1952));"

Encore merci et
--
Bonne fin de journée.
----------------------------------------
Jclg88
Cliquer sur ce lien pour me joindre par mél :
http://cerbermail.com/?JVKAlLV1Rf
----------------------------------------

"Jc" a écrit dans le message news:

Re-Bonjour(soir) Buddy,

"Buddy" a écrit dans le message news:

Resalut
Nom externe non défini : vérifie bien l'orthographe de tous les
champs


et
des tables.
Jettes aussi un coup d'oeil aux références manquantes.
(ALT+F11/Outils/Références) décoches ce qui est manquant.
La syntaxe que je t'ai proposé doit fonctionner sans problème.


Merci de votre aide. Malheureusement, il n'y a pas de référence
manquante... et l'orthographe est la bonne.

Access97 se fait vieux et j'ai pas trop en mémoire les différences
par


rapport aux versions actuelles.
Je passe la main.


Encore merci et si une autre bonne âme avait une autre suggestion...
(je

rappelle que la requête SQL, appelée par une macro, fonctionne
parfaitement).
--
Bonne fin de journée.
----------------------------------------
Jclg88
Cliquer sur ce lien pour me joindre par mél :
http://cerbermail.com/?JVKAlLV1Rf
----------------------------------------

"Jc" a écrit dans le message de
news:
Bonjour(soir) Buddy,

"Buddy" a écrit dans le message news:

Salut
essaies ça

Dim strSQL As String
strSQL = "UPDATE 90_Calendrier SET 902FETE =Null WHERE " &
Year(902DEPUI) &

">1950;"
DoCmd.RunSQL strSQL


Un grand merci pour votre aide.

- Essai avec votre proposition :
"erreur de syntaxe" sur (902DEPUI),

- Essai en modifiant (902DEPUI) en ([902DEPUI])
"erreur de compilation" "nom externe non défini" sur ce même
champ.




- Essai en modifiant ([902DEPUI]) en ([90_Calendrier].[902DEPUI]),
c'est [90_Calendrier] qui est indiqué en "erreur de compilation"
"nom


externe non défini".

Une autre suggestion ?

Encore merci et
--
Bonne fin de journée.
----------------------------------------
Jclg88
Cliquer sur ce lien pour me joindre par mél :
http://cerbermail.com/?JVKAlLV1Rf
----------------------------------------

"Jc" a écrit dans le
message




de
news:%
Bonjour(soir) Tous,

Merci de votre aide pour me corriger (encore une fois).

Une requête qui fonctionne :

UPDATE 90_Calendrier SET [90_Calendrier].[902FETE] = Null
WHERE (((Format([902DEPUI],"yyyy"))>"1950"));

J'essaie de la traduire en VBA :

DoCmd.RunSQL "UPDATE 90_Calendrier" & "SET
[90_Calendrier].[902FETE]




Null" _
& " WHERE (#" & Format([90_Calendrier].[902DEPUI], "yyyy" &



"# )>1950);")

- A l'exécution, si, dans la condition WHERE, je laisse le nom
de




champ
seul, càd [902DEPUI], j'ai une erreur "erreur de compilation"
"Nom




externe non défini".
- Si je l'accompagne du nom de la table, càd
[90_Calendrier].[902DEPUI],


j'ai la même erreur, mais sur le nom de table...

Pourtant, à la compilation, je n'ai pas d'erreur...

Une suggestion ?

Merci et
--
Bonne fin de journée.
----------------------------------------
Jclg88
Cliquer sur ce lien pour me joindre par mél :
http://cerbermail.com/?JVKAlLV1Rf
----------------------------------------




















Avatar
Raymond [mvp]
Bonjour.

il y a quand même une erreur dans ta requête d'origine:
DoCmd.RunSQL "UPDATE 90_Calendrier" & "SET [90_Calendrier].[902FETE] Null" _
& " WHERE (#" & Format([90_Calendrier].[902DEPUI], "yyyy" &
"# )>1950);")

mettre un espace avant le set
modifier le where pour le laisser dans l'instruction sql
& " WHERE Format([90_Calendrier].[902DEPUI], ""yyyy"" ) > ""1950"";"
en ajustant les guillemets.
ce qui donne:

DoCmd.RunSQL "UPDATE 90_Calendrier" & " SET [90_Calendrier].[902FETE] Null" & " WHERE Format([90_Calendrier].[902DEPUI], ""yyyy"" ) > ""1950"";"

Format ramène une valeur texte non numérique et faut la comparer avec un
champ texte en plaçant des guillemets.
dans la mesure du possible, essaie de ne pas appeler les tables et les
champs avec des noms commençant par du numérique ce qui est totalement
contraire à la norme vb.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Jc" a écrit dans le message de
news:
Re-Bonjour(soir) Buddy,
Merci de votre aide. Malheureusement, il n'y a pas de référence
manquante... et l'orthographe est la bonne.

Access97 se fait vieux et j'ai pas trop en mémoire les différences par
rapport aux versions actuelles.
Je passe la main.


Encore merci et si une autre bonne âme avait une autre suggestion... (je
rappelle que la requête SQL, appelée par une macro, fonctionne
parfaitement).



Avatar
Jc
Bonjour(soir) Raymond,


"Raymond [mvp]" a écrit dans le message
news: Oy$
Bonjour.

il y a quand même une erreur dans ta requête d'origine:
DoCmd.RunSQL "UPDATE 90_Calendrier" & "SET [90_Calendrier].[902FETE] > Null" _
& " WHERE (#" & Format([90_Calendrier].[902DEPUI], "yyyy" &
"# )>1950);")

mettre un espace avant le set
modifier le where pour le laisser dans l'instruction sql
& " WHERE Format([90_Calendrier].[902DEPUI], ""yyyy"" ) > ""1950"";"
en ajustant les guillemets.
ce qui donne:

DoCmd.RunSQL "UPDATE 90_Calendrier" & " SET [90_Calendrier].[902FETE]
Null" & " WHERE Format([90_Calendrier].[902DEPUI], ""yyyy"" ) >
""1950"";"


Format ramène une valeur texte non numérique et faut la comparer avec
un

champ texte en plaçant des guillemets.
dans la mesure du possible, essaie de ne pas appeler les tables et les
champs avec des noms commençant par du numérique ce qui est totalement
contraire à la norme vb.


Merci pour la(es) leçon(s)... 1950 est destiné à être remplacé par le
nom d'un contrôle et ne sert que pour les essais (simplification). Pour
ce qui est des noms de tables et de champs, toutes mes bases ont été
conçues avec le principe de numéroter les tables (Ce sont des principes
qui me reste des "nomenclatures", à une époque ou l'informatique
s'appelait encore mécanographie et où on trouvait plus de tabulatrices
que d'ordinateurs, à part les Gamma10!) et de partir de ce numéro pour
identifier les objets qui s'y rapporte (requête(s), formulaire(s),
état(s), etc... Cà va être difficile, maintenant, de revenir en arrière
(les bases actuelles sont des développements de bases conçues en
Access1.1 et Access Basic, qui ont, depuis, suivi les versions : çà ne
nous rajeunit pas!).

--
Bonne fin de journée.
----------------------------------------
Jclg88
Cliquer sur ce lien pour me joindre par mél :
http://cerbermail.com/?JVKAlLV1Rf
----------------------------------------


"Jc" a écrit dans le message de
news:
Re-Bonjour(soir) Buddy,
Merci de votre aide. Malheureusement, il n'y a pas de référence
manquante... et l'orthographe est la bonne.

Access97 se fait vieux et j'ai pas trop en mémoire les différences
par



rapport aux versions actuelles.
Je passe la main.


Encore merci et si une autre bonne âme avait une autre suggestion...
(je


rappelle que la requête SQL, appelée par une macro, fonctionne
parfaitement).








Avatar
Jc
Bonjour(soir) Tous,

Je reviens sur cette requête qui me cause toujours des soucis.

- Si j'écris :

DoCmd.RunSQL "UPDATE 90_Calendrier" _
& " SET [90_Calendrier].[ANNIV] = Null" _
& " WHERE
Year([901DEPUI])>Forms![Planificateur-ChAnnee/FSaisie]![SAISIE];"

pas de soucis.

- Si j'écris :

Dim LanCour As Integer
LanCour = Forms![Planificateur-ChAnnee/FSaisie]![SAISIE]

DoCmd.RunSQL "UPDATE 90_Calendrier" _
& " SET [90_Calendrier].[ANNIV] = Null" _
& " WHERE Year([901DEPUI])>LanCour;"

la machine ne reconnait pas "LanCour" et me redemande sa valeur.
NB: si je vérifie la valeur de "LanCour", après l'éxécution de la
requête par:

MsgBox (LanCour)

j'ai bien sa valeur.

Q- Comment faut-il désigner une variable dans la condition WHERE d'une
requête UPDATE appelée par DoCmd.RunSQL ?

Merci de votre aide et
--
Bonne fin de journée.
----------------------------------------
Jclg88
Cliquer sur ce lien pour me joindre par mél :
http://cerbermail.com/?JVKAlLV1Rf
----------------------------------------
Avatar
Buddy
Salut

Regardes bien les exemples déjà fournis

DoCmd.RunSQL "UPDATE 90_Calendrier SET [90_Calendrier].[ANNIV] = Null WHERE
Year([901DEPUI])>" & LanCour & ";"

Ouala
Bye
Buddy

"Jc" a écrit dans le message de
news:
Bonjour(soir) Tous,

Je reviens sur cette requête qui me cause toujours des soucis.

- Si j'écris :

DoCmd.RunSQL "UPDATE 90_Calendrier" _
& " SET [90_Calendrier].[ANNIV] = Null" _
& " WHERE
Year([901DEPUI])>Forms![Planificateur-ChAnnee/FSaisie]![SAISIE];"

pas de soucis.

- Si j'écris :

Dim LanCour As Integer
LanCour = Forms![Planificateur-ChAnnee/FSaisie]![SAISIE]

DoCmd.RunSQL "UPDATE 90_Calendrier" _
& " SET [90_Calendrier].[ANNIV] = Null" _
& " WHERE Year([901DEPUI])>LanCour;"

la machine ne reconnait pas "LanCour" et me redemande sa valeur.
NB: si je vérifie la valeur de "LanCour", après l'éxécution de la
requête par:

MsgBox (LanCour)

j'ai bien sa valeur.

Q- Comment faut-il désigner une variable dans la condition WHERE d'une
requête UPDATE appelée par DoCmd.RunSQL ?

Merci de votre aide et
--
Bonne fin de journée.
----------------------------------------
Jclg88
Cliquer sur ce lien pour me joindre par mél :
http://cerbermail.com/?JVKAlLV1Rf
----------------------------------------



Avatar
Jc
Bonjour(soir) Buddy,


"Buddy" a écrit dans le message news:

Salut

Regardes bien les exemples déjà fournis

DoCmd.RunSQL "UPDATE 90_Calendrier SET [90_Calendrier].[ANNIV] = Null
WHERE

Year([901DEPUI])>" & LanCour & ";"


Encore merci de votre aide. CA MARCHE !!!

Une question : J'utilise les 2 bouquins de MS-Press et ceux de
MicroApplication, mais on n'y trouve que quelques pages sur le langage
SQL et pratiquement rien sur l'utilisation de ce langage dans VBA (cde :
DoCmd.Run SQL). Connaissez-vous un bon bouquin, un site, enfin quelque
chose qui explique comment bâtir des requêtes qui fonctionnent ?
--
Bonne fin de journée.
----------------------------------------
Jclg88
Cliquer sur ce lien pour me joindre par mél :
http://cerbermail.com/?JVKAlLV1Rf
----------------------------------------

"Jc" a écrit dans le message de
news:
Bonjour(soir) Tous,

Je reviens sur cette requête qui me cause toujours des soucis.

- Si j'écris :

DoCmd.RunSQL "UPDATE 90_Calendrier" _
& " SET [90_Calendrier].[ANNIV] = Null" _
& " WHERE
Year([901DEPUI])>Forms![Planificateur-ChAnnee/FSaisie]![SAISIE];"

pas de soucis.

- Si j'écris :

Dim LanCour As Integer
LanCour = Forms![Planificateur-ChAnnee/FSaisie]![SAISIE]

DoCmd.RunSQL "UPDATE 90_Calendrier" _
& " SET [90_Calendrier].[ANNIV] = Null" _
& " WHERE Year([901DEPUI])>LanCour;"

la machine ne reconnait pas "LanCour" et me redemande sa valeur.
NB: si je vérifie la valeur de "LanCour", après l'éxécution de la
requête par:

MsgBox (LanCour)

j'ai bien sa valeur.

Q- Comment faut-il désigner une variable dans la condition WHERE
d'une


requête UPDATE appelée par DoCmd.RunSQL ?

Merci de votre aide et
--
Bonne fin de journée.
----------------------------------------
Jclg88
Cliquer sur ce lien pour me joindre par mél :
http://cerbermail.com/?JVKAlLV1Rf
----------------------------------------







1 2