我使用的是CRecordset类,在循环取数据时经常会出现无效的游标错误,这个错误是在异常里捕捉到的,我经过调试发现是在MoveNext时出现的,但是我的代码是判断了IsBOF和IsEOF的。后来我看帮助文档里有这么一句话:
if you have scrolled past the end of the recordset, IsEOF will return nonzero; a subsequent call to MoveNext would throw an exception. 
就是说我超过了表的最后一条记录后,IsEOF会返回非0值,接下来再调用MoveNext就会出现异常。
这究竟是怎么造成的呢?大家帮忙看看我的伪代码:
TRY
{
if (!rs.IsBoF())
rs.MoveFirst();while(!rs.IsEoF())
{
dosomething...
rs.MoveNext();
}
}
CATCH(CDBException* e)
{
e->ReportError();
}

解决方案 »

  1.   

    顺带再问个问题,我的数据库的一次操作有可能涉及多张表,有查询,也有更新操作。查询的话我目前的做法是用联合查询的方式,更新数据的话我用的是分别更新的方式。我感觉不是很高效,请问有没有高效的处理方式?或者帮我推荐几本书我看看?(最好是著名的书哦,例如C++搞编程就最好看看《windows 核心编程》一样)
      

  2.   

    判断是否为空?if( rsCustSet.IsBOF( ) )
        return;
        // The recordset is empty// Scroll to the end of the recordset, past
    // the last record, so no record is current
    while ( !rsCustSet.IsEOF( ) )
        rsCustSet.MoveNext( );
      

  3.   

    (最好是著名的书哦,例如C++搞编程就最好看看《windows 核心编程》一样)
    ---------书后面不是有延伸阅读么
      

  4.   

    《windows 核心编程》里有关于数据库编程的延伸文章?你指的哪一版书?我手头上的怎么没有呢?