web-dev-qa-db-fra.com

Erreur Pyodbc Nom de la source de données introuvable et paradoxe spécifié par un pilote par défaut

J'essaie d'utiliser pyobdc pour lire les données d'une base de données paradoxe et j'obtiens toujours l'erreur suivante lorsque je tente de me connecter à la base de données:

pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')

J'ai essayé de créer de nouveaux liens DNS pour la base de données, mais cela n'a pas aidé à rien.

Les liens de mon système ressemblent à ceci:

This is what the system DNS looks like

Mon code est:

import os
import sys
import time
import pyodbc

LOCATION = "c:\Users\Marcello\Desktop\DATA\ScorMonitor.db"

cnxn = pyodbc.connect(r"Driver={{Microsoft Paradox Driver (*.db )}};Fil=Paradox 5.X;DefaultDir={0};Dbq={0}; CollatingSequence=ASCII;")
cursor = cnxn.cursor()
cursor.execute("select last, first from test")
row = cursor.fetchone()
print row
14
Suit Boy Apps

Deux réflexions sur ce qu'il faut vérifier:

1) Votre chaîne de connexion est incorrecte. Il existe un moyen d'obtenir une bonne chaîne de connexion connue directement à partir du programme administrateur ODBC (extrait de http://www.visokio.com/kb/db/dsn-less-odbc ). Ces instructions supposent que vous utilisez une MDB, mais le même processus fonctionnera pour un fichier paradoxe.

  • Sur un ordinateur client typique, ouvrez le Panneau de configuration -> Outils d’administration -> Sources de données.
  • Sélectionnez l'onglet Fichier DSN et cliquez sur Ajouter.
  • Sélectionnez le pilote approprié ("Pilote Microsoft Access (* .mdb)", par exemple), puis cliquez sur Suivant.
  • Cliquez sur Parcourir et choisissez l'emplacement où vous souhaitez enregistrer le fichier .dsn (il s'agit d'un fichier temporaire que vous allez supprimer ultérieurement).
  • Cliquez sur Suivant puis sur Terminer.
  • La boîte de dialogue de configuration ODBC spécifique au fournisseur s'affichera. Par exemple, avec Microsoft Access, il vous suffira peut-être de cliquer sur Sélectionner et de rechercher un fichier .mdb existant avant de cliquer sur OK.
  • Accédez à l'emplacement du fichier .dsn et ouvrez-le à l'aide du Bloc-notes.

Dans le fichier DSN, vous pouvez voir quelque chose de similaire à:

[ODBC]
DRIVER=Microsoft Access Driver (*.mdb)
UID=admin
UserCommitSync=Yes
Threads=3
SafeTransactions=0
PageTimeout=5
MaxScanRows=8
MaxBufferSize=2048
FIL=MS Access
DriverId=25
DefaultDir=C:\
DBQ=C:\db1.mdb

Pour convertir ce qui précède en chaîne de connexion complète:

  1. Omettre la première ligne [ODBC] 
  2. Placez des accolades autour de toutes les valeurs contenant des espaces 
  3. Placez toutes les paires nom = valeur sur une seule ligne, séparées par des points-virgules.

Cela vous donne la chaîne de connexion complète. Dans cet exemple, la chaîne devient:

DRIVER={Microsoft Access Driver (*.mdb)};UID=admin;UserCommitSync=Yes;Threads=3;SafeTransactions=0;PageTimeout=5;axScanRows=8;MaxBufferSize=2048;FIL={MS Access};DriverId=25;DefaultDir=C:\;DBQ=C:\db1.mdb

2) incompatibilité 32/64 bits. J'ai eu des problèmes lors du mélange de python 32 bits avec des pilotes 64 bits, ou inversement. Vous voudrez peut-être vérifier votre interpréteur Python et votre pilote de base de données.

20
Chad Kennedy

Le raccourci pour configurer les sources de données ODBC peut pointer vers les sources de données 32 bits au lieu de 64 bits.

Accédez au panneau de configuration -> Outils d'administration -> Sélectionnez les sources de données (ODBC) -> puis cliquez avec le bouton droit de la souris sur ce fichier -> sélectionnez Propriétés -> dans l'onglet de raccourci -> modifiez le chemin d'accès de %windir%\System32\odbcad32.exe à 

%windir%\SysWOW64\odbcad32.exe

1
neogeomat

Merci pour la question, j'avais un problème similaire, et cette question ainsi que les réponses m'aidaient à trouver ce dont j'avais besoin… .. Le problème pour moi a fini par être une discordance entre Python 64 bits et 32 ​​bits ODBC Pilote sous Windows 10 (comme l'a suggéré Chad Kennedy). J'exécute une édition de Fall Creators entièrement mise à jour et Microsoft Office Pro 2016 est installé. Le programme d'installation de MS Office utilise toujours par défaut une installation 32 bits (ne me démarrez pas ...). Il ne pose pas de question à ce sujet au moment de l'installation. Imaginez donc ma surprise lorsque j'ai découvert que j'exécutais Office 32 bits. . De ce fait, il installe le pilote ODBC 32 bits pour MS Access. Vous pouvez cliquer sur un petit lien imperceptible dans la boîte de dialogue du programme d'installation de MS Office pour forcer l'installation 64 bits.

Une installation Python 64 bits ne fonctionnera pas avec le pilote Microsoft Access ODBC 32 bits et Microsoft ne vous laissera pas installer le pilote ODBC 64 bits si vous disposez de MS Office 32 bits. installé sur la machine.

Le correctif consistait à UNINSTALL MS Office et à le réinstaller à l'aide de ce petit lien dans la boîte de dialogue d'installation pour lui indiquer de l'installer en 64 bits. Ne vous inquiétez pas, il mémorise tous vos fichiers et paramètres récents, ainsi que vos comptes de messagerie dans Outlook. Cela fait, le pilote ODBC 64 bits et mon code Python se sont connectés à la base de données sans aucun problème supplémentaire.

1
Grimravus