Proble code VBA recordset command

mhautboi Messages postés 1 Date d'inscription jeudi 30 avril 2009 Statut Membre Dernière intervention 15 mai 2009 - 15 mai 2009 à 15:30
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 15 mai 2009 à 20:44
Bonjour,
J'ai un problème sur ce code :

Private Sub B_Terminer_Click()
     MsgBox ("OK")
     Dim cmd As ADODB.Command
     Dim rs As ADODB.Recordset
     Set cmd = New ADODB.Command
     Set rs = New ADODB.Recordset
     cmd.ActiveConnection = CurrentProject.Connection




     cmd.CommandText = "Select Code_série, Initiales from participer"
     cmd.Execute
     rs.Open cmd





     Do While rs.EOF = False
         MsgBox (rs![CODE_SÉRIE] & Me.Txt_CODE_SÉRIE.Value & rs![INITIALES])
         If rs![CODE_SÉRIE] = Me.Txt_CODE_SÉRIE.Value Then
             MsgBox ("code trouve")
         Else
             MsgBox ("code pas trouve")
         End If
         If rs![INITIALES] = Me.Txt_INITIALES Then
             MsgBox ("init TRouve")
             Exit Do
         Else
             MsgBox ("Pas trouve")
         End If
         rs.MoveNext
     Loop





     rs.Close
     If trouve = False Then
         DoCmd.RunSQL " INSERT INTO PARTICIPER VALUES( " & 
Me.Txt_CODE_SÉRIE & ",""" & Me.INITIALES & """)"
     End If





     Call BoutonOK(Me.Txt_CODE_ELECT, "cette electrophorèse")
End Sub





Je m'explique, mon code sert a ajouter un tuple s'il n'existe pas deja. Je teste donc si les initiales et le code sont dans la table Participer. Ici, mon code s'est transformé en test pour voir où est l'erreur, j'affiche donc si il a trouve ou non initiales et code. Le problème ici c'est qu'il ne reconnaît pas de code_série identique. Je ne vois pas où est le problème. Les syntaxes des champs sont bonnes  puisque pour cette ligne  affiche 11JJ
MsgBox (rs![CODE_SÉRIE] & Me.Txt_CODE_SÉRIE.Value & rs![INITIALES])

Pour ce tuple, il me dit qu'il n'a pas trouvé le code.


Voyez vous un problème que je n'aurais pas détecter ?


Merci,
Marion

1 réponse

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
15 mai 2009 à 20:44
Salut
Catégorie modifiée VB.Net --> VBA

Compliquée ton affaire.
Si tu dois chercher si une donnée existe dans ta DB, pourquoi ne pas le demander directement à ta requête plutôt que te charger toute la table et de relire chaque ligne pour les tester une à une ?
Mais il faut savoir si les Code_Série et Initailes que tu cherches doivent se trouver dans le même enregistrement.
Si oui : Une requète avec un Where
Si non : Deux requètes avec un Where

Rappel des syntaxes SQL :
- Si tu utilises des caractères spéciaux (accents, _, espaces ...) dans les noms des champs, encadre les avec des crochets [ et ]
- Si le champ est de type :
   - texte : Encadrer la valeur par des ' (pas des ")
   - numérique : pas d'encadrement
   - dates : encadrement par #

Dans le test après le rs.Close, tu testes une variable 'trouve" : Mais tu ne la mets nulle part à True ou False
--> Dans les options de VBA, coche la case "Déclaration obligatoire des variables", ça t'évitera ce genre d'erreur
Cette option ajoute un "Option Explicit" en haut de chaque nouvelle page de code.

Attention aussi à bien respecter les min/maj des noms des champs, un coup en minuscule, un coup en maj : Ca risque de ne pas marcher.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Rejoignez-nous