将32位R连接到32位Access数据库

时间:2016-05-10 18:41:12

标签: r ms-access rodbc

我正在使用带有RStudio的32位R来尝试连接到.accdb文件。我的机器上运行了32位MS Access。

R版:

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消息表明this page可能会有所帮助,但即使按照更改HKEY_LOCAL_MACHINE的步骤操作也无效。

虽然我最初认为that this question was promising,但其中的警告信息与" ACE DSN"我看到的错误信息与" Jet DSN。"

有关

我无法打开我尝试使用我的Access版本RODBC访问的数据库,因为数据库是使用Access 2013创建的,我安装了Access 2010。

任何人都可以帮我解决问题,为什么我无法用odbcConnectAccess()打开这个数据库?

1 个答案:

答案 0 :(得分:1)

  

为什么我无法使用odbcConnectAccess()打开此[Access 2013]数据库?

我很确定

odbcConnectAccess(<fileSpec>)

只是

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

(即较旧的“Jet”ODBC驱动程序)和

odbcConnectAccess2007(<fileSpec>)

只是

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

(即较新的“ACE”ODBC驱动程序)。

较旧的“Jet”驱动程序无法使用.accdb文件,因此需要odbcConnectAccess2007()。如果抛出“无法识别的数据库格式”错误,则可能是数据库文件已损坏。