O modo XP acabou sendo a única solução que funcionaria.
Temos uma aplicação de legado bastante infeliz no trabalho, escrita originalmente em VB6, anterior a qualquer pessoa em nosso departamento de TI por pelo menos 5 anos. Nós temos um desenvolvedor contratado para manutenção contínua e onde ele pode reescrever seções em código .NET (não tenho certeza sobre suas técnicas aqui, este é um trabalho paralelo para seu trabalho regular como engenheiro da IBM) o aplicativo funciona bem (como é) no Windows XP. Temos apenas algumas máquinas com o Windows 7, principalmente para testes, e este aplicativo parece estar em uma parede. Coisas como o fundo não carregando e erros de SQL. Isso é mesmo executado sob o administrador.
A execução de um rastreamento SQL a partir do painel de controle do ODBC mostra várias coisas interessantes. Ele faz uma conexão com o banco de dados com êxito inicialmente, onde executa uma consulta para determinar se está executando a versão correta. Esta consulta funciona bem.
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
Em seguida, parece soltar sua conexão e não é possível encontrar a conexão ODBC, apesar do fato de sua conexão com o mesmo banco de dados. A partir do rastreio parece que ele configura a conexão, em seguida, ele começa a disparar SQLFreeStmt para desvincular e fechar, em seguida, quando no aplicativo e tenta fazer a sua coisa, não há conexão.
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>
Então isso acontece quando tento fazer algo que extrai dados
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)
Quase toda a minha pesquisa sobre esse problema surge com problemas de programação em que a cadeia de conexão tem um problema. A única coisa que é diferente neste cenário em particular é o Windows 7, eu sei que a string de conexão é boa, pois funciona nas máquinas XP. Os componentes do VB devem continuar funcionais no Win7. Meu computador está rodando o win7 de 32 bits e meu VP está rodando o Win7 de 64 bits e ambos têm o mesmo problema, então isso pode ser descartado.
Eu já tentei reinstalar o SQL Native Client e o tempo de execução do VB, bem como o aplicativo em questão. Espero que eu possa encontrar uma solução e não ter que recorrer ao uso da VM XP.
Editar - Depois de muitas tentativas, fomos forçados a usar a XP VM como a solução aqui. Ou os componentes do VB não são tão compatíveis quanto alegam, ou este aplicativo antigo está fazendo algo engraçado.
Se for um aplicativo executado na área de trabalho (ou seja, não como um serviço), você tentou configurar o aplicativo para ser executado no modo de compatibilidade? Eu tive um problema semelhante com um programa VB6 (mesma função para ler o registro chamado de duas partes diferentes do programa, um funciona, o outro não, mas a partir do VB6 IDE ambos funcionam) e apenas botão direito do mouse e ter o teste Win7 para compatibilidade e escolha o modo XP SP2 curou o problema.
Tags windows-7 sql-server vb6