SQLSetPos中的游标状态无效

时间:2018-06-08 06:00:42

标签: odbc recordset

ALL,

ret = SQLForeignKeys( stmt_fk, NULL, 0, NULL, 0, NULL, 0, catalogName, SQL_NTS, schemaName, SQL_NTS, tableName, SQL_NTS );
if( ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO )
{
    // error handling
}
bool fkFound = false;
for( ret = SQLFetch( stmt_fk ); ( ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO ) && ret != SQL_NO_DATA; ret = SQLFetch( stmt_fk ) )
{
    fkFound = true;
}
if( ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO && ret != SQL_NO_DATA )
{
    // error handling
}
else if( fkFound )
{
    ret = SQLSetPos( stmt_fk, 0, SQL_POSITION, SQL_LOCK_NO_CHANGE );
    if( ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO )
    {
    }
    else
    {
        // row processing
    }

在这里调用SQLSetPos()会返回错误"无效的游标状态"。 ODBC API没有重置语句句柄的功能,并将光标设置为记录集中的记录1,所以我假设我应该使用这个,但它失败了。

我该如何解决?或者也许还有另一种方法可以做我想做的事情?

TIA !!

1 个答案:

答案 0 :(得分:0)

< - p>时出现此错误的ODBC API docs state

  

StatementHandle 处于已执行状态,但没有结果集与 StatementHandle 相关联。

     

(DM)光标在 StatementHandle 上打开,但 SQLFetch SQLFetchScroll 没有被召唤。

     

StatementHandle 上已打开游标, SQLFetch SQLFetchScroll 已经过调用,但光标位于结果集开始之前或结果集结束之后。

     

参数 Operation SQL_DELETESQL_REFRESHSQL_UPDATE,并且光标位于结果集开头之前或在结果集结束后。

基于此,我打赌有一个未被注意(可能是无声的)前面的错误,这是真正需要解决的问题。我建议到目前为止检查运行的完整ODBC跟踪。