263上位机VC MFC使用ODBC显示与排序数据表全部记录
263上位机VC MFC使用ODBC显示与排序数据表全部记录
功能展示
我们在显示记录集的全部数据时,时常会因为添加,删除或修改数据记录,使得数据的显示杂乱无章,我们当前例程实现通过数据表的不同字段进行排序,效果如图,点击菜单的排序,有三个选项<按学号排序><按姓名排序><按时间排序>可以实现不现的排序方法;
要点提示
1.数据库表的排序可以通过Crecordset类的成员变量m_strSort来实现,排序时记得事先得关闭已经打开的记录集,如我们当前的例程实现代码m_pSet->Close();m_pSet->m_strSort="ID";m_pSet->Open(CRecordset::snapshot,NULL,CRecordset::readOnly); 实现功能 1.新建基于单文档的应用程序; 2.再用类向导新建一基于Crecordset的类CODBCSet; 在文档中类中添加此类的头文件#include “ODBCSet.h”及变量public:CODBCSetm_ODBCSet;在视窗中添加此类的头文件#include “ODBCSet.h”及变量public:CODBCSet *m_pSet; UINT m_nSortFlag; 3.在视窗的初始化函数OnInitialUpdate()中初始变量的初始化 void CGkbc8View::OnInitialUpdate() { CScrollView::OnInitialUpdate(); //<> m_nSortFlag =0; CSize sizeTotal; sizeTotal.cx =sizeTotal.cy = 100; SetScrollSizes(MM_TEXT,sizeTotal); SetScrollSizes(MM_HIENGLISH,sizeTotal); m_pSet=&GetDocument()->m_ODBCSet; if(m_pSet->IsOpen())//检查记录集是否打开 m_pSet->Close();//关闭记录集 m_pSet->Open();//打开记录集
} 4.在视窗类的OnDraw()函数中实现数据表内容的全部读取与显示 - void CGkbc8View::OnDraw(CDC* pDC)
- {
- CGkbc8Doc* pDoc = GetDocument();
- ASSERT_VALID(pDoc);
- // TODO: add draw code for native data here
- TEXTMETRIC txtm;
- int nLineHight,y=0;
- CString str;
- pDC->GetTextMetrics(&txtm);
- nLineHight=txtm.tmHeight+txtm.tmExternalLeading;
- CPoint point(0,0);
- if(m_pSet->IsBOF())//检查是否空记录集
- return;
- m_pSet->MoveFirst();
- pDC->TextOut(point.x,point.y,"StudentID");//在点point(x,y)显示StudentID
- pDC->TextOut(point.x+1000,point.y,"StudentName");
- pDC->TextOut(point.x+4000,point.y,"GradYear");
- point.y-=nLineHight;
- point.y-=nLineHight;
- if(m_nSortFlag==0)
- {
- m_pSet->Close();
- m_pSet->m_strSort="ID";
- m_pSet->Open(CRecordset::snapshot,NULL,CRecordset::readOnly);
-
- while(!m_pSet->IsEOF())//循环,直到数据库末尾
- {
- str.Format("%d",m_pSet->m_ID);//把变量m_ID的值赋予变量str
- pDC->TextOut(point.x,point.y,str);
- pDC->TextOut(point.x+1000,point.y,m_pSet->m_Name);
- str.Format("%d",m_pSet->m_GradYear);
- pDC->TextOut(point.x+4000,point.y,str);
- m_pSet->MoveNext();//下移记录
- point.y-=nLineHight;
- }
- }
- if(m_nSortFlag==1)
- {
- m_pSet->Close();
- m_pSet->m_strSort="Name";
复制代码- m_pSet->Open(CRecordset::snapshot,NULL,CRecordset::readOnly);
- while(!m_pSet->IsEOF())//循环,直到数据库末尾
- {
- str.Format("%d",m_pSet->m_ID);//把变量m_ID的值赋予变量str
- pDC->TextOut(point.x,point.y,str);
- pDC->TextOut(point.x+1000,point.y,m_pSet->m_Name);
- str.Format("%d",m_pSet->m_GradYear);
- pDC->TextOut(point.x+4000,point.y,str);
- m_pSet->MoveNext();//下移记录
- point.y-=nLineHight;
- }
- }
- if(m_nSortFlag==2)
- {
- m_pSet->Close();
- m_pSet->m_strSort="GradYear";
- m_pSet->Open(CRecordset::snapshot,NULL,CRecordset::readOnly);
-
- while(!m_pSet->IsEOF())//循环,直到数据库末尾
- {
- str.Format("%d",m_pSet->m_ID);//把变量m_ID的值赋予变量str
- pDC->TextOut(point.x,point.y,str);
- pDC->TextOut(point.x+1000,point.y,m_pSet->m_Name);
- str.Format("%d",m_pSet->m_GradYear);
- pDC->TextOut(point.x+4000,point.y,str);
- m_pSet->MoveNext();//下移记录
- point.y-=nLineHight;
- }
- }
- }
复制代码添加三个菜单对变量m_nSortFlag进行赋值 - void CGkbc8View::OnId()
- {
- m_nSortFlag=0;Invalidate();}
- void CGkbc8View::OnYear()
- {
- m_nSortFlag=1;Invalidate(); }
- void CGkbc8View::OnName()
- {
- m_nSortFlag=2;Invalidate();}
复制代码我们来演示功能实现的整个过程
|