sqlQuery 的 RODBC 错误处理

2024-01-07

我没有找到任何好的错误测试函数来测试结果sqlQuery这让我很惊讶。

在文档中(http://www.inside-r.org/packages/cran/rodbc/docs/sqlQuery http://www.inside-r.org/packages/cran/rodbc/docs/sqlQuery),他们指出其返回值为:

“成功时,数据帧(可能有 0 行)或字符串。出错时,如果错误 = TRUE,则为错误消息的字符向量,否则为不可见的整数错误代码 -1(一般情况下,请调用 odbcGetErrMsg 了解详细信息)或 -2(无数据,这可能不是错误,因为某些 SQL 语句确实不返回数据)。”

我永远无法复制返回的 -1 或 -2 (默认情况下,错误 = false)。这怎么可能?

如果使用无效表编写 SELECT 请求,我会从 SQL Server 得到一个包含错误消息的字符串,但没有 -1L 也没有 -2L。它们什么时候发生?

本着同样的精神,测试 SQL 错误或空结果集包括一系列较小的测试,以避免测试时出现错误。

我最终使用了以下 if..else..else 代码,但我想知道是否可以简化它(以及为什么我从未看到 -1 或 -2)。这让我有种没有涵盖所有案例的糟糕感觉......

sql.invalid.table.name <-
 "SELECT pfiID
  FROM test"

sql.0.rows <-
 "SELECT pfiID
  FROM dossier
  WHERE pfiID = 'fake-id'"

sql.10.rows <-
 "SELECT pfiID
  FROM dossier
  WHERE pfiID like '%/200201/0001'"

records <- sqlQuery(channel, sql.invalid.table.name)

if (is.null(nrow(records))) {
  stop(paste("", records, sep="\n"))
} else if (nrow(records) == 0) {
  cat("No data\n")
} else
  print(head(records))

records <- sqlQuery(channel, sql.0.rows)

if (is.null(nrow(records))) {
  stop(paste("", records, sep="\n"))
} else if (nrow(records) == 0) {
  cat("No data\n")
} else
  print(head(records))

records <- sqlQuery(channel, sql.10.rows)

if (is.null(nrow(records))) {
  stop(paste("", records, sep="\n"))
} else if (nrow(records) == 0) {
  cat("No data\n")
} else
  print(head(records))

有什么想法/意见吗?


是的,情况看起来很可怕,但实际上并没有想象的那么糟糕。该文档模糊且令人费解,因为RODBC处理与任何类型数据库的连接,并且不同的数据库在出现问题时返回不同的内容。

我已经使用 ROBDC 将 R 连接到 SQL Server 完成了大量工作,总的来说SELECT查询很容易处理:如果有效,它们将返回一个数据帧,如果无效,则返回一个字符向量。所以代码就像

records <- sqlQuery(channel, "SELECT blah FROM somewhere")
if(is.character(records))
{
  stop(paste(records, collapse = "\n"))
}

效果很好。

为了绝对确定,您需要更彻底,但如果您仅连接到一种类型的数据库,那么它的失败方式有望保持一致。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sqlQuery 的 RODBC 错误处理 的相关文章

  • Postgresql:SERIAL 在约束 INSERT 失败时递增

    有一个像这样的简单表结构 CREATE TABLE test id INT PRIMARY KEY sid SERIAL 我注意到如果我尝试插入一行但它未通过约束测试 即主键约束 SERIAL计数器无论如何都会增加 所以下一次成功插入 si
  • R 中 if-else 中的逻辑运算符

    我有一个名为 mat 的下表 5 列和 3 行 AC CA RES 1 0 2 2 1 3 0 0 0 1 正在执行的操作是mat 1 mat 1 mat 2 我正在测试以下内容 1 如果一行的两列都为零 则结果应为 NA 2 如果一行中只
  • “$$ 处或附近的未终止的美元引号字符串

    我试图使用 DBeaver 声明一些变量并不断遇到此错误 Unterminated dollar quoted string at or near DO DECLARE A integer B integer BEGIN END 有任何想法
  • 从VBA中的数组批量插入到sql中

    我正在尝试在 Excel 中构建一个按钮 将所选区域上传到 SQL Server 中的表中 第一行将自动视为列标题 这件事该怎么继续下去呢 我想要的是简单和超快的上传 这是我的想法 我将选择选定的区域 然后将其保存为 txt 文件 然后对其
  • 在 ggplot2 上绘制世界地图

    我一直在尝试在 ggplot2 上绘制世界地图 我跟踪了电子邮件的线索 带 l 的 ggplot 地图 https stackoverflow com questions 9558040 ggplot map with l但我确实遇到了同样
  • SQL Server 之间

    我有一个表 其中有年 月和一些数字列 Year Month Total 2011 10 100 2011 11 150 2011 12 100 2012 01 50 2012 02 200 现在 我想要SELECT2011 年 11 月至
  • sql 查询的权限被拒绝

    我正在尝试通过经典的 asp 记录集执行以下查询 SQL Select P Name as P Name P Description as P Description from L PagePermission inner join A P
  • ggplot2:图例下方的中心图例而不是面板区域

    ggplot默认情况下 图例位于面板下方居中 这在某些情况下确实令人沮丧 请看下面的例子 ggplot diamonds aes cut fill clarity geom bar coord flip theme legend posit
  • ggarrange:合并多个图

    附图来自以下文章 正在使用 ggarrange 合并这些图 http www sthda com english articles 24 ggpubr publication ready plots 81 ggplot2 easy way
  • R:行数不相等的列绑定

    我有两个数据集 它们每个都有变量 ID Block 和 RT 反应时间 我想合并 列绑定这两个集合 以便我拥有一个包含变量的数据集 ID 块 RT1 RT2 问题是两个集合中的行数不相等 此外 ID 和块号匹配也很重要 缺失值应替换为 NA
  • 在 Travis 上使用 devtools 安装 R 包时遇到问题

    Travis CI 构建于drakeR包手册 https github com ropenscilabs drake manual 最近开始失败 https travis ci org ropenscilabs drake manual b
  • 处理 ANTLR 4 中的错误

    遵循后接受的答案 https stackoverflow com a 18137301 2279200的指示处理 ANTLR4 中的错误 https stackoverflow com q 18132078 2279200问题 我遇到了以下
  • 如何在 R 中为所有plot.default、plot 或lines 调用设置默认颜色

    为了简化我的日常 R 交互 我想为所有绘图设置默认颜色 例如 假设我想要用红线绘制所有绘图 例如在 gnuplot 中 到目前为止 这是我的 Rprofile 的片段 setHook packageEvent grDevices onLoa
  • 删除原始数据中部分重复的记录

    我需要删除表中时间间隔为 1 或 2 分钟或相同且必须相同的所有记录ID但保留第一个记录 ID Time SN SD WE FW 10 2014 06 30 19 17 37 000 I 0 100 0 10 2014 06 30 19 1
  • play20 ebean 生成的 sql 在 postgresql 上抛出语法错误

    我正在尝试使用 postgresql 来启动我的 play20 应用程序 以便我可以使用并稍后部署到 Heroku 我跟着这个answer https stackoverflow com questions 12195568 errors
  • 零膨胀泊松分布:无法估计参数,错误代码为 100

    以下是我正在研究的一种数据集 data lt c 0 1 0 11 2 0 3 0 0 2 1 3 1 0 1 0 0 0 2 3 0 0 0 8 1 1 1 0 1 1 2 7 0 0 0 5 2 3 6 1 1 5 2 9 0 0 1
  • Sql 查询:Sum,表中所有可能的行组合

    SQL Server 2008 R2 表结构示例 create table TempTable ID int identity value int insert into TempTable values 6 insert into Tem
  • 如何在 R 中解析堆叠多个 JSON 的文件?

    我在 R 中有以下 堆叠 JSON 对象 example1 json ID 12345 Timestamp 20140101 Usefulness Yes Code event1 A result 1 ID 1A35B Timestamp
  • 如何在 R 中“推断”面板数据的值?

    我有一个带有 NA 值的面板数据 如下所示 uid year month day value 1 1 2016 8 1 NA 2 1 2016 8 2 NA 3 1 2016 8 3 30 4 1 2016 8 4 NA 5 1 2016
  • R:中断 for 循环

    你能确认下一个break是否取消了内部for循环吗 for out in 1 n old id velho lt old table df id out for in in 1 n id novo lt new table df ID in

随机推荐

  • 困境:何时使用片段与活动:

    我知道Activities被设计为代表我的应用程序的单个屏幕 而Fragments被设计为可重用的 UI 布局 其中嵌入了逻辑 直到不久前 我开发了一个应用程序 因为它说应该开发它们 我创建了一个Activity代表我的应用程序的屏幕并使用
  • 使用 JSONObject 在 Java 中为以下结构创建嵌套 JSON 对象? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想使用 JSONObject 和 JSONArray 构建一个类似于 java 中结构的 JSON 对象 我浏览了堆栈溢出中的各种帖子
  • MediaPlayer 无法播放程序数据文件夹中的音频文件?

    当我从 MIC 录制音频并将文件存储在 data data 为什么 MediaPlayer 无法播放该文件 如果我将目的地更改为 SD卡 一切都很好 我做错了什么吗 我没有找到 MediaPlayer 的限制 设备 三星 T959 Gala
  • Birt 报告设计在运行报告时验证报告参数

    如何在 WebViewer 中运行报表时验证报表参数 我正在使用 eclipse 来设计报告 我使用日期字段和一些选择框作为参数 但我的要求是 用户不应该输入日期 他应该从日期选择器 jquery UI 中选择日期 并且在选择框中我希望在服
  • Coinbase API - 尽管有 200 响应,但账户之间的转账并未实际转账

    我正在开发一个项目 需要使用 Coinbase API v2 在两个钱包之间进行转账 当我调用 API 时 https api coinbase com v2 accounts account id transactions https a
  • Emacs Org 模式:如何停止列视图中显示天数的总计?

    我正在使用 Emacs 23 4 1 和 Org Mode 8 0 6 在我的组织文件中 我使用以下方法估计了任务将花费的小时数Effort相关标题的属性 例如 My Tasks TODO Read a book TODO Watch a
  • Android 评级栏显示超过 5 颗星

    我想通过我的 Android 应用程序中的警报对话框显示评级栏 我面临的问题是 根据屏幕的宽度 评级栏在横向模式下显示超过 5 颗星 最多 10 颗 并且函数 setNumStars 没有效果 已经有一些帖子正在处理这个问题 但它们处理的是
  • Android Studio 无法识别“RobolectricTestRunner.class”

    我正在尝试使用 Robolectric 来运行单元测试 但 Android Studio 无法识别以下类 RunWith RobolectricTestRunner class Details classpath com android t
  • CSS 捆绑和 Internet Explorer 的限制

    当我将 jquery ui 添加到包中时 我最终得到 bundles Add new StyleBundle Content css Include Content themes base jquery ui core css Conten
  • 使用 geom_point() 进行位置躲避,x=连续,y=因子

    我创建了一个函数 可以同时绘制许多因子分析中的载荷 即使它们的变量没有完全重叠 或根本重叠 它工作得很好 但有时分析中的因子载荷是相同的 这意味着这些点被绘制在彼此之上 library pacman p load devtools psyc
  • 如何在 C# 中表示共轭表

    我正在为法语文本设计一个语言分析器 我有一个 XML 格式的字典 如下所示
  • 使用 pytest 管理测试数据的正确方法是什么?

    我需要为多个相关应用程序创建自动化测试 并面临测试之间的测试数据管理问题 问题是相同的数据必须在多个应用程序和 或不同的 API 之间共享 现在我有了 pytest 的下一个结构 它对我很有用 但我怀疑在 conftest py 中使用测试
  • 在 PyCharm 中保存时自动添加换行符?

    PyCharm 5 抱怨文件末尾缺少换行符 如何告诉 PyCharm 在保存文件时自动添加换行符 如果丢失 这可以在Editor gt General设置 从 下的文件菜单中 选择Settings 然后选择Editor gt General
  • SSAS - 显示行上的度量

    总的来说 我对 MDX 和 SSAS 很陌生 我正在尝试以漂亮的表格形式获取所有措施和日期 所以像这样 Measure Date Value Meas1 D1 3 Meas1 D2 8 Meas1 D3 9 Meas2 D1 7 Meas2
  • 在 iOS 5 中使用 -webkit-overflow-scrolling 进行滚动的问题

    我有一个高度固定的 HTML 页面div它应该是可滚动的 仅垂直 在 iOS 5 中 这可以通过以下方式实现 overflow y auto webkit overflow scrolling touch The div包含一个大约有 10
  • 是否可以对 mysql SELECT 语句中返回列的顺序进行排序?

    想象一下在线调查中的两个问题 你喜欢苹果吗 结果存储在 mysql 数据库列 q1 中 1对于 是 或0 for No 你喜欢橙子吗 结果存储在 mysql 数据库列 q2 中 1对于 是 或0 for No 想象一下以下 SELECT 语
  • 使用 CGContext 绘制线条

    我想在表视图单元格中画线 以便可以将文本字段和开关放置在单个单元格中 我增加了单元格的高度 如何在单元格中画线 我有 UIView 的子类 其中包含以下代码 Get the CGContext from this view CGContex
  • 围绕轴标签绘制彩色框

    考虑这个简单的例子 library tidyverse tibble x as factor c good neutral bad y as factor c bad neutral bad gt ggplot aes x x y y ge
  • 在emacs中使用pdb时如何指定路径?

    我正在尝试在 emacs 中使用 pdb 我需要更改路径PYTHONPATH lib 但是当我输入时 Run pdb like this PYTHONPATH lib pdb pychess Emacs 给我一个错误 说找不到文件 PYTH
  • sqlQuery 的 RODBC 错误处理

    我没有找到任何好的错误测试函数来测试结果sqlQuery这让我很惊讶 在文档中 http www inside r org packages cran rodbc docs sqlQuery http www inside r org pa