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

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值