1 votes

Application VB6 héritée sous Win7 Erreur SQL

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.

1voto

Dan2.0 Points 149

S'il s'agit d'une application qui s'exécute à partir du bureau (c'est-à-dire pas en tant que service), avez-vous essayé de configurer l'application pour qu'elle s'exécute en mode de compatibilité ? J'ai eu un problème similaire avec un programme VB6 (la même fonction de lecture du registre appelée depuis deux parties différentes du programme, l'une fonctionne, l'autre non, mais depuis l'IDE VB6 les deux fonctionnent) et un simple clic droit pour que Win7 teste la compatibilité et choisisse le mode XP SP2 a résolu le problème.

0voto

Shial Points 1017

Le mode XP s'est avéré être la seule solution possible.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X