2011-04-28 3 views
20

Class does not support Automation or does not support expected interfaceSi je compile une application VB6 sur win7, les erreurs de ADODB.Connection avec « classe ne prend pas en charge Automation ou ne prend pas en charge l'interface attendue »

Je Compilé un code VB6 sur mon Win7 machine x64 et le résultat .exe ne fonctionnera pas correctement sur une autre machine.

code VB6 est juste un nouveau fichier .exe de modèle avec un bouton, une référence à « Microsoft ActiveX Data Objects 2.6 Library » et le code suivant dans l'événement de presse bouton:

Dim db 
Set db = New ADODB.Connection 

Il fonctionne correctement ma machine, mais pas d'autres (même d'autres machines Win7 x64) (Mise à jour: J'ai trouvé DEUX autres utilisateurs là où il fonctionne et Jeff Atwood !, mais la plupart des machines ont le même problème)

J'ai vérifié l'écran des références sur les deux machines pour voir si une référence a échoué (elle ne compilerait pas alors et elle compile bien). Tout semble légitime. Sur les machines 64 bits, les références vont dans SysWow64 au lieu de system32.

J'ai même compilé avec succès sur une machine Vista 64 bits et l'ai fait fonctionner correctement. C'est seulement la compilation sur Windows 7 et ensuite sur n'importe quelle autre machine où l'erreur se produit.

Voici les résultats de l'exécution CompChecker sur ma boîte:

comp checker results on box

info Registre: ADODB.Connection a GUID HKEY_CLASSES_ROOT \ CLSID {} ​​00000514-0000-0010-8000-00AA006D2EA4

InprocServer32 est% CommonProgramFiles% \ System \ ado \ msado15.dll

+4

J'ai exactement le même problème. Cela a l'habitude de travailler, doit être une mise à jour MS ou quelque chose! –

+2

@Mark Donner cette question à un upvote alors! –

+0

Il est étrange que cela fonctionne sur Vista et non sur Windows 7 .. avez-vous essayé de le faire avec UAC désactivé, ou avec explicite «exécuter en tant qu'administrateur»? –

Répondre

19

Ceci est un ordinateur Windows 7 SP1 problème. Voir http://support.microsoft.com/kb/2517589 pour les solutions de contournement.

Il y a d'autres façons de contourner cela:

  1. Utilisez ADO 2.8 à la place (de Windows 7 RTM disque)
  2. Utilisez la liaison tardive (probablement le plus facile)
  3. Il y a un million de choses que les gens essaient sur ce fil très long et en colère: Breaking change in MDAC ADODB COM components in Windows 7 Service Pack 1

En outre, une autre chose, msado15.dll n'est pas pris en charge sur x64 Win 7 comme indiqué ici: http://support.microsoft.com/kb/983246. C'est une grande page, il suffit de chercher msado15.dll.

+0

Génial. J'ai utilisé la solution backcompat.tlb pour compiler sur ma machine Windows 7 car il y avait trop de références de liaison précoces dans le code pour les changer en liaison tardive. –

+0

@ Michael Pryor: Super d'entendre cela a été résolu! Maintenant, que diriez-vous de cette belle prime? :) –

+1

Vous ne pouvez pas encore le faire. Avoir à attendre une heure (doit être 24 heures depuis le début de la prime). Si j'oublie, vous l'obtiendrez automatiquement par le système. –

1

Vérifiez la version des composants MDAC dans les deux machines en utilisant this tool

Vérifiez également que vous utilisez la même base de données SQL Server version (devinettes), depuis que je l'ai remarqué que SQL Server 2008 x64 fonctionne differents que les versions précédentes de traitement des connexions (lors de l'utilisation VB6)

+0

J'ai ajouté quelques détails à la question. –

Questions connexes