m_recordSet->Open(buf,m_pConnection.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdText);
其中buf是一个SQL语句,
如何得到返回的行数?
GetRecordCount()结果为0,
还有其他办法吗?

解决方案 »

  1.   

    这个问题我也老是碰到,你可以那样直接在SQL里面加个count(*)比如select field,count(*) as Total from table你看看行不行
      

  2.   

    用count(*)是不行的,sql语句会出错。
    如果这样调用不行的话,可能是你的OLE DB Provider不支持。
    你是连接什么数据库的?连接字符串是怎么写的?
      

  3.   

    GetRecordCount()在第一次打开数据库时候不能用,意思是如果没有到过最后记录的话,GetRecordCount()是不能正确的取得数量的
      

  4.   

    int CDetailsApp::GetRecordsCount(CString strSQL)
    {
    //构造SQL语句
    CString strStatement(_T(""));
    strSQL.MakeLower();
    int iPos = strSQL.Find(_T("from"));
    if (iPos > 0)
    {
    strStatement = strSQL.Right(strSQL.GetLength() - iPos);
    strStatement = _T("SELECT count(*) ") + strStatement;
    } _RecordsetPtr m_Set; try
    {
    //初始化记录集对象
    m_Set.CreateInstance(__uuidof(Recordset)); //查询
    m_Set->Open(_variant_t(strStatement),
    g_pConn.GetInterfacePtr(),
    adOpenForwardOnly,
    adLockReadOnly,
    adCmdText);
    if (m_Set->State != adStateOpen)
    {
    return 0;
    } _variant_t Holder;
    if(!m_Set->EndOfFile)
    {
    _variant_t Holder = m_Set->GetCollect((_variant_t)(long)0);
    int iCount = _ttol((LPCTSTR)_bstr_t(Holder)); return iCount;
    }
    else
    {
    return 0;
    }
    }
    catch(...)
    {
    return 0;
    }
    return 0;
    }
      

  5.   

    打开方式有错,使用参数adOpenStatic,才可以,
    adOpendynamic总是得到记录数0ADO在多线程的时候它的有时是return的更是-1,可能是一个BUG吧,自己计数吧
    int count;
    while(!m_pRecordset->adoEOF)
    {

    count++;
    m_pRecordset->MoveNext();
    }
            m_pRecordset->MoveFirst();
      

  6.   

    Recordset15::GetRecordCount
    Recordset15::get_RecordCount
      

  7.   

    GetRecordCount()应该没问题啊,我在VC里用没有问题,但是在CB中需要先将Query调用一下MoveEnd()才正确。
      

  8.   

    我在vc里面用GetRecordCount也没问题
    打开方式是
    ->Open(.. ,adOpenDynamic, adLockOptimistic, adCmdText)
      

  9.   

    弄个变量记录,NEXT一次记一次当adoEOF的时候把变量的值读出来不就是行数了吗?
      

  10.   

    我在vc里面用GetRecordCount也没问题
    打开方式是
    ->Open(.. ,adOpenDynamic, adLockOptimistic, adCmdText)能看一下您的链接语句吗?
    我使用的ODBC连接
    改成adOpenDynamic,还是返回,结果是-1
      

  11.   

    改变m_recordSet m_pConnection的属性,一个为只读,一个为客户端
    肯定好使!
      

  12.   

    使用GetRecordCount前,要遍历一下!
      

  13.   

    while(!m_recordset->IsEOF())
    {
    ...
    m_recordset->MoveNext();
    }