278上位机VC MFC使用DAO实现数据库记录排序
278上位机VC MFC使用DAO实现数据库记录排序
功能展示
在用DAO进行编写数据库程序进行检索数据库记录时,有时要根据不同的检索需要,快速打开想要内容,这就得根据不同字段实现数据库记录的排序,我们当前实现演示通过三种方法,按学号,姓名年龄排序实现对数据库记录集的排序,将显示在列表控件中,效果如图 要点提示 1.我们可以指定数据表中的一个或多个列作为排序的基础,而且可以指定排列规则为长或降序即ASC 或DESC,前者为默认值,
2.若指定使用两个列作为排序的基础,则记录集将先根据第一个列进行排序,然后再按第二个列进行 排序,当框架为记录集的SQL查询添加ORDER BY从句时,该从句将控制选择的顺序 3.要为记录对象指定排序顺序,则应该: 创建一个新记录集对象,或准备调用一个已打开的记录集对象的REQUERY函数。 设置记录集对象的M_STRSORT数据成员,它包含了ORDER BY从句的内容,但是并不包括ODER BY关键字 调用新记录集对象的OPEN函数或调用已打开的记录集对象的REQUERY函数
4.如果 在调用OPEN函数时传递定制的SQL字符串进行查询,则如果 在该字符串中具有ORDER BY从句,就不应该再使用m_strsort定制排序,此外如果记录集是基于或标定义的,就不能通过设置m_strsort来达到排序的目的 实现功能 1.新建基于单文档应用程序,在创建过程中选择基于DAO,数据库文件选择例程根目录数据库文件,表选择course,具体的创建操作过程可以参考视频演示;
2.根据例程界面添加一列表控件ID为IDC_LIST,并初始化此列表控件 - //<>初始化列表控件
- CListCtrl *pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST);
- pListCtrl->DeleteAllItems();
- pListCtrl->ModifyStyle(0,LVS_REPORT,0);
- pListCtrl->InsertColumn(0,"学号",LVCFMT_CENTER,50);
- pListCtrl->InsertColumn(1,"姓名",LVCFMT_CENTER,50);
- pListCtrl->InsertColumn(2,"年龄",LVCFMT_CENTER,40);
- pListCtrl->InsertColumn(3,"课程",LVCFMT_CENTER,70);
- pListCtrl->InsertColumn(4,"评价",LVCFMT_CENTER,50);
复制代码3.添加三个按钮控件,按学号排序,按姓名排序,按年龄排序关联点击函数 - void CGkbc8View::OnBid() //按学号排序
- {
- m_pSet->m_strSort="id DESC";
- m_pSet->Requery();
- Display();
- }
- void CGkbc8View::OnBname() //按姓名排序
- {
- m_pSet->m_strSort="name DESC";
- m_pSet->Requery();
- Display();
- }
- void CGkbc8View::OnBage() //按年龄排序
- {
- m_pSet->m_strSort="age DESC";
- m_pSet->Requery();
- Display();
- }
复制代码4.三个按钮都调用有我们自定义的函数Display(),所以最后我们得实现这一函数 - void CGkbc8View::Display()
- {
- CListCtrl *pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST);
- pListCtrl->DeleteAllItems();
- if(!m_pSet->IsOpen())
- m_pSet->Open();
- m_pSet->MoveFirst();
- CString str;
- int nItem;
- while(!m_pSet->IsEOF())
- {
- str.Format("%d",m_pSet->m_id);
- nItem=pListCtrl->InsertItem(0,str);
- pListCtrl->SetItemText(nItem,1,m_pSet->m_name);
- str.Format("%d",m_pSet->m_age);
- pListCtrl->SetItemText(nItem,2,str);
- pListCtrl->SetItemText(nItem,3,m_pSet->m_course);
- pListCtrl->SetItemText(nItem,4,m_pSet->m_comment);
- m_pSet->MoveNext();
- }
- m_pSet->MoveFirst();
- }
复制代码我们来演示下整个功能实现 过程
|