Problème avec ma requête !

bernett Messages postés 62 Date d'inscription jeudi 3 juin 2004 Statut Membre Dernière intervention 20 janvier 2006 - 23 juin 2004 à 13:28
bernett Messages postés 62 Date d'inscription jeudi 3 juin 2004 Statut Membre Dernière intervention 20 janvier 2006 - 24 juin 2004 à 10:57
J'utilise une connexion ADO pour enregistrer les données d'un formulaire excel dans une table Access.

La connexion fonctionne mais la requête ne marche pas !

Le message affiché est :" Variable Objet ou Variable de bloc With non définie"

Siqq'un a la solution à mon problème je le remercie beaucoup!

Voici ma requête :
sub ...

dim cnx as adodb.connection
dim rst as adodb.recordset
dim cmd as adodb.command
set cnx=new aadodb.connection
set rst=new adodb recordset

cnx.provider = "Microsoft.jet.oledb.4.0"
cnx.connectionString ="..."
cnx.open

cmd.commandText = "Update Table1 Set Table1.Champ1= "valeur" "

cmd.execute

end sub

23 réponses

Mooiz Messages postés 128 Date d'inscription mercredi 25 juin 2003 Statut Membre Dernière intervention 8 juillet 2005
23 juin 2004 à 13:31
Je dirais :
cmd.commandText = "Update Table1 Set Table1.Champ1= 'valeur'"
(remplacement des quotes par des apotrophes à l'avant dernière ligne)
0
HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
23 juin 2004 à 13:31
Je suppose que valeur est une variable que tu as rensigné préalablement.
Si c'est le cas, il faut que tu la concatènes à la requête avec des &
Par ailleurs, il faut que tu entoures cette variable de cotes si ton champ n'est pas numérique.

cmd.commandText = "Update Table1 Set Table1.Champ1= '" & valeur &"'"

Fanny
0
bernett Messages postés 62 Date d'inscription jeudi 3 juin 2004 Statut Membre Dernière intervention 20 janvier 2006
23 juin 2004 à 13:49
Merci à Mooiz et Hfanny mais aucune de vos propositions ne fonctionne vous n'auriez pas d'autre propositions par hasard !

Ps : la valeur que je récupère est de type caractère !

Merci !

8-)
0
HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
23 juin 2004 à 14:44
Est-ce que tu as essayé de taper ta requête dans l'éditeur de requête d'access (mode SQL), pour voir si elle fonctionne ?

Et es-tu sur que valeur a bien été renseigné ?

Si elle fonctionne, cela voudrait dire que ce n'est pas la requête qui est fausse, mais une autre partie du code.

Fanny
0

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

Posez votre question
bernett Messages postés 62 Date d'inscription jeudi 3 juin 2004 Statut Membre Dernière intervention 20 janvier 2006
23 juin 2004 à 15:20
La requête fonctionne et la valeur est bien renseignée, c'est vraiment la galère cette histoire !

Enfin merci qd mem ! si tu as une autre idée on sait jamais !

A bientôt ! Hfanny
0
carnez Messages postés 120 Date d'inscription jeudi 31 octobre 2002 Statut Membre Dernière intervention 2 août 2004
23 juin 2004 à 15:35
bonjour,

je crois que tu as oublié 2 choses :

1- Set cmd = New ADODB.Command

2- cmd.CommandType=aDCmdText

essaie un peu pour voir ...

Colibri
0
bernett Messages postés 62 Date d'inscription jeudi 3 juin 2004 Statut Membre Dernière intervention 20 janvier 2006
23 juin 2004 à 15:43
Merci Carnez, maintenant j'ai un autre message d'erreur :
"Cette opération n'est pas autorisée sur un objet ayant une référence vers une connexion non valide ou fermée"

est ce q sa te dit qqchose ?

Merci
0
carnez Messages postés 120 Date d'inscription jeudi 31 octobre 2002 Statut Membre Dernière intervention 2 août 2004
23 juin 2004 à 16:02
alors là, c'est amusant : ta requête pourrait fonctionner, mais ta connexion ne marche pas !!!

j'aurais fait ceci :
j'établis une connexion, mais si elle était encore active, je la ferme
une fois établie, je l'affiche, ou j'affiche une erreur
puis je lance la commande SQL
à ce propos, si valeur est une variable, il faut bien indiquer :
Table1.Champ1= '" & valeur &"'"

dim cnx as NEW adodb.connection
dim rst as NEW adodb.recordset
dim cmd as NEW adodb.command

with cnx
if .state = 1 then .close
.provider = "Microsoft.jet.oledb.4.0"
.connectionString ="..."
.open
if .state = 0 then
msgbox "Connexion loupée !!!!"
else
msgbox "Connexion établie"
endif
end with

with cmd
.commandText = "Update Table1 Set Table1.Champ1= "valeur" "
.CommandText = adCmdTxt
.execute
end with

au moins, tu sauras si ta connexion fonctionne réellement

Colibri
0
carnez Messages postés 120 Date d'inscription jeudi 31 octobre 2002 Statut Membre Dernière intervention 2 août 2004
23 juin 2004 à 16:04
oups, j'a fait une ch'tiote erreur

adCmdTxt est la valeur de la propiété CommandType, bien sûr, pas de CommandText

tu auras rectifié.

Colibri
0
bernett Messages postés 62 Date d'inscription jeudi 3 juin 2004 Statut Membre Dernière intervention 20 janvier 2006
23 juin 2004 à 16:11
Merci,

La connexion fonctionne et c'est au niveau du .execute
que ça déconne !

A mon avis c'est les quotes et les guillemets qui passent pas:

Table1.Champ1= '" & valeur &"'"
0
bernett Messages postés 62 Date d'inscription jeudi 3 juin 2004 Statut Membre Dernière intervention 20 janvier 2006
23 juin 2004 à 16:13
j'ai bien rectifié le command text !
0
HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
23 juin 2004 à 16:18
Comme c'est du numérique, il faut que tu enlèves les guillemets simples :)

Table1.Champ1= " & valeur

Fanny
0
carnez Messages postés 120 Date d'inscription jeudi 31 octobre 2002 Statut Membre Dernière intervention 2 août 2004
23 juin 2004 à 16:22
pourtant, c'est pas sorcier, on devrait y arriver

"Table1.champ1 = '(simple côte pour annoncer une variable texte)"(double côte pour fermer la string) & (perluette de continuation) Valeur(variable définie en string) & "double côte)'(simple côte)"(double côte)

auparavant, tu pourrais faire un
debug.print valeur et dis moi ce qu'elle a dans le ventre

Colibri
0
bernett Messages postés 62 Date d'inscription jeudi 3 juin 2004 Statut Membre Dernière intervention 20 janvier 2006
23 juin 2004 à 16:24
Ce n'est pas du numérique c'est du texte mais j'ai qd meme essayé en modifiant les types et cela ne marche pas !

Merci Fanny
0
HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
23 juin 2004 à 16:24
Oups oui pardon ... c'est du caractère ... je dis n'importe quoi moi !!! :blush)

Fanny
0
bernett Messages postés 62 Date d'inscription jeudi 3 juin 2004 Statut Membre Dernière intervention 20 janvier 2006
23 juin 2004 à 16:40
Merci carnez !

J'ai bien mis les quotes comme tu me l'as indiqué et le message de deboguage est toujours le mem:

"Cette opération n'est pas autorisée sur un objet ayant une référence vers une connexion non valide ou fermée"

Le problème ne viendrai t-il pas de la base ? : si elle doit être ouverte..?
0
bernett Messages postés 62 Date d'inscription jeudi 3 juin 2004 Statut Membre Dernière intervention 20 janvier 2006
23 juin 2004 à 17:09
Voila ou j'en suis resté, si qqu'un trou ve l'erreur ! Bravo!

dim cnx as NEW adodb.connection
dim rst as NEW adodb.recordset
dim cmd as NEW adodb.command

set cnx=new adodb.connection
set cmd=new adodb.command
dim x as string
x="mars"

with cnx
if .state = 1 then .close
.provider = "Microsoft.jet.oledb.4.0"
.connectionString ="..."
.open
if .state = 0 then
msgbox "Connexion loupée !!!!"
else
msgbox "Connexion établie"
endif
end with

with cmd
.CommandType = adCmdTxt
.commandText = "Update Table1 Set Table1.Champ1= '" & x & "'"
.execute 'erreur à cette ligne'
end with
0
carnez Messages postés 120 Date d'inscription jeudi 31 octobre 2002 Statut Membre Dernière intervention 2 août 2004
23 juin 2004 à 17:32
c'est vrai qu'on devient chèvre !!!!

reprenons de puis le début :

1- propriétés de ton champ Champ1 ?
2- y a t'il des enregistrements dans ta table Table1 ?
3- tu veux bien mettre la même valeur dans tous les enregistrements de ta table Table1 ?
4- qu'indique le msgbox (loupée ou établie ?)

si tout ça est cohérent, essaie :

with rs ' c'est un NEW ADODB.recordset
if .state = 1 then .close
.open "select * from table1", cnx, adopenkeyset, adlocoptimistic
do until .eof
![champ1] = x
.update
.movenext
loop
end with
rs.close
set rs = nothing

Colibri
0
bernett Messages postés 62 Date d'inscription jeudi 3 juin 2004 Statut Membre Dernière intervention 20 janvier 2006
23 juin 2004 à 17:40
Bonne soirée carnez je reprendrai ça dmin et merci à toi !
0
carnez Messages postés 120 Date d'inscription jeudi 31 octobre 2002 Statut Membre Dernière intervention 2 août 2004
24 juin 2004 à 09:06
re bonjour,

bien dormi ?

ce truc m'amuse; j'ai relis soigneusement et je vois :

"Le problème ne viendrai t-il pas de la base ? : si elle doit être ouverte..? "

Veux-tu dire que table1 ne se trouve pas dans ta base courente ?

alors, qu'y a t'il dans ta Connectionstring ?

Colibri
0
Rejoignez-nous