Pb d'execution de requete UPDATE sous ACCESS
kiwijinshi
Messages postés
12
Statut
Membre
-
blux Messages postés 27918 Date d'inscription Statut Modérateur Dernière intervention -
blux Messages postés 27918 Date d'inscription Statut Modérateur Dernière intervention -
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 !
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:
- Update access
- Windows update bloqué - Guide
- Winget update - Guide
- Asus live update - Télécharger - Utilitaires
- Wsus offline update - Télécharger - Systèmes d'exploitation
- 0x800f0805 windows 10 update - Forum Windows 10
5 réponses
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 :
à 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...
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...
A+ Blux
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"
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... !
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... !
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...)
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...)
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 ## :( :( :(
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 ## :( :( :(
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 !!
"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 !!
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 ;)
Thx pour les apostrophes, j'suis pas bien familiarisé avc VBA encore ;)
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
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