Nous avons une application héritée plutôt malheureuse au travail, écrite à l'origine en VB6, elle est antérieure d'au moins 5 ans à tous les membres de notre département informatique. Nous avons un développeur sous contrat pour la maintenance continue et lorsqu'il le peut, il réécrit des sections en code .NET (je ne suis pas sûr de ses techniques ici, il s'agit d'un travail parallèle à son travail régulier en tant qu'ingénieur IBM) ; l'application fonctionne bien (telle qu'elle est) sous Windows XP. Nous n'avons que quelques machines Windows 7, principalement pour les tests, et cette application semble se heurter à un mur. Des choses comme l'arrière-plan qui ne se charge pas et des erreurs SQL. Cela fonctionne même sous administrateur.
L'exécution d'une trace SQL à partir du panneau de contrôle ODBC montre plusieurs choses intéressantes. Au départ, la connexion à la base de données est établie avec succès et une requête est exécutée pour déterminer si la version utilisée est correcte. Cette requête fonctionne correctement.
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
Il semble ensuite interrompre sa connexion et ne peut pas trouver la connexion ODBC malgré le fait qu'il se connecte à la même base de données. D'après la trace, il semble qu'il configure la connexion, puis qu'il lance SQLFreeStmt pour se déconnecter et se fermer, puis lorsqu'il est dans l'application et qu'il essaie de faire son travail, il n'y a pas de connexion.
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>
Ensuite, cela se produit lorsque j'essaie de faire quelque chose qui tire des données.
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)
Presque toutes les recherches que j'ai effectuées sur cette question ont abouti à des problèmes de programmation où la chaîne de connexion pose problème. La seule chose qui diffère dans ce scénario particulier est Windows 7, je sais que la chaîne de connexion est correcte puisqu'elle fonctionne sur les machines XP. Les composants VB sont censés être encore fonctionnels sous Win7. Mon ordinateur fonctionne sous Win7 32 bits et mon VP sous Win7 64 bits et les deux ont le même problème, ce qui permet d'écarter cette hypothèse.
J'ai déjà essayé de réinstaller SQL Native Client et le runtime VB ainsi que l'application en question. J'espère pouvoir trouver une solution et ne pas avoir à recourir à la VM XP.
Edit - Après de nombreuses tentatives, nous avons été contraints d'opter pour la solution de la VM XP. Soit les composants VB ne sont pas aussi compatibles qu'ils le prétendent, soit cette ancienne application fait quelque chose de bizarre.