工控编程吧
标题:
263上位机VC MFC使用ODBC显示与排序数据表全部记录
[打印本页]
作者:
qq263946146
时间:
2016-4-23 21:54
标题:
263上位机VC MFC使用ODBC显示与排序数据表全部记录
(, 下载次数: 4)
上传
点击文件名下载附件
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();}
复制代码
我们来演示功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/f22671c858d5abdb97b95f4c2cb2df18/0/0/w_19rt5sqqdp.swf-albumId=5739450209-tvId=5739450209-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4