CORRECTIF : Une violation d'accès apparaît lors de la fermeture du Recordset ADO dans une application multi-thread

Traductions disponibles Traductions disponibles
Numéro d'article: 272373 - Voir les produits auxquels s'applique cet article
Ancien nº de publication de cet article : F272373
Agrandir tout | Réduire tout

Symptômes

Lors de l'exécution d'un code ADO (ActiveX Data Objects) multi-thread sous hautes contraintes sur un ordinateur à plusieurs processeurs, une violation d'accès peut survenir à la fermeture d'un Recordset ADO. L'examen de la pile des appels au moment de la violation d'accès (avec les symboles de débogage appropriés installés) révèle que le dernier appel ADO sur la pile est un appel de la fonction ADO interne msado15!CCollectionArray__Delete.

Résolution

Ce problème a été résolu dans les derniers Service packs de Windows 2000, MDAC 2.5 et MDAC 2.6.
  • Pour résoudre ce problème, procurez-vous le dernier Service Pack de Windows 2000. Pour plus d'informations, consultez l'article suivant dans la Base de connaissances Microsoft :
    260910 Procédures d'obtention du dernier Service Pack de Windows 2000
  • Pour résoudre ce problème, procurez-vous le dernier Service pack de Microsoft Data Access Components 2.5. Pour plus d'informations, consultez l'article suivant dans la Base de connaissances Microsoft :
    293312 INFO : Obtention du dernier Service Pack de MDAC 2.5
  • Pour résoudre ce problème, procurez-vous le dernier Service pack de Microsoft Data Access Components 2.6. Pour plus d'informations, consultez l'article suivant dans la Base de connaissances Microsoft :
    300635 INFO : Obtention du dernier Service Pack de MDAC 2.6

Contournement

Évitez de fermer un Recordset ADO et son objet Connexion ADO parent exactement au même moment sur deux threads différentes, ou appliquez ce correctif.

Statut

Microsoft a confirmé l'existence de ce problème dans les produits Microsoft répertoriés au début de cet article. Ce problème a été corrigé pour la première fois dans Microsoft Data Access Components (MDAC) 2.5 Service Pack 2, MDAC 2.6 Service Pack 1 et Microsoft Windows 2000 Service Pack 2.

Plus d'informations

Pour reproduire le problème, un Recordset ADO et son objet Connexion ADO parent doivent être fermés ou diffusés sur deux threads différentes exactement au même moment. Notez que ce problème a été reproduit correctement seulement sur un ordinateur à plusieurs processeurs.

Le problème d'origine a été découvert à l'aide des classes Java ADO WFC (Windows Foundation Classes) dans une application COM+ sous hautes contraintes avec ADO paramétré en mode libre de thread. La machine virtuelle Microsoft diffère la sortie des objets COM jusquà ce que le collecteur de données incorrectes soit activé. Le collecteur de données incorrectes réalise la diffusion de l'objet COM sur une thread d'arrière-plan. Si vous fermez une Connexion ADO WFC, cela place le pointeur de l'interface COM de la Connexion ADO dans une liste de pointeurs, dont le collecteur de données incorrectes effectuera le nettoyage. Si le code de l'application principale ferme alors un Recordset ADO exactement au même moment où la thread d'arrière-plan du collecteur de données incorrectes diffuse le pointeur de l'interface de sa Connexion ADO parente, une violation d'accès peut avoir lieu.

Propriétés

Numéro d'article: 272373 - Dernière mise à jour: lundi 17 avril 2006 - Version: 4.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.5 Service Pack 1
  • Microsoft Data Access Components 2.6
Mots-clés : 
kbbug kbfix kbmdac270 kbmdac250sp2fix kbqfe kbmdac260sp1fix kbmdac kbgrpdsvcdb kbgrpdsmdac kbatm kbhotfixserver KB272373
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com