使用64位R从32位Access数据库读取数据

时间:2017-07-12 17:22:38

标签: r database windows odbc 32bit-64bit

系统规格:64位操作系统(Win7),64位R(3.3.3),32位MS Access(2016)。

我有一个32位.accdb文件中的数据,我想把它读入R.我试过这个:

con <- odbc::dbConnect(odbc::odbc(),
                       dsn="MS Access Database")

但看到以下错误:

Error: nanodbc/nanodbc.cpp:950: IM014: [Microsoft][ODBC Driver Manager] 
The specified DSN contains an architecture mismatch between the Driver and Application 

网络搜索表明R和数据库之间的位差是罪魁祸首。 Windows中的默认ODBC管理器不包含MS Access的驱动程序(或者更确切地说,似乎是,但尝试使用该工具管理它们会给您带来体系结构错误)。根据其他建议,我使用ODBC管理器进行32位程序(c:\ windows \ sysWOW64 \ odbcad32.exe)创建一个新的DSN文件的新DSN,然后调用此DSN:

con <- odbc::dbConnect(odbc::odbc(),
                       dsn="MSAccess32")

然而,我得到了同样的错误,并怀疑我不明白这个错误意味着什么。该问题是否有已知的解决方法?

1 个答案:

答案 0 :(得分:1)

访问文件本身对位数一无所知,只关于客户端应用程序和odbc驱动程序的位数:

如果您的R是64位,则需要使用64位ODBC驱动程序进行访问,因此也需要使用64位的odbc管理器,即C:\Windows\System32\odbcad32.exe(在Win7 64位中)。

如果您的R是32位,则需要位于C:\Windows\SysWOW64\odbcad32.exe的32位ODBC驱动程序。

您可以从此处下载所需的Access Database Engine 2010 Redistributable:https://www.microsoft.com/en-US/download/details.aspx?id=13255

因此,下载64位Access数据库驱动程序,创建64位DSN条目,你应该没问题。