RODBC功能和错误/警告

waa*_*ers 2 r rodbc

关于这个R代码的问题:

library(RODBC)

ch <- tryCatch(odbcConnect("RTEST"),
  warning=function(w){print("FAIL! (warning)");return(NA)},
  error=function(e){print(paste("ERROR:",geterrmessage()));return(NA)})

df <- tryCatch(sqlQuery(ch,"SELECT Test from tblTest"),
  warning=function(w){print("FAIL! (warning)");return(NA)},
  error=function(e){print(paste("ERROR:",geterrmessage()));return(NA)})

odbcClose(ch)
Run Code Online (Sandbox Code Playgroud)

在两种情况下,代码都可以正常处理错误(通过省略代码中所需的参数来强制执行)(警告和错误部分几乎完全相同):我得到一个NA值和一个错误消息.

同样对于sqlQuery的错误(给出无效的DSN):NA值和错误消息.

但不适用于使用sqlQuery的警告.没有消息输出,但df包含消息(因此没有NA).为什么?

Mar*_*rek 5

我检查了代码sqlQuery,发现了这个:

stat <- odbcQuery(channel, query, rows_at_time)
if (stat == -1L) {
    if (errors) 
        return(odbcGetErrMsg(channel))
    else return(invisible(stat))
}
Run Code Online (Sandbox Code Playgroud)

errorsqlQuery默认情况下是参数TRUE,因此它为您提供了没有错误或警告的字符向量.如果你改变它sqlQuery(ch,"SELECT Test from tblTest",FALSE),然后df将包含-1价值.这是来自C级的错误代码,但不是R中的错误,因此tryCatch无法处理它.

我想你需要检查df==-1tryCatch.