web-dev-qa-db-ja.com

Pyodbcエラーデータソース名が見つからず、デフォルトのドライバーが指定されていませんparadox

パラドックスデータベースからpyobdcを使用してデータを読み取ろうとしていますが、データベースに接続しようとすると次のエラーが発生し続けます。

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

データベース用の新しいDNSリンクを作成しようとしましたが、何の役にも立ちませんでした。

私のシステムリンクは次のとおりです:

This is what the system DNS looks like

私のコードは:

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
17
Suit Boy Apps

何を確認するかについての2つの考え:

1)接続文字列が間違っています。 ODBC管理者プログラムから直接既知の良好な接続文字列を取得する方法があります( http://www.visokio.com/kb/db/dsn-less- odbc )。これらの手順は、MDBを使用していることを前提としていますが、paradoxファイルでも同じプロセスが機能します

  • 一般的なクライアントPCで、[コントロールパネル]-> [管理ツール]-> [データソース]を開きます。
  • [ファイルDSN]タブを選択し、[追加]をクリックします。
  • 適切なドライバー(例:「Microsoft Access Driver(* .mdb)」)を選択し、「次へ」をクリックします
  • [参照]をクリックし、.dsnファイルを保存する場所を選択します(これは後で削除する一時ファイルです)。
  • [次へ]、[完了]の順にクリックします。
  • ベンダー固有のODBC=セットアップダイアログが表示されます。たとえば、Microsoft Accessでは、[選択]をクリックして既存の.mdbファイルを参照するだけで[OK]をクリックできます。
  • .dsnファイルの場所を参照し、メモ帳を使用して開きます。

DSNファイルには、次のようなものが表示される場合があります。

[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

上記を完全な接続strringに変換するには:

  1. 最初の[ODBC]行を省略します
  2. スペースを含むすべての値を中括弧で囲みます
  3. すべての名前=値のペアをセミコロンで区切って1行に入力します。

これにより、完全な接続文字列が得られます。この例では、文字列は次のようになります。

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)32/64ビットの不一致。 32ビットpythonと64ビットドライバー、またはその逆)を混合するときに問題が発生しました。Pythonインタープリターおよびデータベースドライバーのラインナップ。

25
Chad Kennedy

質問をありがとう、私は同様の問題を抱えていました、そして、この質問と答えは私が必要なものに導くのを助けました。私にとっての問題は、Windows 10上の64ビットPythonと32ビットODBCドライバーの不一致でした(チャドケネディが示唆したように)。完全に更新されたFall Creator's Editionを実行しており、Microsoft Office Pro 2016がインストールされていました。 MS Officeインストーラーはデフォルトで32ビットインストールになっています(開始しないでください...)-インストール時にこれについて尋ねられないので、32ビットOfficeを実行していることに気付いたときの驚きを想像してください。このため、MS Access用の32ビットODBCドライバーをインストールします。 64ビットインストールを強制するためにMS Officeインストーラーダイアログでクリックできる、目立たない小さなリンクがあります。

64ビットPythonインストールは32ビットMicrosoft Access ODBCドライバーでは機能せず、Microsoftは64ビットODBCのインストールを許可しません。 _マシンに32ビットMS Officeがインストールされている場合は、ドライバー。

修正は、MS Officeをアンインストールし、インストールダイアログの小さなリンクを使用して64ビットとしてインストールするように指示して再インストールすることでした。心配しないでください。最近のファイルと設定、およびOutlookのメールアカウントがすべて記憶されています。それが完了したら、64ビットODBCドライバーと、Pythonコードをデータベースに接続し、それ以上の問題はありませんでした。

2
Grimravus

ODBCデータソースを設定するためのショートカットは、64ビットではなく32ビットデータソースを指している可能性があります。

コントロールパネルに移動->管理ツール->データソース(ODBC)を選択->そのファイルを右クリック->プロパティに移動->ショートカットタブで->パスを%windir%\System32\odbcad32.exe

%windir%\SysWOW64\odbcad32.exe

0
neogeomat

この問題は、OfficeとPythonインタープリターが同じビット構成であると解決できます。しかし、64bit OfficeとPythonが動作しません。 ..

これが解決策です。

実際には、Microsoftの2つの異なるAccess ODBC=ドライバー)があります。

  1. Microsoft Accessドライバー(* .mdb)

    Microsoft Accessドライバー(* .mdb)-これは古い32ビットの "Jet" ODBCドライバーです。Windowsインストールの標準部分として含まれています。mdbでのみ動作します( .accdb)ファイルではなく、正式に廃止されました。

  2. Microsoft Accessドライバー(* .mdb、*。accdb)

    Microsoft Accessドライバー(* .mdb、*。accdb)-これは新しい「ACE」ODBCドライバーです。Windowsには含まれていませんが、通常はMicrosoft Officeの一部として含まれています。また、Microsoft Officeを搭載していないマシン用の無料のスタンドアロン「再配布可能」インストーラーとしても利用可能です。「ACE」Access Database Engine(およびドライバー)には、64ビット版と32ビット版があります。 64ビットバージョンまたは32ビットバージョンのいずれかをインストールします(両方のバージョンを強制的に同じマシンに存在させることはできますが、Officeインストールを「破壊」する可能性があるため、お勧めしません。 Python Officeインストールの「ビットネス」に一致する環境を使用することを強くお勧めします。)

Microsoft Access ODBCドライバーのいずれかがPython環境(Windows))で利用可能かどうかを確認する最も簡単な方法は、

pyodbcをインポート

[x.startswith( 'Microsoft Access Driver')の場合、pyodbc.drivers()のxのx]]

空のリストが表示されている場合は、64ビットPythonを実行しており、64ビットバージョンの「ACE」ドライバーをインストールする必要があります。['Microsoft Access Driver( * .mdb) ']そして、.accdbファイルを操作する必要があります。その後、32ビットバージョンの「ACE」ドライバーをインストールする必要があります。

このリンクでは、ドライバーをダウンロードできます [〜#〜] link [〜#〜]

情報源

よろしく!

0
Mecaxis14