在R中读取64位的访问数据库(mdb)

时间:2015-03-16 18:26:26

标签: r rodbc

我有一个数据库,我需要在R中阅读它。我发现了一些包含HmiscRODBC的软件包,它们具有执行此操作的功能。我正在使用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)"上的选项。 enter image description here。我将目标更改为sysWOW

然后我创建了一个新的数据源,如下所示:

enter image description here

我不确定是否需要选择数据库。我找到了Brian Ripley的http://cran.r-project.org/web/packages/RODBC/vignettes/RODBC.pdf RODBC教程,但我仍然无法使其工作。

3 个答案:

答案 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。

最重要的是:

  1. 安装64位Microsoft Access驱动程序Reading data from 32-bit Access db using 64-bit R
  2. 在ODBC数据源(64位)中设置适当的系统DSN
  3. 在R 64位读取的.mdb文件中,使用odbc软件包:dbConnect(odbc(),'your_64bit_dsn')。