ordifatche
Messages postés5Date d'inscriptionjeudi 2 octobre 2008StatutMembreDernière intervention20 septembre 2009
-
20 sept. 2009 à 06:52
cs_Ayr
Messages postés221Date d'inscriptionmercredi 9 avril 2003StatutMembreDernière intervention13 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.
cs_Ayr
Messages postés221Date d'inscriptionmercredi 9 avril 2003StatutMembreDernière intervention13 décembre 20092 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.
ordifatche
Messages postés5Date d'inscriptionjeudi 2 octobre 2008StatutMembreDernière intervention20 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!!!
ordifatche
Messages postés5Date d'inscriptionjeudi 2 octobre 2008StatutMembreDernière intervention20 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...
ordifatche
Messages postés5Date d'inscriptionjeudi 2 octobre 2008StatutMembreDernière intervention20 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.
Vous n’avez pas trouvé la réponse que vous recherchez ?