【问题标题】:How to connect to .accdb database from R如何从 R 连接到 .accdb 数据库
【发布时间】:2018-02-25 14:09:09
【问题描述】:

R 新手,在连接 Access 数据库时遇到问题。这是我正在运行的代码(运行前手动加载 RODBC 包):

library(RDOBC)

conn <- odbcDriverConnect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ='C:/db/dbNorthwind.accdb'")
subset(sqlTables(conn), TABLE_TYPE == "TABLE") 
df <- sqlFetch(conn, "tblCustomer") 
df # 

我收到错误消息:

sqlTables(conn) 中的错误:第一个参数不是开放的 RODBC 通道。

知道有关如何修复的任何提示吗?

环境:

  • 64 位 Windows
  • 32 位 MS Access 2013
  • 64 位 Microsoft R 打开

【问题讨论】:

    标签: r ms-access rodbc


    【解决方案1】:

    你使用的代码没问题,你的设置不行。

    您需要使用 64 位 R 和 64 位 MS Access,或 32 位 R 和 32 位 MS Access。但是,您可以尝试安装 64 位 Access 数据库引擎,找到 here (2016 version)here (2010 version)

    我在安装完整版 Access 和数据库引擎(目前有 Access 32-bits 2016,无法安装 Access 数据库引擎 64-bits 2016,但可以通过使用安装 2010 版安装程序上的 /passive 命令)。

    有关如何在一台机器上安装 32 位完整版和 64 位数据库引擎的一些详细信息,请参阅this blog。但如前所述,结果可能会有所不同。

    【讨论】:

    • 只是为了确认一下:您是说Microsoft Access Database Engine 2016 Redistributable 的安装程序已放弃对/passive 开关的支持,并且不再可以强制同时使用 64 位和 32 位版本2016 年的 ACE 在同一台机器上?
    • @GordThompson 我没有查找确切的信息,因为我无法在短时间内找到它们。我只是说我尝试使用带有/passive 开关的安装程序并收到一条错误消息说我无法安装它,因为我已经运行了 32 位 Office,所以我只选择了 2010 版本,因为那里据我所知,差异不是很大
    • 好的,谢谢。如果微软认为太多人使用/passive 开关破坏了他们的Office 安装并且他们只是放弃了它,我不会感到惊讶。无论如何,我一直认为这是一个“坏主意(TM)”,否则他们为什么要费心编写安装程序来防止默认情况下 /passive 行为?
    • 感谢您的澄清。由于目前很难对我的设置(公司政策)进行更改,我将使用解决方法(Access 连接到 Excel,R 连接到 Excel),直到我的 R 技能足以证明尝试 64 位是合理的Access 数据库引擎方法。
    【解决方案2】:

    我对数据库导入了解不多,但我会通过告诉你我通常做什么来帮助你。 您必须做的第一件事是了解您是否拥有 DSN 才能访问数据库。您可以通过单击开始并转到 ODBC 数据源来执行此操作。 当您在“UserDSN”窗口中时,您检查是否有您的文件。如果它不存在,您只需添加它,通过单击“添加”,然后您寻找驱动程序来读取您的文件,在您的情况下是 .accdb。 如果您没有驱动程序,您可以在这里下载:

    http://www.microsoft.com/downloads/details.aspx?familyid=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=e

    创建 DSN 后,进入 R 并编写这几行代码。这里我会写一个例子。 我从以下位置下载了一个访问文件:

    https://www.599cd.com/access/studentdatabases/

    访问文件:访问初学者1

    我输入的 in R:

    library(RODBC)
    
    
    odbcDS <- "PCResale Customer Database"
    
    tmp <- odbcConnect(dsn = odbcDS)
    
    df <- sqlFetch(tmp, "CustomerT") 
    

    希望对你有帮助,

    Ciao!

    【讨论】:

    • 谢谢。也试过这个,如果我的环境设置正确,可能会起作用。 ("...ERROR: state IM014, code 0, message [Microsoft][ODBC Driver Manager] The specified DSN contains a architecture mismatch between the Driver and Application...")
    【解决方案3】:

    这对我来说很好。

    library(RODBC)
    
    # for 32 bit windows
    # Connect to Access db
    # channel <- odbcConnectAccess("C:/Users/Excel/Desktop/Coding/Microsoft Access/Northwind.mdb")
    
    # Get data
    # data <- sqlQuery( channel , paste ("select * from Name_of_table_in_my_database"))
    
    
    # for 64 bit windows
    channel <- odbcDriverConnect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:/Users/Excel/Desktop/Coding/Microsoft Access/Northwind.mdb")
    
    data <- sqlQuery( channel , paste ("select * from CUSTOMERS"))
    
    odbcCloseAll()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-16
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多