2014-08-27 38 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