Подключение 32-разрядной R к 32-разрядной базе данных Access

Я использую 32-разрядную версию R с RStudio, чтобы попытаться подключиться к файлу .accdb. На моей машине работает 32-битный MS Access.

Р-версия:

platform       i386-w64-mingw32            
arch           i386                        
os             mingw32                     
system         i386, mingw32               
status                                     
major          3                           
minor          1.2                         
...
language       R                           
version.string R version 3.1.2 (2014-10-31)
nickname       Pumpkin Helmet

Я пытаюсь использовать пакет RODBC для подключения к базе данных MS Access. Я не могу использовать odbcConnectAccess("location_of_database.accdb") для подключения к базе данных, предоставленной клиентом. Эта конкретная база данных была создана с помощью Access 2013. Когда я пытаюсь подключиться, я получаю различные предупреждающие сообщения:

Warning messages:
1: In odbcDriverConnect(con, ...) :
  [RODBC] ERROR: state HY000, code -1028, message [Microsoft][ODBC Microsoft     Access Driver] Cannot open database '(unknown)'.  It may not be a database that     your application recognizes, or the file may be corrupt.
2: closing unused RODBC handle 12 
3: In odbcDriverConnect(con, ...) :
  [RODBC] ERROR: state 01000, code 1, message [Microsoft][ODBC Microsoft Access Driver]General Warning Unable to open registry key 'Temporary (volatile) Jet DSN for process 0x11a4 Thread 0x798 DBC 0x88e0064 Jet'.
4: In odbcDriverConnect(con, ...) :
  [RODBC] ERROR: state 01000, code 1, message [Microsoft][ODBC Microsoft Access Driver]General Warning Unable to open registry key 'Temporary (volatile) Jet DSN for process 0x11a4 Thread 0x798 DBC 0x88e0064 Jet'.
5: In odbcDriverConnect(con, ...) : ODBC connection failed

Интересно, что я могу использовать odbcConnectAccess2007() для успешного подключения к базам данных, созданным с помощью Access 2010; однако, когда я пытаюсь использовать odbcConnectAccess() для подключения к тем же базам данных, я получаю те же ошибки, что и выше.

Поиск в Google приведенного выше сообщения Error: state 01000, code 1 предполагает, что эта страница может оказаться полезной, но даже после выполнения шагов по изменению HKEY_LOCAL_MACHINE не работает.

Хотя изначально я думал, что этот вопрос многообещающий предупреждающее сообщение относится к «ACE DSN», а сообщения об ошибках, которые я вижу, относятся к «Jet DSN».

Я не могу открыть базы данных, к которым пытаюсь получить доступ с помощью RODBC, с моей версией Access, поскольку базы данных были созданы с помощью Access 2013, а у меня установлен Access 2010.

Может ли кто-нибудь помочь мне устранить неполадки, почему я не могу открыть эту базу данных с помощью odbcConnectAccess()?


person Steven    schedule 10.05.2016    source источник
comment
Вы пытались открыть базу данных Access_2013, используя свою копию Access_2010? Что происходит, когда вы это делаете? Также вы пытались открыть эту базу данных в R, используя odbcConnectAccess2007() вместо odbcConnectAccess()?   -  person Gord Thompson    schedule 10.05.2016
comment
Я получаю сообщение об ошибке "Unrecognized database format [database location.accdb]."   -  person Steven    schedule 10.05.2016
comment
Вы пытались открыть эту базу данных в R, используя odbcConnectAccess2007() вместо odbcConnectAccess()?   -  person Gord Thompson    schedule 10.05.2016
comment
да. Я получаю те же ошибки, что и в моем исходном вопросе.   -  person Steven    schedule 10.05.2016
comment
Принципиально нет разницы между файлами Access 2007-2016, поскольку все они используют один и тот же формат. Некоторые функции пользовательского интерфейса могут отличаться даже от элементов таблицы, но R подключается к движку ACE, а не к графическому интерфейсу. Нераспознанный формат базы данных свидетельствует о повреждении. Попробуйте создать новый Access .accdb и импортировать все объекты.   -  person Parfait    schedule 10.05.2016


Ответы (1)


почему я не могу открыть эту базу данных [Access 2013] с помощью odbcConnectAccess()?

я вполне уверен, что

odbcConnectAccess(<fileSpec>)

просто сокращение для

odbcDriverConnect('DRIVER={Microsoft Access Driver (*.mdb)};DBQ=<fileSpec>')

(т. е. более старый драйвер ODBC "Jet") и

odbcConnectAccess2007(<fileSpec>)

просто сокращение для

odbcDriverConnect('DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=<fileSpec>')

(т. е. более новый драйвер ODBC "ACE").

Старый драйвер "Jet" не может работать с файлами .accdb, поэтому потребуется odbcConnectAccess2007(). Если это вызывает ошибку «Неизвестный формат базы данных», вероятно, файл базы данных поврежден.

person Gord Thompson    schedule 10.05.2016