2017-01-11 38 views
3

pyodbcを使用してMS Access .mdbデータベースにアクセスしようとしました。私は、ドライバが私のDSNに登録されていると私はpyodbc.dataSources()pyodbc.dataSources()に記載されていてもドライバが見つかりません

​sources = pyodbc.dataSources() 
dsns = list(sources.keys()) 
dsns.sort() 
sl = [] 
for dsn in dsns: 
    sl.append('%s [%s]' % (dsn, sources[dsn])) 
print('\n'.join(sl)) 

結果で見つけることができる、ODBCドライバを設定している:だから

Excel Files [Microsoft Excel Driver (*.xls)] 
MS Access DB [Microsoft Access Driver (*.mdb, *.accdb)] 
MS Access Database [Microsoft Access Driver (*.mdb)] 
dBASE Files [Microsoft dBase Driver (*.dbf)] 

、私はでDBにアクセスしようとしましたこのコマンドを使用して:

con = pyodbc.connect(r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=H:\access-panda\data\myDB.mdb;') 

をしかし、私はこのエラーを取得しておいてください。

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

私は問題を解決しようとしましたが、運はありません。私は何か見落としてますか?

答えて

1

pyodbc.dataSources()によって生成されたリストは、32ビットと64ビットの「プラットフォーム」の両方の結果を示しているため誤解を招きます。 32ビットのOfficeとのマシンでは、64ビットの下で、あなたのコードを実行しているPythonはリスト

Excel Files [Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)] 
MS Access Database [Microsoft Access Driver (*.mdb, *.accdb)] 

が生成されますが、我々は、64ビットODBCアドミニストレータを開くと、私たちは、「彼らは、32ビットの両方であることがわかりプラットフォーム」

odbc64.png

と関連したドライバはない 64ビットPythonの下で実行pyodbcするために利用可能であろう。

Aが利用可能ドライバのリストを取得するために、より信頼性の高い方法は、あなたの特定の「プラットフォーム」に利用可能なドライバを表示のみ必要があることを

drivers = pyodbc.drivers() 
print(drivers) 

を使用することです(つまり、64ビットまたは32ビットPython)。

+0

はい、私のpythonとpyodbcは64ビットです...私はsysWOW64でODBCドライバを更新しましたが、問題は解決されていません。最後に、私はpythonとpyodbcの両方を32ビットにダウングレードしました。 pyodbc-64ビットを正しいドライバを参照するように設定する方法はありますか? –

+1

@SaberAlex - 64ビットPython/pyodbcは、64ビットドライバでのみ動作します。 32ビットOfficeがインストールされている場合、32ビットAccess ODBCドライバを使用するには、Pythonアプリケーションを32ビットとして実行する必要があります。 –

+0

私のpyodbc-64ビットが32ビットドライバを参照し続けると思われる –

関連する問題