通过RODBC访问R中读取的2013数据库

Access 2013 database read in R through RODBC

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

基于此post,我将 Rstudio 中使用的 R 版本从 64 位转换为 32 位。

我也尝试过使用中的语言 post:

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

我也在这个 post 中查看了关于为什么没有建立连接的可能原因。

文件未锁定,我已将我的 R 版本更改为 32 位以匹配 ODBC 驱动程序 32 位。我还可以使用 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

MS Access 是一个 file-level 数据库管理系统。因此,您需要指定数据库的位置。默认的 MS Access Database DSN 本身是不够的。没有指定文件,您的错误被重现。

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

现在,如果您使用指定的 .mdb/.accdb 文件创建了自己的 user-defined DSN,您当然可以单独连接它。

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

这应该可以满足您的要求。

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