Odbc SQLSetPos中的游标状态无效

Odbc SQLSetPos中的游标状态无效,odbc,recordset,Odbc,Recordset,全部, 在这里,调用SQLSetPos()返回一个错误“无效的游标状态”。 ODBC API没有重置语句句柄并将光标设置为记录集中的记录1的函数,因此我认为应该使用此函数,但它失败了 我怎么修理它?或者也许有另一种方式来做我想做的事 蒂娅 当-- StatementHandle处于已执行状态,但没有与StatementHandle关联的结果集 (DM)在语句句柄上打开了一个光标,但未调用SQLFetch或SQLFetchScroll 在语句句柄上打开了一个光标,调用了SQLFetch或SQ

全部,

在这里,调用SQLSetPos()返回一个错误“无效的游标状态”。 ODBC API没有重置语句句柄并将光标设置为记录集中的记录1的函数,因此我认为应该使用此函数,但它失败了

我怎么修理它?或者也许有另一种方式来做我想做的事

蒂娅

当--

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

  • (DM)在
    语句句柄上打开了一个光标,但未调用
    SQLFetch
    SQLFetchScroll

  • 语句句柄上打开了一个光标,调用了
    SQLFetch
    SQLFetchScroll
    ,但光标位于结果集开始之前或结果集结束之后

  • 参数
    操作
    SQL\u DELETE
    SQL\u REFRESH
    SQL\u UPDATE
    ,光标位于结果集开始之前或结果集结束之后

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

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
    }