MFV_ODBC数据库编程.doc_第1页
MFV_ODBC数据库编程.doc_第2页
MFV_ODBC数据库编程.doc_第3页
MFV_ODBC数据库编程.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验十ODBC数据库编程一、实验目的:1 学习VC+6.0中MFC应用程序的运用。2 学习、运用ODBC数据库编程。二、实验环境:一台PC机VC+6.0、Windows xp或Windows 7操作系统三、实验内容: 创建一个基于CListView的单文档应用程序Ex_ODBC,用来操作ODBC源,“用于MFC ODBC的数据库”中指定数据库的score表。初始时列表中以报表样式显示出score表当前的记录内容。单击“操作”顶层菜单的下拉项“添加”、“修改”及“删除”可对score表进行相应操作,必要时还弹出“课程成绩信息”对话框四、实验记录1.创建数据库,在sql server2005创建数据库并创建一个score的表:2.在计算机中添加一个名为mystudent的ODBC数据源。 3.创建一个基于CListView的单文本运用程序,命名为Ex_ODBC。4在stdaf.h中文件中添加ODBC数据库支持的头文件包含#include ,在MFC ClassWizard为数据库中的表score添加CRecordset的派生类CScoreset作为表score的映射类。5.在Menu中添加“操作”顶层菜单,并在其下添加“添加”、“删除”、“修改”菜单项,命名ID。6. 在CEx_ODBCView:PreCreateWindow函数初始视图,添加代码如下:BOOL CEx_ODBCView:PreCreateWindow(CREATESTRUCT& cs)cs.style|=LVS_REPORT;return CListView:PreCreateWindow(cs);7在CEx_ODBCView:OnInitialUpdate函数中添加下列代码:void CEx_ODBCView:OnInitialUpdate()CListView:OnInitialUpdate();CListCtrl &m_ListCtrl=GetListCtrl();m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT);CScoreSet cSet;cSet.Open();CODBCFieldInfo field;for(UINT i=0;icSet.m_nField;i+)cSet.GetODBCFieldInfo(i,field);m_ListCtrl.InsertColumn(i,field.m_strName,LVCFMT_LEFT,100);cSet.Close();UpdateListItemData();8在CEx_ODBCView类中添加显示score表的成员函数UpdateListItemData:void CEx_ODBCView:UpdateListItemData()CListCtrl&m_ListCtrl=GetListCtrl();m_ListCtrl.DeleteAllItems();CScoreSet cSet;cSet.m_strSort=studentno,courseno;cSet.Open();int nItem=0;CString str;while(!cSet.IsEOF()for(UINT i=0;icSet.m_nFields;i+)cSet.GetFieldValue(i,str);if(i=0) m_ListCtrl.InsertItem(nItem,str);else m_ListCtrl.SetItemText(nItem,i,str);nItem+;cSet.MoveNext();cSet.Close();8.为“添加”菜单项添加映射函数OnOpAdd()添加代码:void CEx_ODBCView:OnDblclk(NMHDR* pNMHDR, LRESULT* pResult) CListCtrl&m_ListCtrl=GetListCtrl();POSITION pos ;pos=m_ListCtrl.GetFirstSelectedItemPosition();if(pos=NULL)MessageBox(应双击要修改的列表项);return;int nItem=m_ListCtrl.GetNextSelectedItem(pos);CString strStuNO=m_ListCtrl.GetItemText(nItem,0);CString strCourseNO=m_ListCtrl.GetItemText(nItem,1);CScoreset sSet;sSet.m_strFilter.Format(studentno=%s AND courseno=%s,strStuNO,strCourseNO);sSet.Open();CScoreDlg dlg;dlg.m_strCourseNO=sSet.m_courseno;dlg.m_strStuNO=sSet.m_studentno;dlg.m_fScore=sSet.m_score;dlg.m_fCredit=sSet.m_credit;if(IDOK!=dlg.DoModal()if(sSet.IsOpen()sSet.Close();return;sSet.Edit();sSet.m_score=dlg.m_fScore;sSet.m_credit=dlg.m_fCredit;sSet.Update();sSet.Requery();if(sSet.IsOpen()sSet.Close();MessageBox(当前只能修改成绩和学分,修改成功);UpdateListItemData();*pResult = 0;void CEx_ODBCView:OnOpAdd() CScoreDlg dlg;if(dlg.DoModal()=IDOK)CScoreset cSet;cSet.m_strFilter.Format(studentno=%s AND courseno=%s,dlg.m_strStuNO,dlg.m_strCourseNO);cSet.Open();if(!cSet.IsEOF()MessageBox(有相同的记录存在);cSet.Close();return ;cSet.AddNew();cSet.m_studentno=dlg.m_strStuNO;cSet.m_courseno=dlg.m_strCourseNO;cSet.m_score=dlg.m_fScore;cSet.m_credit=dlg.m_fCredit;cSet.Update();cSet.Requery();cSet.Close();MessageBox(记录已添加);UpdateListItemData();9.为“删除”菜单项添加映射函数OnOpDel()添加代码:void CEx_ODBCView:OnOpDel() CListCtrl & m_ListCtrl=GetListCtrl();POSITION pos;pos=m_ListCtrl.GetFirstSelectedItemPosition();if(pos=NULL)MessageBox(你还没有选中列表项);return;int nItem=m_ListCtrl.GetNextSelectedItem(pos);CString strItem,str;strItem=m_ListCtrl.GetItemText(nItem,0); str.Format(你确定要删除 %s 列表项(记录)吗?,strItem);if(IDOK!=MessageBox(str,删除确认,MB_ICONQUESTION|MB_OKCANCEL)return;CString strStuNO=m_ListCtrl.GetItemText(nItem,0);CString strCourseNO=m_ListCtrl.GetItemText(nItem,1);CScoreset infoSet;infoSet.m_strFilter.Format(studentno=%s AND courseno=%s,strStuNO,strCourseNO);infoSet.Open();if(!infoSet.IsEOF()CRecordsetStatus status;infoSet.GetStatus(status);infoSet.Delete();if(status.m_lCurrentRecord=0) infoSet.MoveNext();else infoSet.MoveFirst();if(infoSet.IsOpen() infoSet.Close();MessageBox(当前指定的记录已删除);UpdateListItemData();10.为Ex_ODBCView添加NM_DBLCLK映射函数,为修改功能,实现代码如下: void CEx_ODBCView:OnDblclk(NMHDR* pNMHDR, LRESULT* pResult) CListCtrl&m_ListCtrl=GetListCtrl();POSITION pos ;pos=m_ListCtrl.GetFirstSelectedItemPosition();if(pos=NULL)MessageBox(应双击要修改的列表项);return;int nItem=m_ListCtrl.GetNextSelectedItem(pos);CString strStuNO=m_ListCtrl.GetItemText(nItem,0);CString strCourseNO=m_ListCtrl.GetItemText(nItem,1);CScoreset sSet;sSet.m_strFilter.Format(studentno=%s AND courseno=%s,strStuNO,strCourseNO);sSet.Open();CScoreDlg dlg;dlg.m_strCourseNO=sSet.m_courseno;dlg.m_strStuNO=sSet.m_studentno;dlg.m_fScore=sSet.m_score;dlg.m_fCredit=sSet.m_credit;if(IDOK!=dlg.DoModal()if(sSet.IsOpen()sSet.Close();return;sSet.Edit();sSet.m_score=dlg.m_fScore;sSet.m_credit=dlg.m_fCredit;sSet.Update();sSet.Requery(); if(sSet.IsOpen()sSet.Close();MessageBox(当前只能修改成绩和学分,修改成功);UpdateListItemData();*pResult = 0;11.运行测试程序:五、思考题:(1)上述表score的记录操作与对话框中的数据是如何一一对应的?例如说出记录添加的完整过程。答:在对话框中定义m_strCourseNO, m_strStuNO, m_fScore ,m_fCredit变量分别与CScoreset类中的m_courseno, m_studentno, m_score,m_credit一一对应,在添加是将对话框中定义的变量赋值给CScoreset类中变量。(2)若记录中还有学生“姓名”(stuname)字段,则上述代码应如何修改? 答:修改数据库添加列名,并在CScoreset类中的函数DoFieldExchange(CFieldExchange* pFX)添加:RFX_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论