【发布时间】:2014-08-27 14:51:21
【问题描述】:
有人知道怎么做吗? showConnections 不会列出来自 odbcConnect 的任何打开的连接。
【问题讨论】:
有人知道怎么做吗? showConnections 不会列出来自 odbcConnect 的任何打开的连接。
【问题讨论】:
您可以通过以下方式缩小搜索范围,这将返回您当前环境中属于 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:::odbcValidChannel(三个冒号!!!),因为它在 RODBC 中被广泛使用,所以您可以期望它是稳定的(不知道为什么在RODBC中公开了这么重要的功能)。包RODBCext 具有类似的功能,但在包内也是私有的。