我用ODBC数据库编程,程序中需要返回记录数,用CRecordset正常打开数据库,调用GetRecordCount()在数据库没记录的时候,返回0,当记录数>0的时候,永远返回的都是1,郁闷中,哪个高手可以解决啊

解决方案 »

  1.   

    如果你不边历RecordSet,GetRecordCount()是不能得到实际的纪录的
      

  2.   

    怎么边历啊,晕,难道用MoveNext一步步走吗,天啊,你说的再详细一点嘛
      

  3.   

    while(!m_recordset->IsEOF())
    {
         m_recordset->MoveNext();
         ...................
    ......................
    }
         m_recordset->GetRecordCount();
    一定是要MoveNext()的!
      

  4.   

    555,那VC这样做不是很浪费系统资源啊,有没有别的办法,比如直接MoveLast或者用别的函数
      

  5.   

    用book 指向最高记录后,GetRecordCount()将返回指向最高记录的记数。
      

  6.   


    十分关注,我在用ODBC编程时也遇到了一模一样的问题,GetRecordCount()总是返回1。jjqiao710102(aqiao) 的方法也许可以,
    当时我的办法只有先MoveFirst( ),再判断IsEOF(),然后再MoveNext(),一个一个加下去,最后才得到结果,但这样做也太蠢了
      

  7.   

    GetRecordCount
    ==============
    The record count is maintained as a “high water ” — the highest-numbered record yet seen as the user moves through the records. The total number of records is only known after the user has moved beyond the last record. For performance reasons, the count is not updated when you call MoveLast. To count the records yourself, call MoveNext repeatedly until IsEOF returns nonzero. Adding a record via CRecordset:AddNew and Update increases the count; deleting a record via CRecordset::Delete decreases the count. 
      

  8.   

    RecordSet的GetRecordCount返回的是所遍历的记录的个数,不管用什么办法,只要遍历所有的记录即可,但是MoveLast是不行的!
      

  9.   


    zhuojohn(闲云野鹤) 所说的是在MSDN上GetRecordCount()的Re,我早就看过几遍,想来想去还真的只有用如下方法才行:定义一个成员变量m_nCount,用于记录当前recordset的record个数;
    自定义一个Count()函数,功能就是像上面说的"蠢方法"
    MoveFirst( ),再判断IsEOF(),然后再MoveNext(),一个一个加下去,
    然后在每次open()之后都调用Count( )
    最后在添加 或 删除 操作后,记得加上加一或减一 m_nCount ... ...至于GetRecordCount(),让它食屎拉
      

  10.   

    可以考虑用两次查询,用同样的条件
    select count(1) from table where 条件
    如果有记录,再执行真正的查询
    这样效率应该好些,我一直是这样处理的:)GetRecordCount()是在你处理完记录之后用的
      

  11.   

    游标问题。
    使用静态游标就可以了。
    缺省是动态游标,数据并不全部下载到本地,以加快速度。
    另外的解决方案,就是使用查询语句select count(*)
      

  12.   

    pset->Open(CRecordset::dynamic,"select * from qk")
    改变游标是不是就是指改变CRecordset::的枚举植啊,不过这样做就没有动态集的好处了吧
    SELECT COUNT还是可以考虑的,谢谢