【问题标题】:Show all open RODBC connections显示所有打开的 RODBC 连接
【发布时间】:2014-08-27 14:51:21
【问题描述】:

有人知道怎么做吗? showConnections 不会列出来自 odbcConnect 的任何打开的连接。

【问题讨论】:

    标签: r rodbc


    【解决方案1】:

    您可以通过以下方式缩小搜索范围,这将返回您当前环境中属于 RODBC 类的所有变量。

    envVariables<-ls()
    bools<-sapply(envVariables, function(string){
            class(get(string))=="RODBC"
        })
    
    rodbcObj<-envVariables[bools]
    

    虽然关闭的连接仍然属于 RODBC 类,所以这里还有一些工作要做。

    我们可以使用 trycatch 定义一个函数,该函数将尝试获取关联的 RODBC 对象的连接信息。如果是打开的连接,那么这个命令就可以正常运行,我们返回变量名的字符串。

    如果 RODBC 对象不是一个打开的连接,这将抛出一个错误,我们会捕获该错误,并以我实现的方式返回 NA。你可以在这里返回任意数量的东西。

    openConns<-function(string){
    
       tryCatch({
                result<-odbcGetInfo(get(string))
                string
            }, error = function(e){
                NA
            })
    }
    

    然后我们删除对应于错误的返回值。就我而言,NA,所以我在返回时执行 na.omit。

    na.omit(sapply(rodbcObj, openConns))
    

    或者

    result<-sapply(rodbcObj, openConns)
    result[!is.na(result)]
    

    如有任何问题或相关问题,请告诉我

    -DMT

    【讨论】:

    • 要检查 RODBC“通道”的连接状态,您可以调用私有函数 RODBC:::odbcValidChannel(三个冒号!!!),因为它在 RODBC 中被广泛使用,所以您可以期望它是稳定的(不知道为什么在RODBC中公开了这么重要的功能)。包RODBCext 具有类似的功能,但在包内也是私有的。
    猜你喜欢
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2017-04-21
    • 2021-11-14
    • 1970-01-01
    相关资源
    最近更新 更多