Pb d'execution de requete UPDATE sous ACCESS

Fermé
kiwijinshi Messages postés 12 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 30 juillet 2007 - 3 avril 2007 à 11:45
blux Messages postés 25968 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 16 avril 2024 - 13 sept. 2007 à 13:04
Bonjour à toutes et à tous,
J'ai créé une requete SQL (appelée INSERT) sous MS ACCESS 2000 qui fonctionne très bien lorsque je l'exécute en mode création (après avoir entré à la main les valeurs VAR_DOSSIER et VAR_NUMREF):

UPDATE Table1 AS Tab1 SET Tab1.Dossier = VAR_DOSSIER
WHERE (Tab1.Dossier=0 And Tab1.NumRef=VAR_NUMREF);

En revanche, lorsque je l'exécute par du VBA sous ACCESS pour renseigner les deux valeurs automatiquement, la table 1 n'est pas modifiée. Voici mon code VBA :

MsgBox "VARDOSSIER VARNUMREF = " & VARDOSSIER & " " & VARNUMREF
Set QrDef = CurrentDb.QueryDefs("INSERT")
QrDef.Parameters("VAR_DOSSIER").Value = VARDOSSIER
QrDef.Parameters("VAR_NUMREF").Value = VARNUMREF
MsgBox "VARDOSSIER VARNUMREF = " & VARDOSSIER & " " & VARNUMREF

Les MsgBox m'assurent que les valeurs avant et après la requete sont bien celles que je rentre à la main et ne sont pas modifiées au cours de l'exécution de la requête.
(VARDOSSIER est un Integer et VARNUMREF un String)
Comment ca se fait qu'en VBA aucun changement n'est fait ????
Comment faire pour rendre ma requete efficace ????

J'espère que mon problème est suffisamment détaillé et clair ?! J'espère surtout qu'il a une solution ;)
Merci d'avance à tous ceux (et celles) qui s'y intéressent !
A voir également:

5 réponses

blux Messages postés 25968 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 16 avril 2024 3 284
3 avril 2007 à 12:45
Salut,

à aucun moment, tu ne définis de requête correcte et à aucun moment tu n'exécutes une requête...

Tu pourrais faire comme ça :
Dim StrSql as String
Dim Req as QueryDef
StrSql = "UPDATE Table1 AS Tab1 "
StrSql = StrSql + " SET Tab1.Dossier = " & VAR_DOSSIER & " "
StrSql = StrSql + " WHERE (Tab1.Dossier=0 And "
StrSql = StrSql + " Tab1.NumRef = " & VAR_NUMREF & ");"
Set Req = CurrentDb.CreateQueryDef("", StrSql)
Req.Execute dbFailOnError 
Et je suis sûr que ça irait mieux...
1
blux Messages postés 25968 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 16 avril 2024 3 284
3 avril 2007 à 14:21
Ben, je savais pas, mais pour moi, VARNUMREF, avec un nom comme ça, c'était numérique...:-)

Plutôt que des guillemets triples, mets donc des simple-quote (apostrophe), c'est encore plus lisible et ça ne dénature pas le texte (pour autant qu'il ne contienne pas de simple-quote...
StrSql = StrSql + " Tab1.NumRef = '" & VARNUMREF & "');" 
--
A+ Blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"
1
kiwijinshi Messages postés 12 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 30 juillet 2007
3 avril 2007 à 15:39
Excuse-moi mais j'ai une autre question de mise en forme... :

UPDATE Table1 AS Tab1 SET Tab1.Dossier = 1
WHERE ((Tab1.Time)=#12/01/2007 11:03#)

Ca sélectionne pas... avec les #..# la requête se lance mais il n'y a pas de détection de la date dans la colonne Time de la Table1.
J'ai essayé avec ".." et '..' et aussi sans rien, mais dans ces cas, la requête ne se lance même pas.
Time est bien un type Date/Heure de format jj/mm/aaaa\ hh:nn (codification ACCESS).

Comment faire accepter une variable de type date dans du SQL ?? Il me semblait que c'était bien des # # pourtant... !
0
blux Messages postés 25968 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 16 avril 2024 3 284
3 avril 2007 à 16:00
Les dates ne seraient pas à mettre en format US (#mm/dd/yyyy#) ?
0
kiwijinshi Messages postés 12 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 30 juillet 2007
3 avril 2007 à 16:11
Sous SQL si, mais peu importe vu que je teste ma requête avec des chiffres :

UPDATE Table1 AS Tab1 SET Tab1.Dossier = 1
WHERE ((Tab1.Time)=#12/01/2007 11:03#)

Et je ne peux pas me limiter à la date, il me faut l'heure et minutes aussi. Quoiqu'il en soit la variable est bien lue ; quand je passe les paramètre Time de Table1 en type Texte (String) et pareil pour ma variable en la mettant entre côtes au lieu des ## ca fonctionne...

Mais j'aimerai ne pas avoir à passer en format texte pour qu'il y ait un contrôle de forme au niveau des interfaces d'ACCESS lorsque l'utilisateur saisit une date (pour pas qu'il aille marquer TOTO dans le champ date...)
0
blux Messages postés 25968 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 16 avril 2024 3 284
3 avril 2007 à 16:23
Tu sais qu'un format date comprend aussi les secondes ?
Faudrait aussi les tester ou faire une comparaison en éclatant ta date avec datepart...
0
kiwijinshi Messages postés 12 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 30 juillet 2007
4 avril 2007 à 09:58
Les secondes sont bien intégrées dans la table, même si celle-ci est au format jj/mm/aaaa\ hh:nn

En fait, il suffit que les secondes soient à zero et la transition se fait automatiquement (je n'ai pas essayé avec des secondes différent de zero car le cas ne va pas se présenter...)

Pour tester vérifier l'insertion valide d'un champ date au format
jj/mm/aaaa hh:nn
ou
jj/mm/aaaa hh:nn:ss
dans ma table ACCESS, j'exécute la requête dans le mode Edition/Création de requête et je rentre la valeur de ma variable de temps à la main, dans la fenêtre qu'ACCESS m'ouvre à cet effet.
De cette façon, la saisie est bien prise en compte !
C'est pas normal alors que lorsque je met la valeur de ma variable entre ## plutot que le nom de ma variable, ca n'ait pas le même effet !?
Il doit y avoir un problème d'écriture... pourtant les champs de date doivent bien être saisis entre ## :( :( :(
0
kiwijinshi Messages postés 12 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 30 juillet 2007
3 avril 2007 à 14:13
L'application de la requête est différente, mais le problème reste le même ...

"Erreur d'exécution '3061' : Trop peu de paramètres. 1 attendu."

En fait, pour reprendre ton option, VARDOSSIER est bien prise en compte, mais pas VARNUMREF car il s'agit d'une variable de type String.

Dim StrSql as String
Dim Req as QueryDef
StrSql = "UPDATE Table1 AS Tab1 "
StrSql = StrSql + " SET Tab1.Dossier = " & VARDOSSIER & " "
StrSql = StrSql + " WHERE (Tab1.Dossier=0 And "
StrSql = StrSql + " Tab1.NumRef = " & VARNUMREF & ");"
Set Req = CurrentDb.CreateQueryDef("", StrSql)
Req.Execute dbFailOnError

Pour détail : j'ai enregistré la requête ainsi créée sous le nom INSERT2 et voilà ce qu'elle contient ;

UPDATE ImportIndisposATraiter AS Tab1 SET Tab1.Dossier = 1
WHERE (((Tab1.Dossier)=0) AND ((Tab1.NumRef)=[Reference1]));

Avec "Reference1" la valeur de VARNUMREF. Il faut en fait réussir à mettre des " " autour de la valeur de VARNUMREF dans le code, donc déclarer la ligne ainsi :

StrSql = StrSql + " Tab1.NumRef = """ & VARNUMREF & """);"

En tt cas merci pour la remise en forme du code, c chouette ca permet de débugger + facilement ;)
J'marque le pb comme résolu ! Au plaisir !!
-1
kiwijinshi Messages postés 12 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 30 juillet 2007
3 avril 2007 à 14:27
C'était précisé dans le premier post ^^ pas de pb c'est du string pq code avec chiffres + lettres.

Thx pour les apostrophes, j'suis pas bien familiarisé avc VBA encore ;)
-1
Les apostrophes, ce n'est pas une question de VBA mais de SQL...
0
blux Messages postés 25968 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 16 avril 2024 3 284 > Jibus
13 sept. 2007 à 13:04
Pas forcément, ça permet de rendre le VBA plus lisible, même si sous ACCESS le délimiteur de string peut être indifféremment le guillemet (") ou l'apostrophe (')...
0

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

Posez votre question
bonjour à tout
je crée un requête sql sur visual basic version 6.0 est la suite
dim strupdat as string
strupdat="update TRouteurs set Password='"& txtNMP.text &"' where NomRout='" & BMListRout.list(i) &"'"
Cn.execute strupdat
txtNMP.txt c'est un zone de texte
NomRout c'est une ligne de base de donnee access de la table TRouteurs
BMListRout est une listbox contient les nom des routeurs.

cette reqette ne marche plus sur vb6
quel est la solution coorect
J'espère que mon problème est suffisamment détaillé et clair ?!
merci
-1