VBA recordset
stikmou
-
stikmou -
stikmou -
Bonjour,
voila j'utilise une requête ajouter une taille tous en comparant avec ma table s'il elle n'existe pas. J'utilise donc un recordset, le problème est qu'il me met l'erreur 3021 "Il n'y a pas d'enregistrement en cours" et je ne comprends pas pk.
Voici mon code :
voila j'utilise une requête ajouter une taille tous en comparant avec ma table s'il elle n'existe pas. J'utilise donc un recordset, le problème est qu'il me met l'erreur 3021 "Il n'y a pas d'enregistrement en cours" et je ne comprends pas pk.
Voici mon code :
Dim RST1 As Recordset Set RST1 = CurrentDb.OpenRecordset("select * from TAILLE where code_taille = ' " & Me.new_taille & " '") If RST1.RecordCount <> 0 Then MsgBox ("Cette taille existe déjà") End If RST1.MoveFirst ' Execution de la requete DoCmd.RunSQL "INSERT INTO TAILLE (code_taille) VALUES ('" & new_taille.Text & " ') " MsgBox ("La taille à été ajouter avec succès")
5 réponses
Bonjour,
Voilà un exemple :
Bon courage.
;o)
Voilà un exemple :
Dim db As DAO.Database Dim rs As DAO.Recordset Dim query As String Set db = CurrentDb query = ""select * from TAILLE where code_taille = ' " & Me.new_taille & " '") Set rs = db.OpenRecordset(query) If rs.RecordCount <> 0 Then MsgBox "Cet enregistrement existe déjà !!!" Else With rs .AddNew .Fields("code_taille") = Me.new_taille .Update End With rs.Close db.Close Set rs = Nothing Set db = Nothing MsgBox ("La taille à été ajouter avec succès") End If
Bon courage.
;o)
Salut,
plutôt que de faire un recordset pour compter le nombre d'occurrences, fais un dlookup, ça va beaucoup plus vite...
plutôt que de faire un recordset pour compter le nombre d'occurrences, fais un dlookup, ça va beaucoup plus vite...
Merci pour ta réponse Polux31. Ca fonctionne en partie, je m'explique.
Quand je rentre une taille non existante, tous marche impeccablement.
Cependant quand je rentre une taille déja existante ca me met une erreur (erreur 3022) en disant qu'il ne peux pas faire de modification car il y aurai un risque de doublon.
Mais en faites j'ai l'impression qu'il ne rentre meme pas dans la boucle du IF (c'est à dire ici :
Quand je fait un debog, ca me surligne le .Update
Quand je rentre une taille non existante, tous marche impeccablement.
Cependant quand je rentre une taille déja existante ca me met une erreur (erreur 3022) en disant qu'il ne peux pas faire de modification car il y aurai un risque de doublon.
Mais en faites j'ai l'impression qu'il ne rentre meme pas dans la boucle du IF (c'est à dire ici :
If rs.RecordCount <> 0 Then MsgBox "Cet enregistrement existe déjà !!!" Else
Quand je fait un debog, ca me surligne le .Update
Ajoute un Exit Sub (ou Function) après le msgbox.
C'est étrange parce que je viens de faire un test et je n'ai pas ton message d'erreur.
En fait j'ai fait ça de tête mais la bonne façon de faire serait plutôt :
C'est étrange parce que je viens de faire un test et je n'ai pas ton message d'erreur.
En fait j'ai fait ça de tête mais la bonne façon de faire serait plutôt :
Sub AjoutTaille() Dim db As DAO.Database Dim rs As DAO.Recordset Dim query As String Set db = CurrentDb query = ""select * from TAILLE where code_taille = ' " & Me.new_taille & " '") Set rs = db.OpenRecordset(query) If rs.RecordCount <> 0 Then MsgBox "Cet enregistrement existe déjà !!!" Else With rs .AddNew .Fields("code_taille") = Me.new_taille .Update End With MsgBox ("La taille à été ajouter avec succès") End If rs.Close db.Close Set rs = Nothing Set db = Nothing End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Toujours le même message d'erreur. Peut etre un problème au niveau de ma table mais ca me paratrer bizzarre.
Voici ma table :
table TAILLE avec un champ qui est code_taille qui est clé primaire et son type est de type texte.
Voici ma table :
table TAILLE avec un champ qui est code_taille qui est clé primaire et son type est de type texte.
Essaye ça :
if not isnull(dlookup("code_taille","taille","code_taille = " & me.new_taille)) then
msgbox "taile existante
else
'ajout ligne
end if
Par contre, ton recordset tel que décrit actuellement ne te permettra pas de faire une insertion de ligne. Il faut le traiter en type table.
Set rs = CurrentDb.OpenRecordset("TAILLE", dbOpenTable)
if not isnull(dlookup("code_taille","taille","code_taille = " & me.new_taille)) then
msgbox "taile existante
else
'ajout ligne
end if
Par contre, ton recordset tel que décrit actuellement ne te permettra pas de faire une insertion de ligne. Il faut le traiter en type table.
Set rs = CurrentDb.OpenRecordset("TAILLE", dbOpenTable)
Effectivement ça marche maintenant, c'est vrai que j'ai du mal a enquoter tous :/
Juste une dernière petite indication si tu sais (je demande pas la solution) :
Dans mon formulaire d'ajout, j'ai aussi une listbox avec la table table. et j'aimerai que quand j'appuis sur le bouton Ajouter (que je viens de faire grace a votre aide), la listBox ce mette a jour. Car je suis obligé une fois une taille ajouter, de quitter puis de rouvrir pour voir la mise a jour.
Faut il faire une requête update ou autre ?
Juste une dernière petite indication si tu sais (je demande pas la solution) :
Dans mon formulaire d'ajout, j'ai aussi une listbox avec la table table. et j'aimerai que quand j'appuis sur le bouton Ajouter (que je viens de faire grace a votre aide), la listBox ce mette a jour. Car je suis obligé une fois une taille ajouter, de quitter puis de rouvrir pour voir la mise a jour.
Faut il faire une requête update ou autre ?