Функции RODBC и ошибки / предупреждения

StackOverflow https://stackoverflow.com/questions/3501528

  •  29-09-2019
  •  | 
  •  

Вопрос

Вопрос об этом 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)
  }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top