Help and Support

Numéro d'article: 269495 - Dernière mise à jour: jeudi 11 mai 2006 - Version: 3.0

PROBLÈME : Message d'erreur « Une opération OLE-DB en plusieurs étapes a généré des erreurs » lors de l'ouverture d'une connexion ADO

Important Cet article contient des informations sur la modification du Registre. Avant de modifier le Registre, pensez à le sauvegarder et assurez-vous que vous savez le restaurer en cas de problème. Pour plus d'informations sur la sauvegarde, la restauration et la modification du Registre, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft.
256986  (http://support.microsoft.com/kb/256986/ ) Description du Registre de Microsoft Windows

Sommaire

Agrandir tout | Réduire tout

Symptômes

Lorsque vous essayez d'ouvrir une connexion ADO (ActiveX Data Objects), le message d'erreur suivant peut s'afficher :
Erreur d'exécution '-2147217887 (80040e21) :'

Une opération OLE-DB en plusieurs étapes a généré des erreurs. Vérifiez chaque valeur d'état OLE-DB disponible. Aucun travail n'a été effectué.

Cause

Cette erreur peut être dues à l'une des deux causes suivantes :
  • Dans le Registre, sous la clé du CLSID d'un fournisseur OLE DB, il peut y avoir une entrée nommée OLEDB_SERVICES. Si le fournisseur OLE DB utilisé pour établir la connexion ADO n'a pas l'entrée OLEDB_SERVICES et qu'ADO tente d'installer une propriété non prise en charge par le fournisseur, l'erreur se produit. Pour plus d'informations sur cette entrée de Registre, reportez-vous à la section « Résolution ».
  • Si l'entrée OLEDB_SERVICES existe mais qu'il y a un problème au niveau de la chaîne de connexion ADO, l'erreur se produit.
Si l'entrée de Registre OLEDB_SERVICES est absente, l'appel ayant pour but de définir une propriété est effectué directement au fournisseur. Si le fournisseur ne prend pas en charge la propriété, l'appel OLE DB SetProperties effectué par ADO échoue. Il s'agit d'une défaillance fatale si la propriété est requise pour établir une connexion. Si la propriété a été incluse explicitement dans la chaîne de connexion, elle est probablement requise.

Si le paramètre de propriété est facultatif, la défaillance n'est pas fatale. C'est le cas lorsque vous vous connectez sans définir explicitement la propriété dans la chaîne de connexion. Dans ce cas, ADO définit la propriété à True mais la marque comme facultative.

Résolution

Pour contourner ce problème, appliquez l'une des méthodes suivantes :
  • N'utilisez pas le mot clé « Persist Security Info » dans votre chaîne de connexion ADO.
  • Ajoutez l'entrée de Registre OLEDB_SERVICES comme suit :

    Remarque Créez la valeur OLEDB_SERVICES uniquement dans les clés de Registre des fournisseurs qui prennent en charge les regroupements COM. Le fournisseur OLE DB Exchange ne prend pas en charge les regroupements COM et lorsque vous créez ces valeurs, le message d'erreur suivant s'affiche :
    0x80040E22
    Une valeur différente de zéro et contrôlant IUnknown a été spécifiée et l'interface demandée n'était pas IUnknown ou le fournisseur ne prend pas en charge les regroupements COM.

    Avertissement Toute utilisation incorrecte de l'Éditeur du Registre peut générer des problèmes sérieux, pouvant vous obliger à réinstaller votre système d'exploitation. Microsoft ne peut garantir que les problèmes résultant d'une mauvaise utilisation de l'Éditeur du Registre puissent être résolus. Vous assumez l'ensemble des risques liés à l'utilisation de cet outil.
    1. Démarrez l'Éditeur du Registre.
    2. Dans le Registre sous HKEY_CLASSES_ROOT\CLSID, recherchez le CLSID du fournisseur OLE DB. Par exemple, la clé de Registre suivante est pour le fournisseur Microsoft OLE DB pour SQL Server (SQLOLEDB) :
      HKEY_CLASSES_ROOT\CLSID\{0C7FF16C-38E3-11d0-97AB-00C04FC2AD98}
      Cliquez sur le CLSID puis, dans le menu Edition, cliquez sur Ajouter une valeur et ajoutez la valeur de Registre suivante :
      Nom de la valeur : OLEDB_SERVICES
      Type de données : REG_DWORD
      Valeur : 0xFFFFFFFF
      Remarque Pour trouver le CLSID du fournisseur que vous utilisez, recherchez le ProgID du fournisseur (SQLOLEDB, par exemple) dans le Registre sous HKEY_LOCAL_MACHINE\SOFTWARE\Classes\. Sous le ProgID figurera une clé nommée CLSID.
  • Si ces conditions sont remplies et que vous recevez encore le message d'erreur, vérifiez si votre chaîne de connexion ne contient pas d'autres erreurs.

Plus d'informations

Procédure pour reproduire le problème

Collez le code suivant dans un projet EXE standard Microsoft Visual Basic, définissez une référence de projet à Microsoft ActiveX Data Objects, puis exécutez le projet. L'erreur se produit si vous utilisez le fournisseur DTSFlatFile ou tout fournisseur OLE DB qui ne prend pas en charge l'une des propriétés de la chaîne de connexion, telle que « Persist Security Info ».
Private Sub Command1_Click()

Dim cn As New Connection

cn.Open "Provider=DTSFlatFile;Persist Security Info=True;" & _
            "Data Source=Mysql;Mode=Read;File Format=0;File Type=1;" & _
            "Skip Rows=0;First Row Column Name=False;Number of Column=0;" & _
            "Max characters per delimited column=255;" '<------ Error Occurs Here
            
End Sub
				

Références

Pour plus d'informations sur cette erreur, cliquez sur les numéros ci-dessous pour afficher les articles correspondants dans la Base de connaissances Microsoft.
228935  (http://support.microsoft.com/kb/228935/ ) CORRECTIF : Variables de chaînes non initialisées, valeurs de chaîne vides, fournisseur Jet et des erreurs se sont produites
253157  (http://support.microsoft.com/kb/253157/ ) BOGUE : Le champ d'identité reste en lecture seule après l'exécution de l'instruction SET IDENTITY_INSERT ON

Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft ActiveX Data Objects 2.0
  • Microsoft ActiveX Data Objects 2.1
  • Microsoft ActiveX Data Objects 2.5
  • Microsoft ActiveX Data Objects 2.6
  • Microsoft ActiveX Data Objects 2.7
Mots-clés : 
kbprb kbprovider KB269495
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.
Retired KB ArticleExclusion de responsabilité concernant les contenus obsolètes dans la Base de connaissances
Cet article concerne des produits pour lesquels Microsoft n'offre plus de support. Il est par conséquent fourni « en l'état » et ne sera plus mis à jour.

Traductions disponibles