当你使用了m_strfilter来过滤后,
你再使用 MoveNext来移动记录集光标时,
那些不在筛选范围内的记录将不会再被光标选中
你可以认为现在你的CRecordset集合中只存在你筛选后符合条件的记录了这些记录你可以使用 MoveFirst, 然后使用MoveNext来依次显现出来啊.
你再使用 MoveNext来移动记录集光标时,
那些不在筛选范围内的记录将不会再被光标选中
你可以认为现在你的CRecordset集合中只存在你筛选后符合条件的记录了这些记录你可以使用 MoveFirst, 然后使用MoveNext来依次显现出来啊.
degyhy123(degyhy) :
怎么判断是最后一个?!!
还和以前一样判断啊!
你可以认为使用了 m_strfilter过滤了以后,被过滤掉的记录已经不在记录集中存在了,现在剩下的记录集是一个新的符合过滤条件的记录集.
所以还是可以使用 EOF来判断是否到达记录集的最后一条的. 还有,一个记录集不是针对ACCESS或者别的数据库的,它之所以能访问这么多的数据库,是因为系统提供了访问这些数据库的驱动,ADO 通过OLEDB访问底层的各种数据库,这就是有些OLEDB的特性在不同的数据库上有不同程度支持的原因,那是因为这种数据库的驱动不支持这种特性的缘故.说到这里你可以明白记录集是和具体数据库无关的了吧?
呵呵,
m_pset->IsEOF();通过这个来判断,
建议用:
(m_pset->IsBOF&&m_pset->IsEOF())来判断
假设你建立的类名是CASet,那么:CASet* m_pSet;
m_pSet->m_strfilter="字段名=条件指";
if(m_pSet->Isopen()) m_pSet->Close();
m_pSet->Open();
if(m_pSet->IsBOF()) return;
m_pSet->MoveFirst();
While(!m_pSet->IsEOF){ //如果到了最后一个记录,循环结束,也就是说
//如果到了最后一个记录时m_pSet->IsEOF返回非0值
//输入显示记录m_pSet->...的函数;
.....
m_pSet->MoveNext();
}这样就能把符合查询条件的所有记录都显示出来了。
mdb.m_strfilter.format("name=%s",abc);
mdb.Open();
在双引号内填写你所需要的符合的条件
可以一次查询多条记录,
然后不断变换Filter以从Recordset中得到符合条件的记录,
设置Filter=“”则全部记录可见。
int index = lc.GetNextItem(-1,LVNI_SELECTED);
if(index==-1) AfxMessageBox("清选择更新纪录");
CString str = lc.GetItemText(index,0);
CString sql(_T("[Name] = "));
sql += "'";
sql += str;
sql += "'";
pRS->m_strFilter =sql;
pRS->Requery();
但我的代码是抄袭的,不明白为什么他就能选择不同的记录,还有为什么我的代码无论我在视图中选择那个记录,就只能显示一个相同的记录,
int index = lc.GetNextItem(-1,LVNI_SELECTED);
if(index==-1) AfxMessageBox("清选择更新纪录");
CString str = lc.GetItemText(index,0);
CString sql(_T("[Name] = "));
sql += "'";
sql += str;
sql += "'";
pRS->m_strFilter =sql;
pRS->Requery();
但我的代码是抄袭的,不明白为什么他就能选择不同的记录,还有为什么我的代码无论我在视图上选择那个记录,就能显示唯一的一个记录,