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