首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RODBC连接无效

RODBC连接无效
EN

Stack Overflow用户
提问于 2015-07-20 16:15:14
回答 1查看 453关注 0票数 5

我正在使用提供的ODBC驱动程序和RODBC包测试一个新的数据库系统。

我遇到的问题是,经过几个查询(都在2~3分钟或更短的时间内),R.不再承认该连接是有效的

具体来说,它只是RODBC包中的一个RODBC函数,也就是抱怨的RODBCcheckchannel。它由sqlQuery()间接调用。

RODBC::sqlQuery调用的第一行

代码语言:javascript
复制
if (!odbcValidChannel(channel))
    stop("first argument is not an open RODBC channel")

channel. odbcValidChannel 检查的三个属性

我可以确认在R中完成的两次检查返回了TRUE

这是最后一次检查,.Call(RODBC:::C_RODBCcheckchannel, channel, attr(channel, "id"))返回FALSE

RODBCcheckchannel的源代码如下

代码语言:javascript
复制
SEXP RODBCcheckchannel(SEXP chan, SEXP id)
{
    SEXP ptr = getAttrib(chan, install("handle_ptr"));
    pRODBCHandle thisHandle = R_ExternalPtrAddr(ptr);

    return ScalarLogical(thisHandle && TYPEOF(ptr) == EXTPTRSXP &&
       thisHandle->channel == asInteger(chan) &&
       thisHandle->id == asInteger(id));
}

我尝试过使用R -d valgrind,但是由于C代码本身并没有崩溃,这是没有帮助的。

.Call(RODBC:::C_RODBCcheckchannel, channel, attr(channel, "id")) 为什么在短期内返回 TRUE ,然后再返回 FALSE**?**,能不能解释一下?

这跟把手有关系吗?

(对缺乏可复制的外部设备表示歉意,因为这将需要访问非常具体的数据库系统)

EN

回答 1

Stack Overflow用户

发布于 2015-07-20 23:27:18

可以将跟踪添加到以下代码中吗?如果是这样的话,打印出thisHandle、TYPEOF(ptr)、thisHandle->channel、thisHandle->id的值将很有用,以查看更改了什么?

代码语言:javascript
复制
SEXP RODBCcheckchannel(SEXP chan, SEXP id)
{
    SEXP ptr = getAttrib(chan, install("handle_ptr"));
    pRODBCHandle thisHandle = R_ExternalPtrAddr(ptr);

    return ScalarLogical(thisHandle && TYPEOF(ptr) == EXTPTRSXP &&
       thisHandle->channel == asInteger(chan) &&thisHandle->id == asInteger(id)); 
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31521400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档