L'événement FetchComplete ne se déclenche pas [Résolu]

Messages postés
5
Date d'inscription
jeudi 2 octobre 2008
Statut
Membre
Dernière intervention
20 septembre 2009
- - Dernière réponse : cs_Ayr
Messages postés
221
Date d'inscription
mercredi 9 avril 2003
Statut
Membre
Dernière intervention
13 décembre 2009
- 20 sept. 2009 à 17:49
Salut à tous!!!
Je développe en ce moment une application Access et j'ai du mal à capter l'événement FetchComplete d'un objet ADO Recordset. En fait, j'essai d'actualiser des variables dans un formulaire avec les valeurs des champs du Recordset (lequel n'extrait en réalité qu'un seul enregistrement) chaque fois que l'enregistrement est actualisé après une Intérrogation de la BD via les méthodes Open (appelée à l'ouverture du formulaire) et Requery. Le code d'actualisation des variables est contenu dans le gestionnaire de l'événement FetchComplete associé à l'objet Recordset.
En claire, à l'ouverture de l'objet Recordset ainsi qu' à chaque appel de sa méthode Requery, mes variables devraient s'actualiser dynamiquement sans que je m'en soucie. Mais il n'en est Rien! L'événement FetchComplete ne se déclenche jamais. Ci-après l'essentiel du code.

Option Compare Database
Option Explicit

'Déclarations de nivau formulaire
Private WithEvents rstExemptions As ADODB.Recordset
Dim SocialExemption As Single, lTaxeExemption As Single, tTaxeExemption As Single
Dim strSalaryID As String

'--------------------------------------------------------------------------

Private Sub Form_Load()
    
    On error goto ErrorHandler
    
    'Catches employee net salary value
    sngNetSalary = Forms![PERIOD PAY].Form![Net Salary]
    
    'Crée une référence à une nouvelle instance de l'objet ADODB.Recodset 
    Set rstExemptions = New ADODB.Recordset
    rstExemptions.CursorLocation = adUseClient
    
    'Les deux lignes suivantes étaient sensées régler le problème 
    'selon le support en ligne Microsoft 
    rstExemptions.Properties("Initial Fetch Size") = 1
    rstExemptions.Properties("Background Fetch Size") = 1

    'Extracts the record of the current period exemptions
    rstExemptions.Open "SELECT MEC, MEIL, MEIT FROM QUERY_EXEMPTIONS WHERE SalaryID = " & strSalaryID, _
    CurrentProject.Connection, adOpenStatic, adLockReadOnly, adAsyncExecute

    'Dodges error handling routine
    exit sub

ErrorHandler:

    'Notifies the user
    ErrorMsg.Initialize
    ErrorMsg.Show

    'Clear
    If rstExemptions.State = adStateOpen Then rstExemptions.Close
    Set rstExemption = Nothing

    'Closes the form
    Docmd.Close 
      
End Sub

'---------------------------------------------------------------------------

Private Sub rstExemptions_FetchComplete(ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
    
    Dim strMsg As String
    
    'Selon que adStatus vaut
    Select Case adStatus
'1
        Case adStatusOK
    'Actualise les variables de niveau formulaire
            SocialExemption = rstExemptions!MEC
            lTaxeExemption = rstExemptions!MEIL
            tTaxeExemption = rstExemptions!MEIT
        '2 
        Case adStatusErrorsOccurred
    'Informe l'utilisateur de l'occurence de l'erreur
            strMsg = "Error #" & pError.Number & " : " & pError.Description & vbCr _
            & "Taxation bases could not be displayed dynamically as you update exemptions value"
            Debug.Print strMsg
    End Select

    'Evite toute notification ultérieure jusqu'à la prochaine extraction
    adStatus = adStatusUnwantedEvent

End Sub


Bon! Je sais, il y a plus simple comme solution. Seulement c'est la première fois que j'implémente la gestion d'évenements liés à un objet activeX et j'aimerais vraiment sonder cette possibilité de programmation.

Merci d'avance à tous ceux qui daigneront m'aider.
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
221
Date d'inscription
mercredi 9 avril 2003
Statut
Membre
Dernière intervention
13 décembre 2009
3
Merci
Salut,

Selon Microsoft, pour que les évènements FetchComplete et FetchProgress se déclenchent il faut utiliser l'option adAsyncFetch ou adAsyncFetchNonBlocking à l'ouverture du recodset. De plus, il considèrent que ces évènements ne fonctionnent correctement qu'à partir de MDAC 2.5.

Mais pourquoi ne pas utiliser d'autres évènements ? Regarde sur ce Tuto (Comprendre les Recordset ADO) au chapitre évènements.

Voilà l'article de référence de Microsoft : How To Use the ADO FetchProgress and FetchComplete Events

A+

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 197 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Ayr
Messages postés
5
Date d'inscription
jeudi 2 octobre 2008
Statut
Membre
Dernière intervention
20 septembre 2009
0
Merci
C'est très aimable de ta part Ayr. Je vient d'essayer l'option adAsyncFetch sans succès. Cela dit tes conseils suggestions m'aideront d'une façon ou d'une autre. je file de ce pas lire le tuto.
encore merci!!!
Commenter la réponse de ordifatche
Messages postés
5
Date d'inscription
jeudi 2 octobre 2008
Statut
Membre
Dernière intervention
20 septembre 2009
0
Merci
J'ai lu le tuto et j'ai finalement trouvé que l'événement RecordsetChangeComplete est le correspond mieux à mes attentes. l'événement est belle et bien déclenché lors de l'appel de la méthode requery. Selement cette dernière a l'effet indésirable de fermer le Recordset du coup je n'ai plus access à la valeur des champs. C'est vraiment barbant!!!!!!!!! j'ai besoin d'aide...
Commenter la réponse de ordifatche
Messages postés
5
Date d'inscription
jeudi 2 octobre 2008
Statut
Membre
Dernière intervention
20 septembre 2009
0
Merci
Ayr je te réhitère mon remerciement. "Mais pourquoi ne pas utiliser d'autres évènements" c'était la bonne suggestion. grace au tuto et après quelques tentatives manquées avec l'événement RecordsetChangeComplete j'ai enfin été pleinement satisfait avec l'événement MoveComplete.
Commenter la réponse de ordifatche
Messages postés
221
Date d'inscription
mercredi 9 avril 2003
Statut
Membre
Dernière intervention
13 décembre 2009
0
Merci
Ha ben ça fait plaisir de voir quelqu'un qui remonte les manches

Content que ça ai marché

Bon courage pour la suite de ton code
Commenter la réponse de cs_Ayr