Erreur Syntaxe VBA sur code SQL

Résolu
Damboushow Messages postés 23 Date d'inscription vendredi 1 janvier 2016 Statut Membre Dernière intervention 9 mai 2016 - Modifié par NHenry le 1/01/2016 à 13:07
Damboushow Messages postés 23 Date d'inscription vendredi 1 janvier 2016 Statut Membre Dernière intervention 9 mai 2016 - 3 janv. 2016 à 09:38
Bonjour, je tente de monter un petit système d'inventaire temporaire avec acces 2007. Je ne suis vraiment pas un connaisseur acces. Je veux avec la présente fonction que la quantité de l'item soit retiré de la base de données. J'ai l'erreur 3219 sur ma ligne de code de la requete SQL.

Dim db As Database
    Dim rs As DAO.Recordset
    Set db = CurrentDb
    Set rs = db.Execute("UPDATE Items SET QteStock = QteStock - Me.Quantité WHERE Items.N° = Me.Items")


J'ai essayé avec des guillemets et des double guillemets pour les Me, mais ça me donne une erreur de syntaxe également.

Me.Quantité est une zone de texte avec la quantité à déduire
Me.Item est une liste déroulante avec les items.

Merci!

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

8 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 1/01/2016 à 18:57
Bonjour,
je ne vois pas où as déclaré db.
db devrait être déclarée (avant le set), comme étant le sgdb utilisé.
mets donc ceci :
If db Is Nothing Then
MsgBox "l'objet db n'existe pas"
Else
MsgBox "l'objet db existe"
End If

juste avant ta ligne disant :
Set db = CurrentDb

et dis-nous ce qu'affiche la msgbox

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
1
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
1 janv. 2016 à 14:19
Il te faut concaténer les chaines, pas simplement les mettre dans la chaine :
"Texte" & Variable & "Texte"
0
Damboushow Messages postés 23 Date d'inscription vendredi 1 janvier 2016 Statut Membre Dernière intervention 9 mai 2016 2
Modifié par Damboushow le 1/01/2016 à 15:05
Merci pour votre réponse, Voici le code que j'ai actuellement.

Dim qte As Integer
qte = Me.Quantité
Dim itm As Integer
itm = Me.Items.ColumnHidden
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.Execute("UPDATE Items SET QteStock = QteStock - "&qte&" WHERE Items.N° = "&itm&)

Il me donne l'erreur toujours une erreur de syntaxe. Il me dit qu'il manque un séparateur de liste entre " WHERE Items.N° = "
J'ai ajouté des varriables seulement que pour m'assurer que le trouble n'était issu au type de valeur retournée.
0
Damboushow Messages postés 23 Date d'inscription vendredi 1 janvier 2016 Statut Membre Dernière intervention 9 mai 2016 2
1 janv. 2016 à 15:08
Merci, J'ai donc trouvé la solution il me manquait un +

Set rs = db.Execute("UPDATE Items SET QteStock = QteStock - "&qte& + " WHERE Items.N° = "&itm&)
0
Damboushow Messages postés 23 Date d'inscription vendredi 1 janvier 2016 Statut Membre Dernière intervention 9 mai 2016 2
Modifié par Damboushow le 1/01/2016 à 16:22
J'ai effectué plusieurs test et voici le code dont je n'ai plus l'erreur qu'il manque un séparateur, par contre il me dit que Le caractère de déclaration de type ne correspond pas au type de données déclaré.

J'ai fait plusieurs test, meme un msgBox pour vérifier la valeur envoyé et c'Est bien un int et mon champ de table est bien en numérique. Il me donne la même erreur pour mes 2 variables.


Dim qte As Integer
qte = CInt(Me.Quantité.Value)
Dim itm As Integer
itm = CInt(Me.Items.Value)
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.Execute("UPDATE Items SET QteStock = QteStock - " & qte& + " WHERE Items.N° = " & itm&)


En modifiant le code comme suit, il me dit qu'il manque un opérateur de fin, à noter que le + n'y est plus, dès que j'ajoute les espaces il me retire mon signe + automatiquement.

Set rs = db.Execute("UPDATE Items SET QteStock = QteStock - " & qte & " WHERE Items.N° = " & itm &)


Avec le code comme suite, il me dit objet requis:

Set rs = db.Execute("UPDATE Items SET QteStock = QteStock - " & qte & " WHERE Items.N° = " & itm & "")
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
1 janv. 2016 à 16:19
Met un espace avant et après les & et retire les +.
et si à la fin il n'y a plus rien à concaténer, ne met pas de &
0
Damboushow Messages postés 23 Date d'inscription vendredi 1 janvier 2016 Statut Membre Dernière intervention 9 mai 2016 2 > NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024
1 janv. 2016 à 16:38
Merci, je reçois toujours le message: objet requis.

Merci pour ton aide grandement apprécié.
0
Damboushow Messages postés 23 Date d'inscription vendredi 1 janvier 2016 Statut Membre Dernière intervention 9 mai 2016 2
2 janv. 2016 à 09:59
Suite à plusieurs recherche hier, j'en suis venu au code suivant, dont j'ai ajouté votre IF, me reportant effectivement le message : db n'existe pas

Set Database = DBEngine.OpenDatabase("C:\Users\MONFICHIER1.accdb", False, False, "MS Access;PWD=")
Dim qte As Integer
qte = CInt(Me.Quantité.Value)
Dim itm As Integer
itm = CInt(Me.Items.Value)
Dim rs As DAO.Recordset
Dim db As DAO.Database
If db Is Nothing Then
MsgBox "l'objet db n'existe pas"
Else
MsgBox "l'objet db existe"
End If
'Set db = CurrentDb
'Set rs = db.Execute("UPDATE Items SET QteStock = QteStock - " & qte & " WHERE Items.N° = " & itm)
'db.Close

Merci de m'aider.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 janv. 2016 à 11:38
Je ne comprends pas ta manière de penser.
Un objet se déclare puis se définit, quel que soit l'objet !
Si l'on doit utiliser l'objet toto :
1) on le déclare
Dim toto as son_type
puis
2) on le définit
set toto = un_objet_du_type son_type
0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 2/01/2016 à 13:24
On va y voir clair ...
Développes-tu directement en VBA/Access ou appelles-tu Access depuis une appli autre que Access ?

Je n'ai pas access sur ma machine, mais voilà comment et dans quel ordre je "vois" les choses (avec DAO, que tu dis avoir choisi) si ton appli est faite directement avec VBA/Access :
 Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim ta_requête As String
' Ouverture de la base de données
Set db = DBEngine.OpenDatabase ("chemin_de_ton_fichier.mdb") ' définis et ouvre la base
ta_requête = "........expression_de_ta_requête ......."
Set rs = db.OpenRecordset ( ta_requête, dbOpenForwardOnly, dbReadOnly) ' définition du jeu d'enregistrement par exécution de ta requête

A toi de fixer tes paramètres d'exécution comme TU l'entends(dbOpenForwardOnly ou autre, dbReadOnly ou autre, selon ce que tu veux faire)
Il est par ailleurs clair que tu dois avoir coché la référence Microsoft DAO #.# Object Library (où #.# est bien sûr à remplacer par ta version DAO)


________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
Damboushow Messages postés 23 Date d'inscription vendredi 1 janvier 2016 Statut Membre Dernière intervention 9 mai 2016 2
2 janv. 2016 à 14:20
Dans un premier temps, c'est une application directement dans access avec les tables dans le même fichier.

Dans ta solution proposé ci haut, je l'avais déja testé dans cette séquence. J'ai remis le tout sous cette forme et oui DAO est sélectionné.

Voici le code actuel dont j'ai toujours le message d'objet inexistant.

Dim qte As Integer
qte = CInt(Me.Quantité.Value)
Dim itm As Integer
itm = CInt(Me.Items.Value)
Dim db As DAO.Database
Dim rs As DAO.Recordset
If db Is Nothing Then
MsgBox "l'objet db n'existe pas"
Else
MsgBox "l'objet db existe"
End If


De plus mon fichier est un accdb et non un mdb et il donne une erreur de type. Je ne veux pas séparer la base de donnée de l'interface. C'est une transition entre un fichier excel et un vrai service web dans quelques mois.

Merci!
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 janv. 2016 à 17:43
accdb, donc ...
tu trouveras toutes les manières ici :
http://warin.developpez.com/tutoriels/access/specificites-dao-sous-microsoft-access-2007-et-ulterieurs/
je n'ai pas access et ne peux en tester aucune.
0
Damboushow Messages postés 23 Date d'inscription vendredi 1 janvier 2016 Statut Membre Dernière intervention 9 mai 2016 2
2 janv. 2016 à 18:17
Merci, exactement la procédure que je cherche depuis hier, ton aide est grandement apprécié.
0
Damboushow Messages postés 23 Date d'inscription vendredi 1 janvier 2016 Statut Membre Dernière intervention 9 mai 2016 2
3 janv. 2016 à 09:38
Si cela peut aider certain:

Private Sub SauvegarderDeclinaison_Click()
Dim qte As Integer
qte = CInt(Me.Quantité.Value)
Dim itm As Integer
itm = CInt(Me.Items.Value)
Dim db As DAO.Database
Dim strChemin As String
strChemin = "c:\Users\FICHIER.accdb"
Set db = Application.DBEngine.OpenDatabase(strChemin, False, False)
db.Execute ("UPDATE Items SET QteStock = QteStock - " & qte & " WHERE Items.N° = " & itm)
db.Close

End Sub
0
Rejoignez-nous