VBA recordset

Fermé
stikmou - 4 févr. 2011 à 08:31
 stikmou - 4 févr. 2011 à 15:11
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 :

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

un petit bump pour essayer de m'aider :(
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
4 févr. 2011 à 10:11
Bonjour,

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)
0
blux Messages postés 26546 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 24 décembre 2024 3 319
4 févr. 2011 à 10:14
Salut,

plutôt que de faire un recordset pour compter le nombre d'occurrences, fais un dlookup, ça va beaucoup plus vite...
0
En faites je suis en stage, et on me demande de le faire avec un recordset pour voir les différente manière. Mais je t'avouerai que je ne comprends pas pourquoi on me demande ça si tu dit qu'avec un dlookup ca va beaucoup plus vite.
0
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 :
If rs.RecordCount <> 0 Then
        MsgBox "Cet enregistrement existe déjà !!!"
    Else

Quand je fait un debog, ca me surligne le .Update
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
4 févr. 2011 à 10:44
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 :

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
0

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.
0
blux Messages postés 26546 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 24 décembre 2024 3 319
4 févr. 2011 à 10:58
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)
0
Opération annulé en signalant la ligne du if notisnull :(
0
blux Messages postés 26546 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 24 décembre 2024 3 319
4 févr. 2011 à 11:24
j'ai pas fait attention, mais si code_taille est alphanum, il faut l'enquoter :

if not isnull(dlookup("code_taille","taille","code_taille = '" & me.new_taille & "'"))
0
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 ?
0
blux Messages postés 26546 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 24 décembre 2024 3 319
4 févr. 2011 à 11:41
listbox.requery ???
0