2011-04-28 7 views
20

Class does not support Automation or does not support expected interfaceSi puedo compilar una aplicación de Visual Basic 6 en Win7, errores ADODB.Connection con "Clase no admite automatización o no admite interfaz esperada"

I recopilados algún código de VB6 en mi máquina x64 Win7 y el resultado .exe no se ejecutará correctamente en ninguna otra máquina.

código de Visual Basic 6 es sólo un nuevo archivo de plantilla .exe con un botón, una referencia a "Microsoft ActiveX Data Objects 2.6 Library" y el código siguiente en el evento pulse el botón:

Dim db 
Set db = New ADODB.Connection 

que se ejecuta correctamente en mi máquina, pero no otras (incluso otras máquinas Win7 x64) (Actualización: encontré otros DOS usuarios donde se ejecuta y uno de ellos es Jeff Atwood !, pero la mayoría de las máquinas tienen el mismo problema)

Revisé la pantalla de referencias en ambas máquinas para ver si falló una referencia (no compilaría y compilará bien). Todo parece legítimo En las máquinas de 64 bits, las referencias entran en SysWow64 en lugar de system32.

Incluso he compilado esto con éxito en una máquina con Vista de 64 bits y se ejecutó correctamente. Es solo la compilación en Windows 7 y luego se ejecuta en cualquier otra máquina donde ocurre el error.

Estos son los resultados de la ejecución CompChecker en mi caja: información

comp checker results on box

Registro: ADODB.Connection tiene GUID HKEY_CLASSES_ROOT \ CLSID {} ​​00000514-0000-0010-8000-00AA006D2EA4

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

+4

Tengo exactamente el mismo problema. ¡Esto solía funcionar, debe ser una actualización de MS o algo así! –

+2

@Mark ¡Dale a esta pregunta un voto positivo! –

+0

Es extraño que funcione en Vista y no en Windows 7. ¿Intentó ejecutarlo con UAC deshabilitado o explícitamente 'ejecutar como administrador'? –

Respuesta

19

Este es un Windows 7 SP1 problema. Ver http://support.microsoft.com/kb/2517589 para soluciones.

Hay otras maneras de evitar esto:

  1. Uso ADO 2.8 en vez (de Windows 7 RTM disco)
  2. Uso de enlace tardío (probablemente el más fácil)
  3. Hay un millón de cosas que la gente está tratando en este muy largo y enojado hilo: Breaking change in MDAC ADODB COM components in Windows 7 Service Pack 1

Además, otra cosa, msado15.dll no es compatible con x64 Win 7 como se detalla aquí: http://support.microsoft.com/kb/983246. Es una página grande, solo busca en msado15.dll.

+0

Impresionante. Usé la solución backcompat.tlb para compilar en mi máquina con Windows 7 porque había demasiadas referencias de enlace anticipadas en el código para cambiarlas a encuadernación tardía. –

+0

@Michael Pryor: ¡Genial para escuchar esto se resolvió! ¿Y qué hay de esa hermosa recompensa? :) –

+1

No puedo hacerlo todavía. Tienes que esperar una hora (tiene que ser 24 horas desde que comienzas la recompensa). Si lo olvido, lo obtendrá de todos modos automáticamente por el sistema. –

1

Mira la versión de los componentes de MDAC en ambas máquinas utilizando this tool

También asegúrese de que está utilizando el mismo SQL Server (adivinanzas) base de datos de la versión, ya que me he dado cuenta de que SQL Server 2008 x64 funciona differentes que manejar conexiones versiones anteriores (cuando se utiliza Visual Basic 6)

+0

Agregué más detalles a la pregunta. –

Cuestiones relacionadas