我有一个数据库,我需要在R中阅读它。我发现了一些包含Hmisc
和RODBC
的软件包,它们具有执行此操作的功能。我正在使用Windows并且无法使用Hmisc,因为您需要mdb-tools
包,我没有找到教程或方法在Windows上安装mdb-tools。
现在,我试图从RODBC
开始。我发现了这个问题" How to connect R with Access database in 64-bit Window?"它显示了如何在Windows中建立连接。我尝试使用类似于该问题中接受的答案的命令。
odbcDriverConnect("Driver={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=E:/Projects\Newdata/2013 Database/Data/pgdabc_SW.mdb")
它出现以下错误:
1: In odbcDriverConnect("Driver={Microsoft Access Driver (*.mdb, *.accdb)}, DBQ=E:/Projects\Newdata/2013 Database/Data/pgdabc_SW.mdb") :
[RODBC] ERROR: state 01S00, code 0, message [Microsoft][ODBC Driver Manager] Invalid connection string attribute
2: In odbcDriverConnect("Driver={Microsoft Access Driver (*.mdb, *.accdb)}, DBQ=E:/Projects\Newdata/2013 Database/Data/pgdabc_SW.mdb") :
ODBC connection failed
我不确定如何检查并开始诊断这里发生了什么。我去了管理工具并检查了"数据源(ODBC)"上的选项。 。我将目标更改为sysWOW
。
然后我创建了一个新的数据源,如下所示:
我不确定是否需要选择数据库。我找到了Brian Ripley的http://cran.r-project.org/web/packages/RODBC/vignettes/RODBC.pdf RODBC教程,但我仍然无法使其工作。
答案 0 :(得分:3)
这对我来说很好用也可能适合你:
require(RODBC)
conn <- odbcConnectAccess2007(path.expand("~/Database.accdb"))
subset(sqlTables(conn), TABLE_TYPE == "TABLE")
df <- sqlFetch(conn, "Table1")
close(conn)
我的sessionInfo()
:
# R version 3.1.1 (2014-07-10)
# Platform: x86_64-w64-mingw32/x64 (64-bit)
#
# other attached packages:
# [1] RODBC_1.3-10
#
# loaded via a namespace (and not attached):
# [1] tools_3.1.1
答案 1 :(得分:0)
我遇到了这个问题(试图从R 64bit查询Access 32bit)很长一段时间。我认为它已在Windows 10中得到修复。 我通过修改我在这篇文章中找到的东西做了一个kludge: How to connect R with Access database in 64-bit Window?
我创建了一个保存脚本的函数(后者又连接到数据库并保存查询结果),使用R32运行它,并将数据加载到R64工作环境中。 我为Access 2007准备了它,但可以为Access2003(仅使用odbcConnectAccess而不是odbcConnectAccess2007)或其他32位数据库进行类似的操作
MysqlQueryAccess2007<-function(filename,query){
tempdir=gsub('\\\\','/',tempdir())
txt<-paste("if (!'RODBC' %in% installed.packages()) install.packages('RODBC')
require(RODBC)
channel<-odbcConnectAccess2007('",filename,"')
data<-sqlQuery(channel,\"",query,"\")
save(data,file=paste('",tempdir,"','tempRODBCquery.Rdata',sep='/'))
close(channel)",sep="")
writeLines(txt,con=paste(tempdir,'RODBCscripttemp.r',sep='/')->tempscript)
system(paste0(Sys.getenv("R_HOME"), "/bin/i386/Rscript.exe ",tempscript))
tt<-get(load(paste(tempdir,'tempRODBCquery.Rdata',sep='/')))
return(tt)
}
然后你只需这样做查询:
dat<-MysqlQueryAccess2007("samplefile.accdb","SELECT TOP 5 * FROM TableI")
答案 2 :(得分:0)
我自己一直试图弄清楚这一点。
解决方案在此处接受的答案中给出
Qt.rgba
,归功于@erg,
以及这里
here,归功于@JATT。
最重要的是: