• ado 获取记录集


    VC使用ADO技术访问数据表,打开数据表后,获得了记录集,如何获得记录数量?一个小问题,没想到还有点意思,实践完成,总结一下。

     

    方法一、用静态、键集游标方式打开数据表

     

    p_hr = m_pRecordset->Open(_variant_t(bstrQuery),vNull,adOpenStatic,adLockOptimistic,adCmdText);

     

    然后用GetRecordCount()函数,即可获得记录数量。

    m_pRecordset->GetRecordCount();

     

    另外用键集游标方式也可以获得,adOpenKeyset (键集游标),但是用adOpenDynamic  (动态游标)方式,就只会返回-1。

     

    补充:

    adOpenStatic   静态游标   ,   其它用户的修改对当前用户是不可见的.   
    adOpenDynamic   动态游标   ,   所有的修改对当前用户是见的.   
    adOpenKeyset   是前两种的折衷   ,   改对当前用户是见的.   但性能是最低的.  

      
      多个用户都使用同一张表,且对其进行修改的可能都很大,则最好使用   adOpenKeyset。

      如只是浏览, 使用adOpenStatic   可提高性能!  

     

    参考地址:http://topic.csdn.net/t/20010224/21/74898.html

     

    方法二、用SQL语句实现

     

    “select   count(*)   from   表名;”,这样就不用关心游标的方式了。

    例子如下:

     

    rs->Open("select   COUNT(*)   from   tbUsersInfo",strCnn,   
                          adOpenKeyset,adLockOptimistic,adCmdText);   
    long   RecordCount;   
    RecordCount=rs->Fields->GetItem((long)0)->GetValue();

     

    还有一个例子:

     

    m_pRecordset   =   m_pConnection->Execute("SELECT   COUNT(*)   FROM   表名",&RecordsAffected,adCmdText);   
    _variant_t   vIndex   =   (long)0;     
    _variant_t   vCount   =   m_pRecordset->GetCollect(vIndex);   
    CString   message;   
    message.Format("共有%d条记录",vCount.lVal);   
    AfxMessageBox(message);

     

    补充:

    先将纪录集的CursorLocation   =   adUseClient;   
    然后就可以了

     

    参考地址:http://topic.csdn.net/t/20020406/17/627591.html

    http://topic.csdn.net/t/20011109/11/362353.html

     

    总之感觉很意思,一个小问题,却有几种不同的解决方法,而且对于不同的数据库,还有点不一样。

    本人目前只是用Access试过,没问题,估计对SQL Server 也没问题,Oracle就不好说了。
     

  • 相关阅读:
    Eclipse遇到Initializing Java Tooling终极解决办法
    Quartz定时任务框架理解
    Quartz定时任务调度
    jQueryEasyUI Messager基本使用
    转一篇关于Log4j的介绍文章,很详细
    android联系人
    手机中预置联系人(姓名,号码,头像)
    android获取硬件信息
    Sumatra pdf更改起始页面的黄色颜色
    Eclipse背景颜色设置(设置成豆沙绿色保护眼睛,码农保护色)
  • 原文地址:https://www.cnblogs.com/forgood/p/3000776.html
Copyright © 2020-2023  润新知