CRecordset类中的m_strFilter和m_strSort问题

CRecordset类中的m_strFilter和m_strSort问题
2011-09-06 10:46

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使用

分类: MFC   236人阅读  评论(1)  收藏  举报

错误一:“标准表达式数据类型不匹配”

原因:CRecordSet语句有错误

如,m_strFilter.Format(L"nAge='%s'",L"22"),若在数据库mdb中nAge字段格式是数字,则会出现“标准表达式数据类型不匹配”错误。

正确应该去掉'%s'的单引号,为m_strFilter.Format(L"nAge=%s",L"22")。

当过滤字段为文本格式时才用单引号。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值