RODBC连接无效

时间:2015-07-20 16:15:14

标签: r rodbc

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

我遇到的问题是,在经过几次查询后(所有查询都在2~3分钟或更短的时间内),连接不再被R识别为有效。

具体来说,C包中只有一个RODBC函数,RODBCcheckchannel正在抱怨。它由sqlQuery()

间接调用

RODBC::sqlQuery的第一行调用

if (!odbcValidChannel(channel))
    stop("first argument is not an open RODBC channel")

odbcValidChannel 检查channel 的三个属性 我可以确认R中完成的两项检查会返回TRUE 这是最后一次检查,.Call(RODBC:::C_RODBCcheckchannel, channel, attr(channel, "id"))返回FALSE

RODBCcheckchannel的源代码如下

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吗?
它与手柄有关吗?

(对于缺乏可重现的例子而道歉,因为这需要访问非常具体的数据库系统)

1 个答案:

答案 0 :(得分:0)

您可以在以下代码中添加跟踪吗?如果是这样,打印出thisHandle,TYPEOF(ptr),thisHandle->频道,thisHandle-> id的值会有用,看看有什么变化?

<script src="https://code.jquery.com/jquery-1.3.js"></script>
<div id="container"><div id="test"></div></div>