VBA recordset

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 :

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

  1. stikmou
     
    un petit bump pour essayer de m'aider :(
    0
  2. Polux31 Messages postés 7219 Statut Membre 1 204
     
    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
  3. blux Messages postés 5035 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Salut,

    plutôt que de faire un recordset pour compter le nombre d'occurrences, fais un dlookup, ça va beaucoup plus vite...
    0
    1. stikmou
       
      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
  4. stikmou
     
    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
    1. Polux31 Messages postés 7219 Statut Membre 1 204
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. stikmou
     
    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
    1. blux Messages postés 5035 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      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
    2. stikmou
       
      Opération annulé en signalant la ligne du if notisnull :(
      0
    3. blux Messages postés 5035 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      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
    4. stikmou
       
      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
    5. blux Messages postés 5035 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      listbox.requery ???
      0