【问题标题】:Reading a access database (mdb) in 64 bit in R在 R 中以 64 位读取访问数据库(mdb)
【发布时间】:2015-05-19 00:09:30
【问题描述】:

我有一个数据库,我需要在 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)”上的选项。 。我将目标更改为sysWOW

然后我新建了一个数据源如下:

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

【问题讨论】:

    标签: r rodbc


    【解决方案1】:

    这对我来说很好,也可能对你有用:

    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
    

    【讨论】:

    • 我试过了,但得到以下错误:Warning messages: 1: In odbcDriverConnect(con, ...) : [RODBC] ERROR: state IM002, code 0, message [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified 2: In odbcDriverConnect(con, ...) : ODBC connection failed我使用的命令conn &lt;- odbcConnectAccess2007(path.expand("E:/Projects/EM/2013 Nown Creek/Data/ShareFile/SW &amp; water Quality/pgd_SW20150316/pgd_SW.mdb"))
    • 你试过these hints吗?
    • 您要求您的访问权限也是 64 位的。 64 位 R 和 32 位 Access DB 不起作用。如果您的数据库是使用 32 位 Access 创建的,它将无法工作。看这里:robertoschiabel.wordpress.com/2008/02/28/…
    【解决方案2】:

    我很长一段时间以来都遇到过这个问题(尝试从 R 64 位查询 Access 32 位)。我认为它已在 Windows 10 中修复。 我通过修改我在这篇文章中找到的东西做了一个拼凑: 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")
    

    【讨论】:

      【解决方案3】:

      我自己已经尝试了一段时间。 此处接受的答案中给出的解决方案 Reading data from 32-bit Access db using 64-bit R,归功于@erg, 以及这里 How to connect R with Access database in 64-bit Window?,感谢 @JATT。

      底线:

      1. 安装 64 位 Microsoft Access 驱动程序https://www.microsoft.com/en-us/download/details.aspx?id=54920
      2. 在 ODBC 数据源(64 位)中设置适当的系统 DSN
      3. 在 R 64 位中使用 odbc 包读取 .mdb 文件:dbConnect(odbc(), 'your_64bit_dsn')。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-17
        相关资源
        最近更新 更多