Функции 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))
}
error
параметр для sqlQuery
, по умолчанию TRUE
, Так что это дает вам вектор персонажа без ошибок или предупреждений. Если вы измените это sqlQuery(ch,"SELECT Test from tblTest",FALSE)
потом df
будет содержать -1
ценность. Это код ошибки от уровня C, но не ошибка в r, что означает tryCatch
не мог справиться с этим.
Я полагаю, что вам нужно проверить, df==-1
после tryCatch
.
Другие советы
Я закончил этот код. Теперь я могу справиться с конкретным 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)
}
}