L'événement FetchComplete ne se déclenche pas

Résolu
ordifatche Messages postés 5 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 20 septembre 2009 - 20 sept. 2009 à 06:52
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.

5 réponses

cs_Ayr Messages postés 221 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 13 décembre 2009 2
20 sept. 2009 à 10:59
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+
3
ordifatche Messages postés 5 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 20 septembre 2009
20 sept. 2009 à 11:15
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!!!
0
ordifatche Messages postés 5 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 20 septembre 2009
20 sept. 2009 à 15:35
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...
0
ordifatche Messages postés 5 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 20 septembre 2009
20 sept. 2009 à 17:37
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.
0

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

Posez votre question
cs_Ayr Messages postés 221 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 13 décembre 2009 2
20 sept. 2009 à 17:49
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
0
Rejoignez-nous