odbc - SQLSetPos 中的游标状态无效
问题描述
全部,
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 的功能,所以我认为我应该使用这个,但它失败了。
我如何解决它?或者也许有另一种方法可以做我想做的事?
蒂亚!!
解决方案
ODBC API 文档声明此错误会在以下情况下产生——
处于执行状态,但没有结果
StatementHandle
集与StatementHandle
.(DM) 在 上打开了一个游标
StatementHandle
,但SQLFetch
或者SQLFetchScroll
没有被调用。游标在 上打开
StatementHandle
,并且SQLFetch
或SQLFetchScroll
已被调用,但游标位于结果集开始之前或结果集结束之后。参数
Operation
是SQL_DELETE
、SQL_REFRESH
或SQL_UPDATE
,并且光标位于结果集的开头之前或结果集的结尾之后。
基于此,我敢打赌前面存在一个未被注意到的(可能是无声的)错误,这是真正需要解决的问题。到目前为止,我建议查看运行的完整 ODBC 跟踪。
推荐阅读
- mysql - 获取子查询 SQL 的平均值
- pycharm - Pycharm:将光标多行选择作为块
- sql-server - 具有并发控制的存储过程
- java - 修改Filter中URI的PathParam
- javascript - 从 Promise 返回数据并在 API 调用后将其存储在变量中
- javascript - 如何将 DOM 节点存储到像 jQuery 一样的变量中?
- node.js - 猫鼬 findById 返回 null
- scroll - offsetTop / getBoundingClientRect().top 元素的位置:sticky
- python - 插入到不使用 Python 的数据库表中
- django - 使用 postgis 和 mongodb django