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 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.
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 & "")
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
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
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.
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.
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