2014-08-27 39 views

回答

2

您可以通过以下方式缩小搜索范围,这将返回当前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)] 

它的任何问题或意见,让我知道

5'-DMT

+0

十分感谢:)我要看看这个! – nathaneastwood 2014-09-01 08:29:56

+1

要检查RODBC“通道”的连接状态,您可以调用专用函数RODBC ::: odbcValidChannel(三个冒号!!!),由于RODBC在RODBC中广泛使用,不知道为什么这样一个重要功能已经在RODBC上公开)。包'RODBCext'具有类似的功能,但在包中也是私有的。 – 2016-12-27 21:38:57