Auteur de questions
Problème ODBC sous WIN 7 pour une longue requête

Question
-
Bonjour,
J'ai une application que je fais évoluer depuis plusieurs années et qui utilise une connexion ODBC pour se connecter à une base SQL serveur 2000.
Depuis peu, certains poste du parc sont passés sous Win7 Entreprise 64 bits. Sur ces postes, je constate que l'une de mes requêtes (qui prend dans les 30 secondes à s’exécuter) n'est jamais retournée par le serveur. Quand je regarde coté serveur, je vois le proc qui monte au moment de la requête, puis redescend mais mon application reste sur le sablier et la connexion est toujours active sur le serveur.
Si je lance mon application en mode de compatibilité XP SP3 pas de problèmes.
Si je recompile l'application en définissant #define WINVER 0x0601, pas de problèmes non plus.Mon problème, c'est que je ne veux pas avoir deux versions à compiler.
J'ai vu qu'il pouvait y avoir un problème similaire lorsque que l'on attaque une base SQL 2000 et qu'il y avait un patch (que j'ai installé coté serveur) mais j'ai refait les mêmes tests sur une base SQL 2008R2 et j'ai les mêmes problèmes.
Auriez-vous une idée pour que mon application fonctionne aussi bien sous Win7 que XP ?
Toutes les réponses
-
Bonjour,
De ce que je comprends les valeurs de _WIN32_WINNT et WINVER indiquent la version minimale requis pour les fichiers Windows header, donc #define WINVER 0x0501 (Windows Server 2003, Windows XP) devrait résoudre votre problème. Autres liens utiles :
http://msdn.microsoft.com/en-us/library/windows/desktop/dd744775(v=vs.85).aspx
http://blogs.msdn.com/b/oldnewthing/archive/2007/04/11/2079137.aspx
http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/8fba9cbf-9d37-475a-b836-d8fb6b06d03f
Bonne journée,
Cipri
Ciprian DUDUIALA, MSFT  
•Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.
- Marqué comme réponse Ciprian Duduiala vendredi 25 mai 2012 12:59
- Non marqué comme réponse GENNESSEAUX Jocelyn vendredi 27 juillet 2012 06:08
-
Bonjour,
Je connais bien l’intérêt de la déclaration des macros WINVER, _WIN32_WINNT, ...
Aujourd'hui, je compile déjà avec les valeurs suivantes car une bonne partie de mon parc est sous XP et j’obtiens donc des problème de connexions avec la base pour les postes Win7 64:
#ifndef WINVER // Spécifie que la plateforme minimale requise est Windows XP. #define WINVER 0x0501 // _WIN32_WINNT_WINXP //#define WINVER 0x0601 // _WIN32_WINNT_WIN7 #endif #ifndef _WIN32_WINNT // Spécifie que la plateforme minimale requise est Windows XP. #define _WIN32_WINNT 0x0501 // _WIN32_WINNT_WINXP //#define _WIN32_WINNT 0x0601 // _WIN32_WINNT_WIN7 #endif #ifndef _WIN32_WINDOWS // Spécifie que la plateforme minimale requise est Windows XP. #define _WIN32_WINDOWS 0x0501 // _WIN32_WINNT_WINXP //#define _WIN32_WINDOWS 0x0601 // _WIN32_WINNT_WIN7 #endif #ifndef NTDDI_VERSION // Spécifie que la plateforme minimale requise est Windows XP SP3. #define NTDDI_VERSION 0x05010300 // NTDDI_WINXPSP3 //#define NTDDI_VERSION 0x06010000 // NTDDI_WIN7 #endif #ifndef _WIN32_IE // Spécifie que la plateforme minimale requise est Internet Explorer 7.0. #define _WIN32_IE 0x0700 // _WIN32_IE_IE70 #endif
Par contre, dès que je compile avec WINVER 0x0601, alors je n'ai plus de problèmes sur mes postes Win7 64.
Mais je ne peux déployer cette version sur mon parc à cause des XP.
Que faire ??? Une idée ??? Une piste ??? je suis preneur.
-
Piste : vieux composant 32bits foireux sous Win7 64bits, la compilation "WINVER 0x0601" dirigeant vers un composant plus récent.
Pour bien corriger un bug, il faut bien connaître le bug.
Si le plantage est systématique, cela ne devrait pas être trop dur de localiser le problème et voir comment le "WINVER 0x0601" change la donne.
Il se peut que le composant qui marche sous Win7 existe aussi sous WinXp (installation optionnel par exemple).
Paul Bacelar, Ex - MVP VC++