【问题标题】:Access 2013 database read in R through RODBC通过 RODBC 在 R 中读取的 Access 2013 数据库
【发布时间】:2018-09-13 04:49:44
【问题描述】:

我正在尝试使用 RODBC 在 R 中打开一个访问数据库,但我一直无法这样做。

基于post,我已将 Rstudio 中使用的 R 版本转换为 32 位而不是 64 位。

我也尝试过使用this 帖子中的语言:

odbcDriverConnect('DRIVER={Microsoft Access Driver (*.mdb)};DBQ=<fileSpec>')

我还查看了post 中可能的原因,以了解连接未建立的原因。

文件未锁定,我已将 R 版本更改为 32 位以匹配 32 位 ODBC 驱动程序。我还能够使用 STATA 与访问驱动程序建立 odbc 连接,所以我认为我没有任何权限问题。

列出可用数据源时,我得到以下显示我正在尝试访问的驱动程序:

> odbcDataSources()
                                             Excel Files 
"Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)" 
                                      MS Access Database 
              "Microsoft Access Driver (*.mdb, *.accdb)" 

尝试仅连接到 Access 数据源时,我收到以下错误:

ch <- odbcConnect("MS Access Database")
Warning messages:
1: In RODBC::odbcDriverConnect("DSN=MS Access Database") :
  [RODBC] ERROR: Could not SQLDriverConnect
2: In RODBC::odbcDriverConnect("DSN=MS Access Database") :
  ODBC connection failed

【问题讨论】:

    标签: r ms-access odbc ms-access-2013 rodbc


    【解决方案1】:

    MS Access 是一个文件级 DBMS。因此,您需要指定数据库的位置。仅默认的 MS Access 数据库 DSN 是不够的。如果不指定文件,则会重现您的错误。

    conn <- odbcConnect("MS Access Database;DBQ=C:\\Path\\To\\Database.accdb")
    df <- sqlQuery(conn, "SELECT * FROM myTable")
    odbcClose(conn)
    

    现在,如果您确实使用指定的 .mdb/.accdb 文件创建了自己的用户定义 DSN,那么您当然可以单独使用它。

    conn <- odbcConnect("myDSN")
    df <- sqlQuery(conn, "SELECT * FROM myTable")
    odbcClose(conn)
    

    【讨论】:

      【解决方案2】:

      这应该做你想做的。

      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()
      

      【讨论】:

        猜你喜欢
        • 2020-05-08
        • 1970-01-01
        • 2013-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多