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

Reading data from 32-bit Access db using 64-bit R

系统规格:64 位 OS (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 的驱动程序(或者更确切地说,它似乎包含,但尝试使用该工具管理它们会给您带来体系结构错误)。按照其他建议,我使用 32 位程序的 ODBC 管理器 (c:\windows\sysWOW64\odbcad32.exe) 为 MS Access 文件创建一个新名称的新 DSN,然后调用此 DSN:

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

但是,我遇到了同样的错误,我怀疑我不明白这个错误的含义。该问题是否有已知的解决方法?

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

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

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

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

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