• 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就不好说了。
     

  • 相关阅读:
    使用 requests 维持会话
    使用 requests 发送 POST 请求
    使用 requests 发送 GET 请求
    requests 安装
    使用 urllib 分析 Robots 协议
    使用 urllib 解析 URL 链接
    使用 urllib 处理 HTTP 异常
    使用 urllib 处理 Cookies 信息
    使用 urllib 设置代理服务
    按单生产程序发布
  • 原文地址:https://www.cnblogs.com/forgood/p/3000776.html
Copyright © 2020-2023  润新知