Tenemos en funcionamiento una aplicación heredada bastante desafortunada, escrita originalmente en VB6 y anterior a cualquier miembro de nuestro departamento de TI en al menos 5 años. Tenemos un desarrollador contratado para el mantenimiento continuo y donde puede reescribir secciones en código .NET (no estoy seguro de sus técnicas aquí, este es un trabajo secundario para su trabajo habitual como ingeniero de IBM) la aplicación funciona bien (como es) en Windows XP. Sólo tenemos un par de máquinas con Windows 7 principalmente para realizar pruebas y esta aplicación parece chocar contra una pared. Cosas como que el fondo no se carga y errores de SQL. Esto incluso se ejecuta bajo administrador.
La ejecución de un seguimiento de SQL desde el panel de control de ODBC muestra varias cosas interesantes. Inicialmente establece una conexión exitosa con la base de datos donde ejecuta una consulta para determinar si está ejecutando la versión correcta. Esta consulta funciona bien.
558-1af0 ENTER SQLExecDirectW
HSTMT 0x020D7548
WCHAR * 0x04C8F0F0 [ 115] "SELECT count(*) c FROM tblSoftwareVersion WHERE fldSoftwareVersion = '123456' AND fldSoftwareName = 'Application.VB'"
SDWORD 115
BMS 558-1af0 EXIT SQLExecDirectW with return code 1 (SQL_SUCCESS_WITH_INFO)
HSTMT 0x020D7548
WCHAR * 0x04C8F0F0 [ 115] "SELECT count(*) c FROM tblSoftwareVersion WHERE fldSoftwareVersion = '123456' AND fldSoftwareName = 'Application.VB'"
SDWORD 115
Luego parece interrumpir su conexión y no puede encontrar la conexión ODBC a pesar de que se está conectando a la misma base de datos. Desde el seguimiento, parece que configura la conexión, luego comienza a activar SQLFreeStmt para desvincularse y cerrarse y luego, cuando está en la aplicación e intenta hacer lo suyo, no hay conexión.
558-1af0 ENTER SQLFreeStmt
HSTMT 0x020D7548
UWORD 2 <SQL_UNBIND>
BMS 558-1af0 EXIT SQLFreeStmt with return code 0 (SQL_SUCCESS)
HSTMT 0x020D7548
UWORD 2 <SQL_UNBIND>
Entonces esto sucede cuando intento hacer algo que extraiga datos.
558-1af0 ENTER SQLDriverConnectW
HDBC 0x020DDA00
HWND 0x00000000
WCHAR * 0x73EF8634 [ -3] "******\ 0"
SWORD -3
WCHAR * 0x73EF8634
SWORD -3
SWORD * 0x00000000
UWORD 0 <SQL_DRIVER_NOPROMPT>
BMS 558-1af0 EXIT SQLDriverConnectW with return code -1 (SQL_ERROR)
HDBC 0x020DDA00
HWND 0x00000000
WCHAR * 0x73EF8634 [ -3] "******\ 0"
SWORD -3
WCHAR * 0x73EF8634
SWORD -3
SWORD * 0x00000000
UWORD 0 <SQL_DRIVER_NOPROMPT>
DIAG [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0)
Casi todas mis búsquedas sobre este tema arrojan problemas de programación en los que la cadena de conexión tiene un problema. Sin embargo, lo único que es diferente en este escenario particular es Windows 7. Sé que la cadena de conexión está bien ya que funciona en las máquinas XP. Se supone que los componentes de VB siguen funcionando en Win7. Mi computadora ejecuta Win7 de 32 bits y mi vicepresidente ejecuta Win7 de 64 bits y ambos tienen el mismo problema, por lo que se puede descartar.
Ya intenté reinstalar SQL Native Client y el tiempo de ejecución de VB, así como la aplicación en cuestión. Ojalá pueda encontrar una solución y no tener que recurrir al uso de XP VM.
Editar: Bueno, después de muchos intentos, nos hemos visto obligados a optar por XP VM como solución aquí. O los componentes de VB no son tan compatibles como dicen o esta antigua aplicación está haciendo algo raro.
Respuesta1
Si es una aplicación que se ejecuta desde el escritorio (es decir, no como un servicio), ¿intentó configurar la aplicación para que se ejecute en modo de compatibilidad? Tuve un problema similar con un programa VB6 (la misma función para leer el registro se llama desde dos partes diferentes del programa, una funciona, la otra no, pero desde el IDE de VB6 ambas funcionan) y simplemente hice clic derecho y probé Win7. para compatibilidad y elija el modo XP SP2 solucionó el problema.
Respuesta2
El modo XP terminó siendo la única solución que funcionaría.