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

Тогда вы должны что-то изменить:

  1. Вы можете установить 64-битную версию Python (я использую Active Python, который имеет odbc модуль), то вы можете использовать 64-битную версию pyodbc модуль (я вижу это для Python 2.6, 2.7 и 3.3)
  2. Вы можете установить 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.

Другие вопросы по тегам