2017-01-06 6 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 

와 나는 성공적으로 테라 데이타에 연결할 수 있어요.

2) 파이썬

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)') 

아래 저를 던졌습니다 : TD 드라이버를 환경 변수를 설정 - 설치를 다시.

그러나 질문은, 내가 어떻게 VBA 있지만 파이썬을 통해 연결할 수 있습니다 남아 있습니다.

+0

연결 문자열은 다릅니다. 파이썬에서 사용하려고하는 동일한 연결 문자열을 사용하여 VBA에서 연결할 수 있습니까 (DSN, UID 및 PWD 만 지정)? –

+0

예, 저는 VBA를 통해 파이썬 코드에서 사용 된 것과 동일한 연결 문자열로 연결할 수 있습니다. – anurag

+2

Excel (32 비트 또는 64 비트) 복사본의 "bitness"가 사용중인 Python 인터프리터의 "bitness"와 일치하는지 확인하십시오. –

답변

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 드라이버 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) 

문제가 해결 되었기를 바랍니다.