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 !!
答案 0 :(得分:0)
< - p>时出现此错误的ODBC API docs state
StatementHandle
处于已执行状态,但没有结果集与StatementHandle
相关联。(DM)光标在
StatementHandle
上打开,但SQLFetch
或SQLFetchScroll
没有被召唤。
StatementHandle
上已打开游标,SQLFetch
或SQLFetchScroll
已经过调用,但光标位于结果集开始之前或结果集结束之后。参数
Operation
为SQL_DELETE
,SQL_REFRESH
或SQL_UPDATE
,并且光标位于结果集开头之前或在结果集结束后。
基于此,我打赌有一个未被注意(可能是无声的)前面的错误,这是真正需要解决的问题。我建议到目前为止检查运行的完整ODBC跟踪。