RODBC 函数和错误/警告

标签 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)

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

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

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

最佳答案

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

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

errorsqlQuery 的参数,默认为 TRUE,因此它会为您提供没有错误或警告的字符向量。如果将其更改为sqlQuery(ch,"SELECT Test from tblTest",FALSE),则df将包含-1值。这是 C 级别的错误代码,但不是 R 中的错​​误,因此 tryCatch 无法处理它。

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

关于RODBC 函数和错误/警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3501528/

相关文章:

r - Poisson draw in Rcpp 和 R 不同的结果

r - glmnet NA/NaN/Inf 中的套索错误

linux - R stats - 分配大矩阵/Linux 时的内存问题

r - 从 R 执行时 SQL Server 查询失败

sql - 如何在 RODBC 的 SQLquery 中使用求和函数

sql-server - sqlSave 出错

R 绘图轴刻度标签

r - 如何将字符串向量应用于逻辑向量

r - 如何在 RODBC 中运行 SQL 更新语句?

mysql - 在 R 和 RODBC 中粘贴 SQLQuery