[SAS/ACCESS] The specified DSN contains an architecture mismatch between the Driver and Application
Vous venez d'installer SAS/ACCESS interface to ODBC et, patatra, lorsque vous tentez d’accéder à vos données, vous vous trouvez confronté à l'erreur suivante :
Impossible alors de vous connecter à votre base de données et de lire le contenu de vos tables.
Alors, avant d'en être à s'arracher les cheveux, j'ai la solution !
Pourquoi cette erreur ?
Pour faire simple, cet erreur se produit lorsque vous utilisez une version de SAS dans une architecture différente du pilote (le driver) ODBC ( 32 bits contre 64 bits )
Petite explication de texte pour les débutant : Quand on parle d’une version 32 bits ou 64 bits, cela fait référence au processeur de votre ordinateur. Les ordinateurs récents sont équipés d’un système 64 bits. A contrario, la majorité des anciens ordinateurs sont en 32 bits.
Toutefois, le passage des systèmes 32 bits à 64 bits n’est pas encore totalement terminé. Les deux versions cohabitent et les programmes que vous installez ont donc la possibilité de se charger en 32 ou 64 bits.
Si le système est en 32 bits, vous n’aurez pas de question à vous poser. Tout les programmes, y compris SAS, sont installés en 32 bits et vous ne pouvez pas obtenir le message d'erreur que nous étudions ici.
Par contre, si vous utilisez, par exemple, SAS/ACCESS Interface to ODBC en version 64 bits, vous ne pouvez pas utiliser des pilotes ODBC 32 bits.
L'erreur peut donc avoir plusieurs origines :
- Vous avez SAS en version 32 bits et tentez d'utiliser un pilote 64 bits
- Vous avez SAS en version 64 bits et tentez d'utiliser un pilote 32 bits.
Quelle solution ?
- Vous avez un SAS en version 32 bits ? Pointez vers un DSN 32 bits.
- Vous avez un SAS en version 64 bits ? Pointez vers un DSN 64 bits.
Simple, vous ne trouvez pas ?
Oui, mais non...
Effectivement, cette résolution enfantine sur le papier est un peu plus complexe que ça dans la pratique.
En effet, sur les système Windows 64 bits, Microsoft inclut une version 32 bits et une version 64 bits de l'outil administrateur de sources de données Microsoft ODBC.
Aussi :
- Pour gérer une source odbc 64bits, il faut lancer odbcad32.exe situé dans Windows/System32 (comme son nom ne l'indique pas).
- Pour gérer une source odbc 32 bits, il faut lancer odbcad32.exe situé dans Windows/SysWOW64 .
Pour la petite histoire, SysWOW64 est le dossier de mappage des binaires 32bits sur un système 64bits : WoW64 veut dire Windows 32-bit On Windows 64-bit)
Veillez donc a bien installer votre pilote et définir votre DSN dans le bon gestionnaire ODBC.
Exemples :
C'est-à-dire celui correspondant à l'architecture de votre programme SAS.
Voici un exemple de configuration DSN pour une connexion à SQL Server, en 64 bits.
J'ai créer un source de données utilisateur que j'ai appelé SQLSERVER64 et qui utiliser le pilote ODBC SQL Server Native Client 11.0.
Pour créer cette source de données, j'ai utilisé le gestionnaire ODBC odbcad32.exe dans C:\Windows\System32.
C'est cette source de données que je dois utiliser dans SAS 64 bits.
Si j'utiliser un SAS 32bits, je dois utiliser le gestionnaire ODBC 32 bits, accessible dans C:\Windows\SysWOW64 :
C'est cette source de données que je dois utiliser dans SAS 32 bits.
Un dernier piège...
Microsoft a ajouté un petit piège qu'il est bon de connaitre afin d'éviter de se prendre les pieds dans le tapis...
En effet, l'administrateur ODBC affiche les deux versions 32 bits et 64bits des sources de données utilisateur DSN (KB 942976) . Il est alors facile de se mélanger les pinceaux !
Dans ce dernier exemple, j'ai crée une source DSN 64 bits mais elle apparaît à la fois dans mon gestionnaire ODBC 32 bits et à la fois dans mon gestionnaire ODBC 64 bits, sous le même nom. On a connu plus simple pour s'y retrouver et cela peut poser des problèmes 32/64 bits.
Conclusion
Un seul mot d'ordre ! Rigueur. Prenez le temps d'étudier votre architecture et configurer de façon explicite vos DSN.
Dernière détail important, dans mes exemples, j'ai montré les problème existants avec des sources de données utilisateur. La comportement est un peu différent avec les sources de données système. SAS/ACCESS to ODBC utilise la fonction SQLDataSources pour obtenir les informations de connexion. la fonctionne retourne toutes les versions des sources de données de l'utilisateur, quelle que soit l'architecture de l'application. la fonction SQLDataSources appelée dans un SAS 64 bits renvoie exclusivement la DSN système des pilotes 64 bits, mais renvoie, comme nous l'avons vu, les sources de données utilisateur 32 bits et 64 bits. C'est d'ailleurs pour cette raison que j'ajoute 32 ou 64 à la fin des noms de mes DSN 32 bits ou 64 bits. Tout est question d'organisation !
Si vous souhaitez allé plus loin et approfondir votre connaissance de SAS/ACCESS ou de ODBC, je vous invite à lire mon article sur le sujet, disponible sur le site du support SAS.
1 |
The specified DSN contains an architecture mismatch between the Driver and Application |
Je suis tombé sur cette page vraiment par hasard car mon problème n’était pas avec ce logiciel SAS mais j’obtenais le même message d’erreur avec mon connexion ODBC. J’ai pu résoudre facilement, graçe à vos explications claires. Merci Nicolas