在VC程序中对应表用的是CRecordset类,通过ODBC连接Oracle8i数据库,通过SQL语句“select count(*) from TABLE”可得到TABLE表中的记录数量,但如何将记录数量返回给一个整型变量i;或者还有什么其它办法可得到记录数量的值(注:调用GetRecordCount()函数不行,因为如果记录量很大,调用次函数会很耗时)。

解决方案 »

  1.   

    可以这样!
    SElECT count(*) 'Count' from TABLE;
    然后_variant_t vTemp;
    vTemp =  pRecordset->GetCollect("Count");
    int Count;
    Count = (LPCTSTR)(_bstr_t)vTemp;
    最后一句有可能有误,好像是Count = vTemp.dVal
      

  2.   

    在VC中可以直接使用SQL吗?怎么使用??我想返回一列中的最大值?怎么做??用CRecordSet怎么做??谢谢.
      

  3.   

    楼上是问我的吗?
    可以去http://www.vckbase.com/vckbase/vckbase10/index.html看一下!
      

  4.   

    谢谢sony19791015(武短) ,但是我用你的方法程序提示“GetCollect”不是pRecordset的成员函数;Count = (LPCTSTR)(_bstr_t)vTemp;这句程序中说_bstr_t没有定义;不知是哪出了问题,希望不吝赐教!
      

  5.   

    m_pRecordset->Open("SELECT * FROM users",_variant_t((IDispatch *)    m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
    应该可以的啊!我用的都可以啊
    _RecordsetPtr m_pRecordset;
    m_pRecordset.CreateInstance("ADODB.Recordset");
    是不是没有初始化!
      

  6.   

    在应用中出现这样的问题:“参数不足,期待是1”是什么原因呀?
    这和我同时使用两个记录集有关吗?我声明两个CRecordSet对象,然后连接就出现这样的错误。代码如下:
    CLinkUser CLink是两个CRecordSet的派生类。
    CLinkUser m_pSet;
    CLink     m_oSet;
    if(!m_pSet.IsOpen()||!m_oSet.IsOpen()){
       if(!m_pSet.Open()||!m_oSet.OPen()) AfxMessageBox("link error");m_oSet.m_strFilter="role_rem = m_cRole";
    m_oSet.m_strSort="role_id";
       if(!m_oSet.Requery()){
        m_updata=FALSE;
        }请高手帮忙看看吧。
      

  7.   

    谢谢sony19791015(武短) ,我通过ODBC连接Oracle8i数据库,用的是CRecordset类,而不是CADORecordset类。你的方法可以吗?
      

  8.   

    这个我就不清楚了,我用的是CADORecordset。
      

  9.   

    如果用记录集的话
    使用GetRecordCount()函数
    然后把邮标从头移动到结尾
      

  10.   

    不行,用GetRecordCount()函数必须从第一条循环到最后一条,这样如果数据量大就非常耗时!
    快帮忙!