Adodb : probléme de portage

Signaler
Messages postés
27
Date d'inscription
vendredi 1 octobre 2004
Statut
Membre
Dernière intervention
23 avril 2012
-
Messages postés
27
Date d'inscription
vendredi 1 octobre 2004
Statut
Membre
Dernière intervention
23 avril 2012
-
Bonjour,
J'ai développé une appli qui utilise adodb pour se connecter à une base ms ACCESS ou Mysql
Sur mon poste de développement c'est nickel mais sur d'autres machines la connexion se plante .

************* Texte de l'exception **************
System.InvalidCastException: Impossible d'effectuer un cast d'un objet COM de type 'ADODB.ConnectionClass' en type d'interface 'ADODB.Connection'. Cette opération a échoué, car l'appel QueryInterface sur le composant COM pour l'interface avec l'IID '{00001550-0000-0010-8000-00AA006D2EA4}' a échoué en raison de l'erreur suivante : Cette interface n'est pas prise en charge (Exception de HRESULT : 0x80004002 (E_NOINTERFACE)).

Merci d'avance de vous pencher sur mon problème.

7 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Salut

Tu postes ta question dans la catégorie VB6
Tu parles de ADODB
mais le message d'erreur ressemble à une erreur VB.Net

Alors ... Utiliserais-tu ADODB sous .Net ?
Ce ne serait pas judicieux --> ADO.NET
et la catégorie de la question serait incorrecte.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
27
Date d'inscription
vendredi 1 octobre 2004
Statut
Membre
Dernière intervention
23 avril 2012

Salut Jack.
Je pense que je suis comme le bourgeois gentilhomme qui fait de la prose sans le savoir. Je dois faire du .net à l’insu de mon plein gré.
Ci dessous le bout de code.
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        'Ouverture de la connexion en fonction du type demandé Accesss ou Mysql
        Dim oCon As ADODB.Connection   ' Connexion vers la BD
        Dim Rs As ADODB.Recordset
        Dim strConnect As String ' Chaîne de connexion vers la BD
        Dim strSql As String
        Dim Couleur As Color
        Dim Choix_style As Integer
        Dim Num_terrain As String
        Dim pos_terrain As Integer

        Dim j As Integer
        Dim k As Integer
        ' Initialisation de la chaîne de connexion
        If Not Config.RdoBtn_aucun.Checked Then
            ' Initialisation de la chaîne de connexion
            If Config.RdoBtn_Mysql.Checked Then
                strConnect strConnect "DRIVER={MySQL ODBC 5.1 Driver};SERVER=localhost;DATABASE=Tournoi;PORT=3306;UID=root;PASSWORD=;OPTION=3;STMT=;"
 
            Else
                strConnect = "DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" & Application.StartupPath & "\tournoi.mdb"
            End If
            ' Initialisation de la connection
            oCon = New ADODB.Connection
            oCon.Open(strConnect)

            ' Initialisation d'une requête
            strSql = "select Num_match as num, terrain, etat from echeancier where etat<>0"

            Rs = New ADODB.Recordset
            Rs.Open(strSql, oCon)
            While Not Rs.EOF
               .......
               .......
               Rs.MoveNext()
            End While
            Rs.Close()
            
          
            'Fermeture de la connexion
            oCon.Close()
            Rs = Nothing
            oCon = Nothing


Au préalable j'ai ajouté dans les références du projet Microsoft ActiveX Data Objects 2.8 Library.
Voilà quelques précisions.
Merci
@+
Fabien
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Merci, ça change des références habituelles.

Je te confirme que c'est bien du .Net, mais le souci c'est que tu utilises un objet COM, ADODB, qui appartient à ... l'ancien monde.
Ce qui t'oblige à joindre le fichier de référence avec ton projet, au cas où celui-ci n'existerait pas sur la machine cible (ce qui me parait rare, mais bon).
Il vaudrait mieux migrer vers les outils de même génération que le langage, ADO.Net
Je n'en ai pas l'expérience, mais il me semble évident que les deux objets (COM et .Net) doivent se ressembler, donc modif mineure de ton programme.
Il y a une source qui semble proposer de comparer ces deux versions. Tu la trouveras en première place dans une recherche de "ado.net" parmi les sources en .Net uniquement.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
D'ailleurs, la seconde source issue de cette même recherche est peut-être plus pratique pour la compréhension des différences (car il semble y en avoir de belles)
Messages postés
27
Date d'inscription
vendredi 1 octobre 2004
Statut
Membre
Dernière intervention
23 avril 2012

Merci Jack pour ces pistes.
Pour l'instant je vais laisser ça en standby.
Je suis parti sur une autre solution : un projet utilisait la base pour mettre à jour des données qu'un autre affichait. J'ai donc fusionné mes deux projets en un. Du coup la mise à jour de l'un par l'autre s'effectue directement en 'jouant' avec les données.
L'utilisation d'une base en externe reviendra à l'ordre du jour car je compte pouvoir accéder aux données mise à jour via des pages PHP/MySQL
Merci encore de ta patience.
@+
Fabien
Messages postés
124
Date d'inscription
mercredi 23 novembre 2005
Statut
Membre
Dernière intervention
19 septembre 2013
3
Bonjour,

Que ce soit du .Net ou VBA, le driver pour se connecter à une base de données est le même. Si ca marche sur ta machine et pas sur d'autres, c'est que le driver de connection MySql n'est pas installé ou mauvaise version.

Yann
Messages postés
27
Date d'inscription
vendredi 1 octobre 2004
Statut
Membre
Dernière intervention
23 avril 2012

Bonjour Yann,
J'y ai bien pensé mais les drivers sont bien les mêmes.
Merci tout de même de cette piste.
@+
Fabien