Comment afficher le resultat d'un recordSet

vbaddict44 Messages postés 8 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 27 avril 2010 - 14 avril 2010 à 16:59
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 avril 2010 à 12:55
Bonjour je doit faire un petit programme en vba en utlisant des tables de ma base de donnée Access. Je voudrait savoir comment afficher le resultat d'un RecordSet mais il y a un erreur qui me dit Aucun enregistrement en cour !!!

voila mon code:


Dim base As DAO.Database
Dim espèce As String
Dim resultat As DAO.Recordset
Dim res As String
Set base = CurrentDb()
Set resultat = base.OpenRecordset("SELECT [tab especes complète].[nomVernaculaire] FROM [tab especes complète] WHERE ((([tab especes complète].code)=espèce));")

resultat.MoveFirst
While Not resultat.EOF
With resultat
res = !nomVernaculaire
MsgBox res
End With
resultat.MoveNext

Wend

resultat.Close
A voir également:

10 réponses

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
14 avril 2010 à 20:22
Salut
Sur quelle ligne apparait cette erreur ?
Cela aurait permis de te répondre peut-être plus rapidement ...

Reprenons avec les couleurs, indentations et autre mise en page pour rendre le code lisible :
    Dim base As DAO.Database
    Dim espèce As String
    Dim resultat As DAO.Recordset
    Dim res As String
    
    Set base = CurrentDb()
    Set resultat = base.OpenRecordset("SELECT [nomVernaculaire] " & _
                                      "  FROM [tab especes complète] " & _
                                      " WHERE code = espèce;")
    resultat.MoveFirst
    While Not resultat.EOF
        With resultat
            res = !nomVernaculaire
            MsgBox res
        End With
        resultat.MoveNext
    Wend
    resultat.Close
On y voit plus clair.
Avant de demander au RecordSet de se pacer en tête de liste, mieux vaudrait s'assurer qu'il y a bien des enregistrements à l'intérieur :
    With resultat
        If .RecordCount > 0 Then
            .MoveFirst
            While Not .EOF
                res = !nomVernaculaire  ' pas sûr que autorisé
                res = .Fields("nomVernaculaire")  ' est plus standard
                MsgBox res
                .MoveNext
            Wend
        Else
            MsgBox "Pas d'enregistrement trouvé"
        End If
    End With
Tu noteras le déplacement de With et le nouveau If
Ca, c'était pour la programmaticalité.
Côté syntaxe, il y a un problème avec ta requète.
Je l'ai largement allégé de ces niveaux de parenthèses inutiles et lourdes, ainsi qu tu nom de la table qu'il n'est pas nécessaire de répéter puisque tu ne travailles que sur une seule table.
"Where code = espèce"
Ta variable 'espèce' appartient au monde VB, pas au monde SQL : Il faut donc insérer dans la chaine de la requète le contenu de la variable, pas son nom :
" WHERE code = espèce;")

Dernière chose : DAO est obsolète, fini, dépassé, fichu, ... : Mieux vaudrait utiliser ADO

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

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
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
14 avril 2010 à 20:24
Désolé, le dernier copier/coller c'est mal passé
" WHERE code = " & espèce & ";")
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
14 avril 2010 à 22:28
@jack : Tu as raison sur le fait que DAO est une catastrophe en lui-même mais c'est la seule bonne façon de manipuler la base courante en VBA Access.
---
VB.NET is good ... VB6 is better
0
vbaddict44 Messages postés 8 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 27 avril 2010
15 avril 2010 à 09:40
merci pour ton aide.

mais j'ai toujours le message pas d'enregistrement. Mais cette fois-ci je passe dans la boucle :
MsgBox "Pas d'enregistrement trouvé"

comment se fait-il qu'il ne trouve pas d'enregistrement.
je pourrais au pire des cas avoir la version ADO.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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 avril 2010 à 09:45
Bah c'est que le contenu de ta variable 'espèce' n'est pas un chiffre existant dans le champ 'code' de ta base.

"je pourrais au pire des cas avoir la version ADO" Que veux-tu dire ?
0
vbaddict44 Messages postés 8 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 27 avril 2010
15 avril 2010 à 09:53
le contenu de ma variable espèce est bien dans le champ code de ma base.
Pas de solution ??
0
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 avril 2010 à 09:56
Et à quoi ressemble t-il ?
Chiffre ou texte ?
Si c'est un texte (*), il faut encadrer la valeur avec des ' :
" WHERE code = '" & espèce & "';")

(*) information répétée au moins une dizaine de fois par semaine sur le forum ET apparait dans n'importe quelle source parlant de base de données
0
vbaddict44 Messages postés 8 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 27 avril 2010
15 avril 2010 à 10:57
c'est un texte de valeur: BRE. j'ai déjà fait cette correction.
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
15 avril 2010 à 11:16
Gaffe à l'injection SQL :
" WHERE code = '" & Replace(espèce,"'","''") & "';") 

---
VB.NET is good ... VB6 is better
0
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 avril 2010 à 12:55
Bah ça devrait marcher
Si tu fournis pas de détail, difficile de te dire ce qui cloche.
Recolle-nous la partie de code incriminée (avec coloration = 3ème icone à droite)
0
Rejoignez-nous