2

この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は含まれません)。なんで?

4

2 に答える 2

5

コードをチェックして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ます。これは経営幹部レベルのエラーコードですが、Rのエラーではないため、tryCatch処理できませんでした。

df==-1後かどうかを確認する必要があると思いますtryCatch

于 2010-08-17T11:20:00.890 に答える
1

私はこのコードに行き着きました。これで、特定のMysqlerror_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)
  }
}
于 2017-06-20T10:09:41.553 に答える