【问题标题】:Reading data from 32-bit Access db using 64-bit R使用 64 位 R 从 32 位 Access db 读取数据
【发布时间】:2017-12-17 06:11:39
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    访问文件本身对位数一无所知,它只知道客户端应用程序和 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 条目,就可以了。

    【讨论】:

    • 这非常有效。给未来读者的注意事项: (1) 链接的 2010 64 位驱动程序确实适用于 Office 2016。我通过 DOS 命令行使用 /passive 选项安装它,基于其他地方有关驱动程序冲突破坏 32 位版本的警告;到目前为止,我没有遇到任何问题。 (2) 为了在odbc 中使用DSN 参数,您的DSN 条目不能是通用的,它必须指向您的特定数据库文件。因为现有的 DSN 是通用的,我假设(错误地)DSN 仅用于驱动程序 ID,并且将使用单独的函数指定 db 位置。
    猜你喜欢
    • 2016-07-09
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 2015-05-06
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    相关资源
    最近更新 更多