Création
d'entreprise
Posez votre question Signaler

Pb d'execution de requete UPDATE sous ACCESS

kiwijinshi 12Messages postés 27 mars 2007Date d'inscription - Dernière réponse le 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 !
Lire la suite 

Pb d'execution de requete UPDATE sous ACCESS »

12 réponses
Réponse
+1
moins plus
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...
Ajouter un commentaire
Réponse
+1
moins plus
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"
kiwijinshi- 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...)
blux- 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...
kiwijinshi- 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 ## :( :( :(
Ajouter un commentaire
Réponse
-1
moins plus
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 !!
Ajouter un commentaire
Réponse
-1
moins plus
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 ;)
Jibus - 13 sept. 2007 à 12:58
Les apostrophes, ce n'est pas une question de VBA mais de SQL...
blux- 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 (')...
Ajouter un commentaire
Réponse
-1
moins plus
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
Ajouter un commentaire
Ce document intitulé « Pb d'execution de requete UPDATE sous ACCESS » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?