8.2.2查询记录
使用CRecordSet类的成员变量m_strFilter、m_strSort和成员函数Open可以对表进行记录的查询和排序。示例如下图4所示:
图4:添加查询控件
(1)在上面项目中,你打开资源栏,点开Dialog,双击IDD_MY_FORM,在学
生表下面,加一静态控件写:要查询的学号,接着再加一个编辑控件,ID为:IDC_EDIT_QUERY,再加一个按钮控件,ID号为:IDC_BUTTON_QUERY
Caption标题处写:查询
(2)打开MFC ClassWizard对话框,为控件IDC_EDIT_QUERY添加CString类型的关联变量m_strQuery。
(3)在View类中添加按钮控件IDC_BUTTON_QUERY的BN_CLICKED消息映射,并加下列代码:
voidCMyView::OnButtonQuery()
{
// TODO: Add your control notificationhandler code here
UpdateData();
m_strQuery.TrimLeft();
if(m_strQuery.IsEmpty())
{
MessageBox("要查询的姓名不能为空");
return;
}
if(m_pSet->IsOpen())
m_pSet->Close();//如果记录集打开,则先关闭
m_pSet->m_strFilter.Format("stuid='%s'",m_strQuery);
//stuid是xs表的字段名,用来指定查询条件
m_pSet->m_strSort="name";
//name是xs表的字段名,用来按name字段从小到大排序
m_pSet->Open();
if(!m_pSet->IsEOF())//如果打开记录集,有记录
UpdateData(FALSE);//自动更新表中控件显示的内容
else
MessageBox("没有找到你要查找的名字!");
}
其中:m_strFilter和m_strSort是CRecordSet的成员变量,用来执行条件查询和排序。m_strFilter称为"过滤字符串",相当于SQL语句中WHERE后的条件串。m_strSort称为"排序字符串",相当于SQL语句中ORDER BY后的字符串。若字段的数据类型是文本,则需要在m_strFilter字符串中用单引号将查询的内容括起来;对于数字,则不需要用单引号。需要注意的是:只有在调用Open函数之前设置m_strFilter和m_strSort才能保证查询和排序有效。如果有多个条件查询,则可以使用AND、OR、NOT来组合,例如:
m_pSet->m_strFilter="stuid>='990103'ANDstdio<='990101'";
需要说明的是,如果查询的结果有多条记录,则可以用CRecordSet类的MoveNext(下移一个记录)、MovePrev(上移一个记录)、MoveFirst(定位到第一个记录)和MoveLast(定位到最后一个记录)等函数来移动当前记录位置进行操作。
(4)编译运行