RODBC 函数和错误/警告

发布于 2024-09-14 20:13:45 字数 625 浏览 4 评论 0原文

关于此 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)

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

另外,对于 sqlQuery 错误(给出无效的 DSN):NA 值和错误消息。

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

A question about this R code:

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)

Code works fine for errors (forced by omitting the required paramaters in the code) in both cases (warning- and error part are almost exactly the same): I get a NA value and an errormessage.

Also for an error with sqlQuery (give an invalid DSN): NA value and an errormessage.

But not for warnings with sqlQuery. No message output, but df contains the message (so no NA). Why?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

甚是思念 2024-09-21 20:13:45

我检查了 sqlQuery 的代码,发现:

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

error isparameter to sqlQuery, on default TRUE,所以它给出您的字符向量没有错误或警告。如果将其更改为sqlQuery(ch,"SELECT Test from tblTest",FALSE),则df将包含-1值。这是 C 级别的错误代码,但不是 R 中的错​​误,因此 tryCatch 无法处理它。

我想您需要在 tryCatch 之后检查是否 df==-1

I checked code for sqlQuery and found this:

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

error is parameter to sqlQuery, on default TRUE, so it gives you character vector without error or warning. If you change it to sqlQuery(ch,"SELECT Test from tblTest",FALSE) then df will contain -1 value. This is error code from C-level, but not error in R meaning so tryCatch could not handle it.

I suppose that you need to check if df==-1 after tryCatch.

苏别ゝ 2024-09-21 20:13:45

我最终得到了这段代码。现在我可以处理具体的Mysql error_code:

saveText <- function(query, channel, errors = TRUE) {
  stat <- odbcQuery(channel, query)
  if (stat == -1L) {
    if (errors)
      err <- odbcGetErrMsg(channel)
    else {
      err <- invisible(stat)
    }
    return(err)
  }
}

I ended up with this code. Now I can handle the specific Mysql error_code:

saveText <- function(query, channel, errors = TRUE) {
  stat <- odbcQuery(channel, query)
  if (stat == -1L) {
    if (errors)
      err <- odbcGetErrMsg(channel)
    else {
      err <- invisible(stat)
    }
    return(err)
  }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文