用ADO访问SQL数据库时,调用存储过程,得到记录集后,用m_pRecordset->GetRecordCount得到的记录数为-1,所以就用pRecordset->Next()遍历了一遍记录集,得到正确的记录数,但是现在需要将记录集中所有字段的值取出来,因为之前遍历过一次,我想需要将指针用m_pRecordset->First()移动到第一条记录才能取值。
但是m_pRecordset->MoveFirst()就出错,这是为什么?我应该怎么做

解决方案 »

  1.   


    m_pRecordset-> MoveFirst(); 
    while(!m_pRecordset-> adoEOF)

         //your code 
          m_pRecordset-> MoveNext(); 

      

  2.   

       int  RecordCount = 0;//我用这个变量时为了后续在分页显示记录,每页200条,计算页数和不足两百条时的记录数 if(!m_pRecordset->adoBOF && !m_pRecordset->adoEOF)//如果记录不为空
    {
    while(!m_pRecordset->adoEOF)//EOF重定义成adoEOF  
    {  
    RecordCount++; 
    m_pRecordset->MoveNext(); 

    }
    else
    {
      AfxMessageBox(_T("记录集为空"));
      return FALSE; }
             m_pRecordset->MoveFirst();在这里出错 while(!m_pRecordset->adoEOF)//遍历所有记录

               mycode;
               m_pRecordset->MoveNext();
             }
      

  3.   


    try{
    m_pRecordset->MoveFirst();
    }
    catch(_com_error e)
    {
    AfxMessageBox(e.Description());
    }就可以看到出错原因了,估计都是游标问题
      

  4.   

    有的游标不支持前移 只能后退 
    打开数据库的时候需要指定好 具体方法忘了 Google一下 
      

  5.   

    http://download.csdn.net/source/2355689这里可能有你想要的东西 
      

  6.   

    if(!m_pRecordset->adoBOF && !m_pRecordset->adoEOF)//如果记录不为空
    {
    while(!m_pRecordset->adoEOF)//EOF重定义成adoEOF   
    {   
    RecordCount++;  
    m_pRecordset->MoveNext();  
    }  
    }
    else
    {
    AfxMessageBox(_T("记录集为空"));
    return FALSE;}
    你把这段先注释 运行看看  上面的资源分很高 如果没分了,就发我邮箱 我发你一份[email protected]
      

  7.   

    ADO Open后默认指向第一条
    然后用下面的代码就可以了
    while(!m_pRecordset-> adoEOF)

         //your code 
          m_pRecordset-> MoveNext(); 
      

  8.   

    ADO访问SQL数据库时,调用m_pRecordset->GetRecordCount得到的记录数为-1,是因为你用记录集前没有加:   m_pRecordset->CursorLocation =adUseClient;
      

  9.   

    多谢各位的帮助,问题解决了。
    首先连接数据库后,然后用m_pRecordset->Open函数,函数将第一个参数直接写成执行存储过程的语句“exec ProcName,paramtername”这样可以得到正确的记录集个数,并可以得到正确的结果。
    前提是我的存储过程已经在服务器的SQL2000的数据库中写好了
      

  10.   

    分析原因:用m_pRecordset->GetRecordCount得到的记录数为-1:原因为,一般情况下当ADO不能确定记录条数,或者连接提供者、游标类型都不支持RecordCount的时候,RecordCount属性都将返回-1。而在一个已经关闭了的Recordset上读取这个属性会引起错误。方法:
    在m_pRecordset->Open()前加上:
    //设置好游标(静态/客户)
    m_pRecordset->CursorType = adOpenStatic;
    m_pRecordset->CursorLocation = adUseClient;
      

  11.   

            楼上的正解,一般RecorderCount返回-1都是游标设置的问题,我以前也碰到过.具体可以查一下MS关于ADO的相关帮助就清楚了.