Comment faire fonctionner ODBC avec Windows 64 bits ?

De ORSWiki
Aller à : navigation, rechercher

ODBC n'est pas configuré directement sur les postes Windows 64 bits, on obtient par exemple l'erreur suivante avec MS-Access :


"Erreur lors de l'ouverture de la connexion 'Microsoft Access Driver (*.mdb)'"

"[Microsoft][Gestionnaire de pilotes ODBC] Source de données introuvable et nom de pilote non spécifié"

Erreur ADO n° -2147467259 (80004005)

Erreur Jet : IM002


Par contre, il existe une émulation 32 bits dans Windows 64 bits qui permet de faire tourner les logiciels 32 bits, sous-environnement dans lequel ODBC est cette fois bien configuré comme avant, cette émulation s'appelle WoW64 : Par défaut, les logiciels .Net s'exécutent en mode 32 bits ou bien 64 bits, selon le système sur lequel on les lance. Pour forcer une application .Net à s'exécuter en mode 32 bits, l'une des solutions les plus simples, si vous avez le code source de l'application, est d'indiquer une option de compilation dans Visual Studio :

 <PlatformTarget>AnyCPU</PlatformTarget>
 ->
 <PlatformTarget>x86</PlatformTarget>

de façon à indiquer que le programme va utiliser le sous-environnement complet en 32 bits (base de registre 32, Odbc, contrôles ActiveX 32 bits, ...)

Cette option de compilation n'est pas disponible dans l'interface de la version Express (gratuite) de Visual Studio, mais en comparant avant et après le changement de l'option dans une version complète de Visual Studio, on retrouve sans difficulté l'option, et il suffit de la rajouter à la main dans le fichier .vbproj (une pour le PropertyGroup Debug, et une autre pour le Release) et de recompiler. Les options de PlatformTarget sont : AnyCPU, x86, x64 et Itanium. AnyCPU est l'option par défaut : s'il n'y a pas d'option PlatformTarget, alors c'est AnyCPU par défaut, option qui signifie que l'application doit utiliser aussi bien la plateforme 32 ou 64 bits, selon la nature du système d'exploitation utilisé, ce qui ne convient pas dans notre cas, à cause de ODBC non configuré en 64 bits.

Explication de l'option de Visual Studio : [1] "If the project is set to x86, this means the project is intended to run only as a 32-bit process. A 64-bit process will be unable to call into an assembly set as X86. Reasons to set your project as x86 include dependencies upon native DLLs that are only available in 32-bit or making native calls assuming 32-bit. Applications and assemblies marked for x86 can still run on 64-bit Windows. However they run under WOW64. Visual Studio itself runs under this emulation mode since it is a 32-bit application."


Doc WoW :

en.wikipedia.org/wiki/WoW64

en.wikipedia.org/wiki/Windows_on_Windows


Voir aussi : OWC et Windows 64 bits