CRecordset问题:符合查询条件的记录有多少,为什么我只能得到第一个记录?
我用CRecordset过滤查询,如查“SELECT * from 表1 where 列1 = 'aa'”
在表1中列1='aa'的记录有5条,可是我这样查询后得到的只有一条。
CRecordset rs;
rs.Open(::dynaset, "SELECT * from 表1 where 列1 = 'aa'");
然后我用
int n = rs.GetRecordCount(); //n=1
rs里也只有第一条记录的数据
问题点数:60、回复次数:7Top
1 楼show_me_the_money(zzz...)回复于 2001-10-30 09:58:27 得分 0
我用的是:
rs.Open(CRecordset::dynaset, "SELECT * from 表1 where 列1 = 'aa'");
上面打错了
另一种打开方式也试过:
rs.m_strFilter = "列1 = 'aa'";
rs.Open();
Top
2 楼jslj(英名神武、德配天地)回复于 2001-10-30 10:24:05 得分 10
CRecordset::dynaset?换其它的方式试试,比如快照。Top
3 楼zhr_kiss(天奇)回复于 2001-10-30 10:36:05 得分 0
我不知道。Top
4 楼show_me_the_money(zzz...)回复于 2001-10-30 10:37:18 得分 0
用快照倒是得到了正确的记录数5
即rs.GetRecordCount()的结果正确,可是仍只有第一条记录的数据,用movenext却能移5次(最后一次移动记录的数据没变。真是奇怪)Top
5 楼hqskoala(考拉·桉树叶蒸熟了才好吃)回复于 2001-10-30 12:18:16 得分 30
msdn上说GetRecordCount()的维护方式是“high water mark”。就是说它得到的结果是你曾经访问过的最大记录数。首先要call MoveNext repeatedly until IsEOF returns nonzero!Top
6 楼show_me_the_money(zzz...)回复于 2001-10-30 13:31:27 得分 0
这点我也发现了。Top
7 楼jazzrabbit(爵士兔)回复于 2001-10-30 14:47:05 得分 20
快速的是直接用sql来取其记录数.
CString sql;
sql.Format("select count(*) from %s",myrecordset.GetDefaultSQL());
if (myrecordset.Open(CRecordset::forwardOnly,sql)){
CDBVariant dbv;
myrecordset.GetFieldValue((short)0,dbv);
//检查dbv类型
dbv.lVal--->是要的记录数.
....
Top




