2013-09-14 5 views
1

Как я могу получить доступ к моей базе данных Microsoft Access 2010 (accdb) с помощью pyodbc? Раньше я использовал базу данных MDB, который работал хорошо с строки подключения существа:pyodbc и ms access 2010 ошибка соединения

ODBC_CONN_STR = 'DRIVER={Microsoft Access Driver (*.mdb)};DBQ=%s;' % ACCESS_DATABASE_FILE 

Сейчас я использую:

import pyodbc 
ACCESS_DATABASE_FILE = "PSA_TEST.accdb" 
ODBC_CONN_STR = 'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=%s;' % ACCESS_DATABASE_FILE 
conn = pyodbc.connect(ODBC_CONN_STR) 

Я получаю ошибку является: pyodbc.Error: ('HY000 ',' [HY000] [Microsoft] [ODBC-Treiber for Microsoft Access] Kein zulässiger Dateiname. (-1044) (SQLDriverConnect) ')

Что означает «имя файла неприемлемо». Я нашел связанный с этим вопрос, но ответ не работает для меня (Connecting to MS Access 2007 (.accdb) database using pyodbc). Я использую 32-битный питон в соответствии с выходом:

python -c 'import struct; print struct.calcsize("P") * 8' 

и MS Access 32 бит.

[EDIT]

  • На всякий случай, я проверяю с os.path.isfile (ACCESS_DATABASE_FILE), что файл на самом деле существует
  • файл может быть открыт с доступом
  • открытия предыдущий файл mdb с новой строкой соединения дает то же сообщение об ошибке, что afaik не является ожидаемым поведением
+1

Является ли база данных доступа в вашем текущем рабочем каталоге? Если нет, вам нужно указать путь к файлу, а также имя файла. – ChrisProsser

+0

Да, это так. Тот же код работает правильно с файлом mdb в том же каталоге и немного другой строкой соединения. – phobic

+0

На самом деле, когда я указываю неправильное имя файла, я получаю то же сообщение об ошибке. Я проверил, связано ли это с тем, что подчеркивание не интерпретируется правильно, но изменение имени файла на test.accdb не приводит к изменению результата. – phobic

ответ

7

Хорошо, извините, что ответили на мои собственные вопрос, но, играя вокруг, я узнал, что вы должны указать абсолютный путь, если вы используете вторую строку подключения:

ACCESS_DATABASE_FILE = 'C:\\path\\to\\PSA_TEST.accdb' 
ODBC_CONN_STR = 'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=%s;' % ACCESS_DATABASE_FILE 

Тогда он даже работает с файлом ACCDB, а также с файлом MDB как ожидается.

+2

Спасибо, что нашли время, чтобы опубликовать ваше решение. Нет ничего плохого в ответе на свой вопрос. –

Смежные вопросы