IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

test défaillant d'un recordset [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 360
    Points : 241
    Points
    241
    Par défaut test défaillant d'un recordset
    Bonjour,

    Une fois encore je fais appel à vos lumières

    J'ai un soucis avec une petite fonction qui marchait très bien il y a quelques mois.
    Et puis là, impossible de créer la table nécessaire pour l'impression de mes étiquettes

    Le problème se situe au niveau du test conditionnel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If rstFiltre.RecordCount = 0 Then ...
    Mon recordset filtré a beau avoir 48 enregistrements (je part d'un rst contenant 621 enregistrements), ce qui est confirmé par mes msgbox, mon "IF..." n'en fait qu'à sa tête et considère toujours qu'il n'y en a aucun !!
    J'ai aussi essayé de tester EOF et BOF pour savoir si le recordset filtré contenait quelque chose mais ça ne fonctionne pas mieux...
    J'ai aussi essayé de transférer toute la base dans une nouvelle et vierge. Mais ça ne change rien non plus.

    Avez-vous une idée de la raison de ce bug? Ou une manière de le contourner?

    En vous remerciant d'avance, voici le code de la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    Private Function tblToPrintRemplissage() As Boolean
    'take a clone of the subform's recordset
    Dim rst As Recordset
    Dim rstFiltre As Recordset
    Dim rstTblToPrint As Recordset
     
        'on ouvre un recordset sur la table à remplir pour la vider si elle ne l'est pas
        Set rstTblToPrint = CurrentDb.OpenRecordset("tblToPrint", dbOpenDynaset)
        If rstTblToPrint.EOF Then
        Else
            rstTblToPrint.MoveFirst
            Do Until rstTblToPrint.EOF
                rstTblToPrint.Delete
                rstTblToPrint.MoveNext
            Loop
        End If
     
        'on clone le recordset du sous-formulaire = tous les enregistrements affichés, un filtre peut (ou non) avoir été appliqué
        Set rst = Me.[sfrqEspece].Form.Recordset.Clone()
        rst.MoveLast
        rst.MoveFirst
    MsgBox rst.RecordCount   'juste pour le test
        'On filtre les enregsitrements qui sont sélectionnés
        rst.Filter = "[ToPrint] = True"
        Set rstFiltre = rst.OpenRecordset
        rstFiltre.MoveLast
        rstFiltre.MoveFirst
    MsgBox rstFiltre.RecordCount  'juste pour le test
     
        'On va remplir la table tblToPrint avec les données adéquates après filtrage
        If rstFiltre.RecordCount = 0 Then
            tblToPrintRemplissage = False
            MsgBox "Aucune sélection n'a été réalisée"
            GoTo EditDossierSelected_Click
        Else
            tblToPrintRemplissage = True
     
            'parcours tous les enregistrements
            Do While Not rstFiltre.EOF
                Select Case Left(rstFiltre.Fields("Réf").Value, 2)
                    Case "CH"
                        ' Créer un enregistrement dans la table
                        rstTblToPrint.AddNew
                        ' Alimenter les champs
                        rstTblToPrint("Txt1") = rstFiltre.Fields("Nom commun FR")
                        rstTblToPrint("Txt2") = rstFiltre.Fields("Origine")
                        rstTblToPrint("Txt3") = rstFiltre.Fields("Commentaires")
                        rstTblToPrint("Txt4") = rstFiltre.Fields("Réf")
                        ' Valider
                        rstTblToPrint.Update
     
                    Case Else
                        ' Créer un enregistrement dans la table
                        rstTblToPrint.AddNew
                        ' Alimenter les champs
                        rstTblToPrint("Txt1") = rstFiltre.Fields("Ordre") & " : " & rstFiltre.Fields("Famille") & " : " & rstFiltre.Fields("SousFamille") & " : " & rstFiltre.Fields("Genre")
                        rstTblToPrint("Txt2") = rstFiltre.Fields("Espèce")
                        rstTblToPrint("Txt3") = rstFiltre.Fields("Race")
                        rstTblToPrint("Txt4") = rstFiltre.Fields("Réf")
                        ' Valider
                        rstTblToPrint.Update
     
                End Select
     
                rstFiltre.MoveNext
            Loop
        End If
     
     
    'vide les variables objets
    rst.Close
    Set rst = Nothing
    rstFiltre.Close
    Set rstFiltre = Nothing
    rstTblToPrint.Close
    Set rstTblToPrint = Nothing
     
    Exit_EditDossierSelected_Click:
        Exit Function
     
    EditDossierSelected_Click:
        MsgBox "Veuillez sélectionner au moins un enregistrement !", vbOKOnly + vbInformation
        Resume Exit_EditDossierSelected_Click
     
    End Function

  2. #2
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 917
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 917
    Points : 4 821
    Points
    4 821
    Par défaut
    Set rst = Me.[sfrqEspece].Form.Recordset.Clone()
    Ca ne serait pas plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Set rst = Me.[sfrqEspece].Form.RecordsetClone()

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 360
    Points : 241
    Points
    241
    Par défaut
    Bonjour Micniv!

    En effet! Il y a un point qui s'est glissé là où il ne fallait pas! Je ne l'avais pas vu!!

    Le pire dans l'histoire c'est que dans mes anciennes versions qui fonctionnaient, le point y était aussi!
    Est-ce que Access corrigeait lui-même l'erreur sans me la signaler (pourtant j'ai bien mis "Option Explicit" en début de module)? ... bizarre...

    Un grand merci pour ton regard d'aigle, ta célérité du guépard et ta précision d'Ichneumon!!
    Belle journée à toi!

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 810
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 810
    Points : 14 894
    Points
    14 894
    Par défaut
    bonjour,
    Citation Envoyé par Dermochelys Voir le message
    Bonjour Micniv!

    En effet! Il y a un point qui s'est glissé là où il ne fallait pas! Je ne l'avais pas vu!!

    Le pire dans l'histoire c'est que dans mes anciennes versions qui fonctionnaient, le point y était aussi!
    oui, car la méthode Clone existe bel et bien ...
    personnellement, je ne l'ai jamais utilisé, étant habitué à RecordsetClone
    pour info, une question a été posée sur le site au sujet de l'utilisation de la méthode (Clone) et de la propriété (RecordSetClone) ici

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 360
    Points : 241
    Points
    241
    Par défaut
    Bonjour Tee_grandbois,

    Je te remercie pour cette info additionnelle. Comme je n'ai pas a jouer avec les bookmarks, je vais me limiter à RecordsetClone()

    A bientôt!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. test sur recordset
    Par choubak dans le forum VBA Access
    Réponses: 6
    Dernier message: 06/06/2007, 08h56
  2. [DAO]Teste si un RecordSet est nul
    Par lord abortion dans le forum VBA Access
    Réponses: 3
    Dernier message: 17/04/2007, 14h21
  3. probleme de teste sur recordset
    Par julio_097 dans le forum ASP
    Réponses: 3
    Dernier message: 18/07/2005, 11h02
  4. test sur un recordset
    Par georgeabitbol dans le forum ASP
    Réponses: 2
    Dernier message: 15/07/2004, 14h39
  5. Test d'éxistence avec un RecordSet
    Par matt63 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 21/04/2004, 12h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo