CRecordset类有两个公共数据成员m_strFilter和m_strSort用来设置对记录的过滤和排序.在调用Open或Requery前,如果在这两个数据成员中指定了过滤或排序,那么Open和Requery将按这两个数据成员指定的过滤和排序来查询数据源. 成员m_strFilter用于指定过滤器.m_strFilter实际上包含了SQL的WHERE子句的内容,但它不含WHERE关键字.使用m_strFilter的一个例子为: m_pSet->m_strFilter=“CourseID=‘MATH101’”; //只选择CourseID为MATH101的记录 if(m_pSet->Open(CRecordset::snapshot, “Section”)) . . . . . . 成员m_strSort用于指定排序.m_strSort实际上包含了ORDER BY子句的内容,但它不含ORDER BY关键字.m_strSort的一个例子为 m_pSet->m_strSort=“CourseID DESC”; //按CourseID的降序排列记录 m_pSet->Open(); . . . . . . 事实上,Open函数在构造SELECT语句时,会把m_strFilter和m_strSort的内容放入SELECT语句的WHERE和ORDER BY子句中.如果在Open的lpszSQL参数中已包括了WHERE和ORDER BY子句,那么m_strFilter和m_strSort必需为空. 调用无参数成员函数Close可以关闭记录集.在调用了Close函数后,程序可以再次调用Open建立新的记录集.CRecordset的析构函数会调用Close函数,所以当删除CRecordset对象时记录集也随之关闭。
最近要用MFC做个软件实习,其实很简单,只是其中有一些地方没接触,m_strFilter的用法,真是被折腾了的不行。还好弄出来,记下来,防止别人遇到同样的问题。我用m_strFilter实现的是一个查询功能,其它没有什么,只是表中的“字段名”必须用[]括起来,比如表中有一个字段名为“姓名”,用strFilter表示“姓名="张三"”,须写成 m_pset->m_strFilter="[姓名] like '张三'"; 而且单引号是必须要的。
错误一:“标准表达式数据类型不匹配” 原因:CRecordSet语句有错误 如,m_strFilter.Format(L"nAge='%s'",L"22"),若在数据库mdb中nAge字段格式是数字,则会出现“标准表达式数据类型不匹配”错误。 正确应该去掉'%s'的单引号,为m_strFilter.Format(L"nAge=%s",L"22")。 当过滤字段为文本格式时才用单引号。 |
CRecordset类中的m_strFilter和m_strSort问题
最新推荐文章于 2022-07-29 02:04:31 发布
2011-09-06 10:46