2017-01-06 30 views
0

VBAを使用してTeradataに接続できますが、同じTeradataドライバのPython経由で接続できないという奇妙な問題があります。Teradata ODBC dreiverはPython経由で接続していませんが、vba経由で接続できる

は、以下のコードスニペットです:

1)VBA

connection_string = "Driver={Teradata};" & "DBCName=" & dsn_name & ";Database=" & database_name & "; User ID =" & user_name & ";Password=" & password 

と私は正常のTeradataに接続することができています。環境変数を設定し、再インストールTDドライバ:

2)Pythonの

import pyodbc 
dsn_name="td_dev" 
user_name="test" 
password="test" 
db = pyodbc.connect('DSN=' + dsn_name + ';UID='+ user_name +';PWD=' + password + ';') 

この文はエラー -

('IM003', '[IM003] Specified driver could not be loaded due to system error 126 
: The specified module could not be found. (Teradata, C:\\Program Files (x86)\\T 
eradata\\Client\\13.10\\ODBC Driver for Teradata\\Lib\\tdata32.dll). (160) (SQLD 
riverConnect)') 

の下に私をスロー私のような様々な方法を試してみました。

しかし、どのように私はエクセルVBAを介して接続することができますが、Pythonではありません。

+0

一方、接続文字列は異なります。 Pythonから使用しようとしているのとまったく同じ接続文字列( 'DSN'、' UID'、および 'PWD'だけを指定して)を使ってVBAから接続できますか? –

+0

はい、私はVBA経由でPythonコードで使用されているのと同じ接続文字列で接続することができます。 – anurag

+2

Excel(32ビットまたは64ビット)のコピーの「ビット数」が、使用しているPythonインタプリタの「ビット数」と一致するかどうかを確認します。 –

答えて

1

私はドライバの引数を追加する必要があると思います。複数のテラデータドライバがある可能性があります。

#To get a list of drivers 
import pyodbc 
pyodbc.drivers() 

例えば

お使いのシステムでは、ODBCドライバのリストを返します。それはあなたが明示的に使用するためにどのドライバを宣言する必要がある場合がある場合。例:

['SQL Server', 
'SQL Server Native Client 10.0', 
'Amazon Redshift (x64)', 
'Microsoft Access Driver (*.mdb, *.accdb)', 
'Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)', 
'Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)', 
'Microsoft Access Text Driver (*.txt, *.csv)', 
'Teradata', 
'SQL Server Native Client 11.0', 
'PostgreSQL ANSI(x64)', 
'PostgreSQL Unicode(x64)', 
'MySQL ODBC 5.3 ANSI Driver', 
'MySQL ODBC 5.3 Unicode Driver', 
'Teradata Database ODBC Driver 16.10', 
'Teradata 7.1 DB2 Wire Protocol', 
'Teradata 7.1 Oracle', 
'Teradata 7.1 Oracle Wire Protocol', 
'Teradata 7.1 SQL Server Legacy Wire Protocol', 
'Teradata 7.1 SQL Server Wire Protocol', 
'Teradata 7.1 MySQL Wire Protocol', 
'Teradata 7.1 PostgreSQL Wire Protocol'] 

TeradataとTeradata Database ODBC Driver 16.10の両方が存在するためです。どちらを使用するか宣言する必要があります。

host, username, password = 'hostname','UserName', 'Password' 
tdConnect = pyodbc.connect('Driver=Teradata Database ODBC Driver 16.10;DBCNAME=%s;DSN=XXXX;UID=%s;PWD=%s'%(host, username, password),autocommit=True) 

問題が解決したらうれしいです。

関連する問題