Fellow более продвинутыми программистами:Oppposite выработок OLEDB/ODBC между Python и MS Access VBA
Пожалуйста, простите меня, если это кажется усталым Python 32-бит/64-битного ODBC/выпуск OLEDB Windows, но я пытался искать форумы и не могут найти причину моей проблемы.
В принципе, я попытался подключить очень простой скрипт Python сначала через ODBC, используя модуль pypyodbc, а затем второй через OLEDB с помощью модуля adodbapi, как попытку базы данных MS Access 2010. .accdb. Однако для OLEDB я постоянно получаю «Провайдер не найден. Возможно, неправильно установлена ошибка «». И для ODBC я последовательно получаю «Имя источника данных не найдено, а драйвер по умолчанию не указан».
Копаем глубже, что-то замечательное произошло. В Python JET.OLEDB.4.0 работает для файлов .mdb, но не ACE.OLEDB.12.0 для файлов .accdb. Тем не менее, точное обратное происходит, когда я запускаю соединение ADOBB Access VBA!
Моя среда включает в себя:
- Python3.4 -32-разрядное
- pywin32-219 (устанавливается с после установки)
- Microsoft Office 2010 64-разрядный
- Windows 7
Да, я загрузил и успешно установил AccessDatabaseEngine_x64.exe. Да, я указал источники данных ODBC на% Win%/SysWOW64. Да, я вижу драйвер Access и источники данных для mdb и accdb в файле odbcad32.exe в вышеупомянутой папке. Да, я вижу ключи реестра в regedit для источников доступа (* mdb) и Access (* mdb, * accdb) и драйвера доступа. И да, я и перезапустил, и выключил/на моей машине.
OLEDB
Ниже моя строка соединения, которая возвращает 'Provider не найдена ошибка ...:
import adodbapi
databasename = 'D:\directorypath\DatabaseName.accdb'
constr = 'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s' % databasename
db = adodbapi.connect(constr)
Замечательно, хотя, следующая строка соединения отлично работает, но, конечно, только с .mdb файлов:
import adodbapi
databasename = 'D:\otherdirectorypath\OtherDatabaseName.mdb'
constr = 'Provider=Microsoft.JET.OLEDB.4.0;Data Source=%s' % databasename
db = adodbapi.connect(constr)
ODBC
Ниже моя строка соединения, которая возвращает «имя источника данных не найден ...»:
import pypyodbc
databasename = 'D:\directorypath\DatabaseName.accdb'
constr = 'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=%s;' % databasename
db = pypyodbc.connect(constr)
Как выше, следующие работы идеально, но только для .mdb файлов:
import pypyodbc
databasename = 'D:\otherdirectorypath\OtherDatabaseName.mdb'
constr = 'DRIVER={Microsoft Access Driver (*.mdb)};DBQ=%s;' % databasename
db = pypyodbc.connect(constr)
доступа VBA
Интересно, что СОВПАД происходит обратное в Ac cess VBA (конечно, с ссылкой на библиотеку объектов ActiveX Data Object), используя те же строки соединений, что и драйвер и поставщик.
код прекрасно работает как для .mdb и .accdb файлов:
Dim constr As String
Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset
constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\databasedirectory\DatabaseName.accdb;Persist Security Info=False"
' OR constr = "DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=D:\databasedirectory\DatabaseName.accdb;Persist Security Info=False"
Set CN = New ADODB.Connection
CN.Open (constr)
код возвращает ошибку - 'Provider не найден' или 'Указанный драйвер не может быть загружен':
Dim constr As String
Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset
constr = "Provider=Microsoft.JET.OLEDB.4.0;Data Source=D:\otherdatabasedirectory\OtherDatabaseName.mdb;Persist Security Info=False"
' OR constr = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=D:\otherdatabasedirectory\OtherDatabaseName.mdb;Persist Security Info=False"
Set CN = New ADODB.Connection
CN.Open (constr)
ACE.OLEDB.12.0 VS ACE.OLEDB.14.0
Наконец, все еще в Access VBA, только Провайдер: Microsoft.ACE.OLEDB.12.0 работает, который, как мне показалось, соответствует MS Access 2007. Однако поставщик: Microsoft.ACE.OLEDB.14.0 не работает для моего установленного MS Access 2010. Любые причины для этого?
Заключение
Я понимаю библиотека ActiveX это другая технология, чем библиотеки модулей Python и Microsoft не позволяет одновременное использование компонентов в x32-битных и 64-битных, но почему я не могу получить желаемый результат , Я подумал о AccessDatabaseEngine_x64.exe/passive, но я слышу странные результаты Office, идущие по этому маршруту. Нужно ли устанавливать Python3.4 для 64-битного? Пожалуйста, помогите или предложите! Благодарю.
'' Более продвинутые программисты. '' Ну, это я из картинки. – RossC