我想分析便携式计算机上Access数据库中包含的R中的数据(使用dplyr)。(我第一次尝试在R中建立数据库连接。)
查看tidyverse站点,以使dplyr能够处理Access数据,似乎连接必须通过DBI包(而不是RODBC)进行。
我正在努力使用dbConnect的语法。
我的RODBC代码是
base1<-odbcDriverConnect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=[filepath]/AdventureWorks DW 2012.accdb")
Run Code Online (Sandbox Code Playgroud)
我的DBI(失败)尝试是
DB <- dbConnect(drv=Microsoft Access Driver (*.mdb, *.accdb)), host=[filepath]/AdventureWorks DW 2012.accdb)
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
(我在Windows 10上工作-都是64位。)
最近,我需要将RODBC定义的数据库连接转换为等效的DBI连接。这是原始的RODBC函数:
connect_to_access_rodbc <- function(db_file_path) {
require(RODBC)
# make sure that the file exists before attempting to connect
if (!file.exists(db_file_path)) {
stop("DB file does not exist at ", db_file_path)
}
# Assemble connection strings
dbq_string <- paste0("DBQ=", db_file_path)
driver_string <- "Driver={Microsoft Access Driver (*.mdb, *.accdb)};"
db_connect_string <- paste0(driver_string, dbq_string)
myconn <- odbcDriverConnect(db_connect_string)
return(myconn)
}
Run Code Online (Sandbox Code Playgroud)
正如解释这里的dbplyr包从DBI包构建。的第一个参数DBI::dbConnect()
必须是适当的后端驱动程序。请参阅链接以获取驱动程序列表。对于Access,odbc::odbc()
驱动程序是合适的。dbConnect函数的第二个参数是上一个odbcDriverConnect调用中使用的完整连接字符串。考虑到这一点,以下功能应连接到您的访问数据库:
connect_to_access_dbi <- function(db_file_path) {
require(DBI)
# make sure that the file exists before attempting to connect
if (!file.exists(db_file_path)) {
stop("DB file does not exist at ", db_file_path)
}
# Assemble connection strings
dbq_string <- paste0("DBQ=", db_file_path)
driver_string <- "Driver={Microsoft Access Driver (*.mdb, *.accdb)};"
db_connect_string <- paste0(driver_string, dbq_string)
myconn <- dbConnect(odbc::odbc(),
.connection_string = db_connect_string)
return(myconn)
}
Run Code Online (Sandbox Code Playgroud)
odbc软件包文档还提供了一个更加细微的示例:https : //github.com/r-dbi/odbc#odbc
ASH*_*ASH -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()
Run Code Online (Sandbox Code Playgroud)