系统规格: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")
然而,我得到了同样的错误,并怀疑我不明白这个错误意味着什么。该问题是否有已知的解决方法?
答案 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条目,你应该没问题。