32-битный pyodbc чтение 64-битный доступ (accdb)
У меня есть Python 2.7 32-разрядная версия работает на 64-разрядной машине Windows 8.1.
У меня есть Access 2013 и файл.accdb, к которому я пытаюсь получить доступ из python и pyodbc.
Я могу создать 64-битный DSN в 64-битном менеджере ODBC. Однако, когда я пытаюсь подключиться к нему из Python, я получаю сообщение об ошибке:
Ошибка: (u'IM002 ', u' [IM002] [Microsoft] [Диспетчер драйверов ODBC] Не найдено имя источника данных и не указан драйвер по умолчанию ')
Предположительно, python ищет только 32-битные DSN и не находит 64-битную, которую я создал.
Когда я пытаюсь создать 32-битный DSN в 32-битном ODBC-менеджере, драйвер для файла accdb отсутствует (только.mdb).
Я думаю, что мне нужен 32-битный драйвер ODBC для файлов Access 2013 (.accdb), но я не смог его найти.
Можно ли сделать то, что я пытаюсь сделать? - 32-битный Python доступ к файлу Access 2013.accdb?
3 ответа
32-разрядные приложения, включая Python, могут работать только с 32-разрядными драйверами ODBC.
64-битные приложения, включая Python, могут работать только с 64-битными драйверами ODBC.
Если у вас есть:
- 32-битный Python с
pyodbc
модуль - 64-разрядный драйвер MS Access ODBC
Тогда вы должны что-то изменить:
- Вы можете установить 64-битную версию Python (я использую Active Python, который имеет
odbc
модуль), то вы можете использовать 64-битную версиюpyodbc
модуль (я вижу это для Python 2.6, 2.7 и 3.3) - Вы можете установить 32-битную версию драйвера MS Access
С помощью pyodbc.dataSources()
Вы можете перечислить источники ODBC:
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))
Если вы используете ActiveState Python, вы можете перечислить их с помощью odbc
модуль, как в моем рецепте: http://code.activestate.com/recipes/578782-printing-list-of-odbc-data-sources/?in=user-186902
У меня была такая же проблема. Для меня проблема была в том, что у меня 32 Python и 32-битный Pyodbc и 32-битный MS Access. Но созданное мной приложение pyqt не будет работать на компьютерах с 64-битным доступом.
Мое решение состояло в том, чтобы установить 32-разрядный драйвер доступа (как упомянуто Микалом), найденный здесь... http://www.microsoft.com/en-us/download/details.aspx?id=13255 в командной строке, используя "/ пассивный" вариант. В противном случае он не будет установлен.
Например, C:\Downloads\AccessDatabaseEngine.exe /passive Драйвер установлен, и теперь мое приложение работает на главном компьютере без проблем.
Могут возникнуть или не возникнуть проблемы с устанавливаемыми как 32-разрядными, так и 64-разрядными драйверами. До сих пор я не видел ни одного.
Метод проб и ошибок показал, что установка "Access Database Engine" 2007, казалось, создала 32-битный источник ODBC для файлов Access accdb.