版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第12章 数据库编程 本章要点通过本章的学习,使读者: 使用ODBC类进行数据库编程 自动注册数据源的ODBC数据库编程 数据库表记录的添加、删除和修改等编辑功能 数据记录查询和排序12.1 学生成绩管理系统12.1.1 系统介绍图12-1是一个班级学生成绩管理系统,每个班有3个表:学生成绩表、各科成绩表和任课老师表。具有以下功能:(1) 数据库表记录的浏览;(2) 数据库表记录的编辑:添加、删除和修改;(3) 记录查寻:按查询条件浏览记录;(4) 记录排序:在学生成绩记录表中,单击字段名列表头,可按升序或降序交替排序记录。12.2 ODBC类的编程基础12.2.1 ODBC的结构ODBC由4
2、个部分组成,分别是 (1) 应用程序(Application) (2) ODBC管理器(ODBC Manage) (3) ODBC驱动程序(ODBC Drivers) (4) 数据源(Data Sources) 应用程序 ODBC管理器 ODBC驱动程序数据库12.2.2 MFC提供的ODBC类CDatabase(数据库类) CRecordset(记录集类) CRecordView(可视记录集类) CDBException(异常类) CFilelExchange(数据交换类) 12.2.3 应用ODBC编程1. ODBC类编程的一般步骤使用ODBC类进行编程,一般步骤如下: (1) 连接数据源
3、。(2) 创建并执行SQL语句。(3) 检查结果记录。(4) 断开数据源。2. 数据记录的基本操作(1) 增加记录m_pSet-AddNew(); /增加记录 /输入新的字段值m_pSet-Update(); /将新记录存入数据库m_pSet-Requery() /重建记录集 (2) 删除记录 m_pSet-Delete(); /删除记录m_pSet-Requery(); /重建记录集(3) 修改记录m_pSet-Edit(); /修改当前记录 /修改当前记录字段值m_pSet-Update(); /将新记录存入数据库m_pSet-Requery() /重建记录集12.2.4 创建数据源(DS
4、N)1用ODBC数据源管理器,创建数据源2. 在应用程序中注册数据源SQLConfigDataSource(NULL, /不需要弹出对话框;ODBC_ADD_DSN, /添加数据源;“Microsoft Access Driver(*.mdb)”, /驱动程序名;“DSN=MyStudentOdbc0” /数据源名称;“Description=This is a sample0” /数据源的说明;“FileType= Microsoft Access0” /数据源文件类型说明;“DBQ=D:MyVCMyODBC.mdb0” /数据源文件绝对路经DEFAULTDIR=D: /默认目录为D:12.
5、3 创建“学生成绩管理系统”应用程序12.3.1 创建工程12.3.2 界面设计12.3.3 为控件引入变量12.3.4 实现班级表的选择12.4 定义操作记录集类的对象12.4.1创建CMyRecordSet类创建一个CRecordset类的派生类CMyRecordSet,用于操作数据库的学生成绩表。12.4.3创建CMyTeRecordSet类创建一个CRecordset类的派生类CMyTeRecordSet,用来操作数据库的任课教师表12.4.2创建CMyObRecordSet类创建一个CRecordset类的派生类CMyObRecordSet,用于操作数据库的学生科目表。12.4.4
6、定义操作记录集类的对象(1) 在MyOdbcDlg.h文件中,添加如下包含文件:#include MyRecordSet.h(2) 在CMyOdbcDlg类中,定义操作ODBC记录集类的对象,即添加语句:CMyRecordSet m_Set; /用于操作数据库成绩表CMyObRecordSet m_bSet; /用于操作数据库科目表CMyTeRecordSet m_tSet; /用于操作数据库任课教师表12.5注册数据源,连接数据库1编程要点(1) 在项目工程的StdAfx.h文件中,添加支持数据库和自动注册数据源库函数所需的头文件:#include #include (2) 选择数据库文件,
7、调用SQLConfigDataSource()函数, 注册数据源。(3) 在CMyOdbcDlg类中,添加CDatabase 类对象(4) 利用CDatabase 类的OpenEx函数建立与数据库的连接,并捕获异常。2程序实现添加“连接数据库”按钮的BN_CLICKED消息响应函数,在消息响应函数中,编写代码实现如下功能:选择数据库文件; 调用SQLConfigDataSource()函数, 注册数据源;连接数据库。12.6 实现数据库记录的显示功能12.6.1 字段名的获取与显示1编程要点(1) 调用CRecordset类的GetODBCFieldInfo()成员函数获取表信息CODBCFi
8、eldInfo Info; /定义结构CODBCFieldInfo体变量InfoOpen(AFX_DB_USE_DEFAULT_TYPE,TableName); /打开数据库表,读取字段名信息存储在结构变量Info中GetODBCFieldInfo(int nItem, CODBCFieldInfo Info);Close(); /关闭记录集(2) 从结构变量Info中提取指定字段名CString m_sName = Info.m_strName; (3) 调用ClistCtrl类的InsertColumn()成员函数,将字段名插入List控件的表头显示InsertColumn(int nIt
9、em, LPTSTR lpszText,LVCFMT_LEFT,int nWidth); 12.6.2 打开ODBC记录集void CMyOdbcDlg:Select()if(m_Set.IsOpen()m_Set.Close();if(m_bSet.IsOpen()m_bSet.Close(); if(m_tSet.IsOpen()m_tSet.Close(); /打开学生成绩表记录集 CString str; str.Format(%sSTUDENT,m_Getstring); m_Set.Open(AFX_DB_USE_DEFAULT_TYPE,str); /打开科目表记录集 str.F
10、ormat(%sOBJECT,m_Getstring); m_bSet.Open(AFX_DB_USE_DEFAULT_TYPE,str); /打开任课教师表记录集 str.Format(%sTECHER,m_Getstring); m_tSet.Open(AFX_DB_USE_DEFAULT_TYPE,str);12.6.3 遍历ODBC记录集的数据1编程要点(1) 使用CRecordset类的Open()函数,打开记录集;(2) 使用CRecordset类的GetODBCFieldCount()函数,求得记录总数;(3)调用CRecordset类的GetFieldValue()函数,读取当
11、前记录的指定字段的值;(4) 将读取的字段值,调用ClistCtrl类的成员函数SetItemText(),插入到List控件中显示;(5) 关闭记录集。2程序实现ShowStudentRecord(); /显示学生成绩ShowObjectRecord(); /显示科目ShowTeacherRecord(); /显示任课老师12.7 实现数据库记录的编辑功能主要包括:添加新记录、删除记录和修改记录。添加新记录的算法分3步实现:(1)创建记录的录入界面(2)将控件中录入的数据构造SQL语句(3)再写入数据库。12.7.1 创建“添加记录”界面 12.7.2 创建CRecordADD类 12.7.
12、3 为“IDD_DIALOG_ADD”对话框中各Edit控件引入变量为了使各编辑框的值写入数据库的相应字段,必须用MFC CassWizard为Edit Box编辑框控件:IDC_EDIT_NAME、IDC_EDIT_XUEHAO、IDC_EDIT_MATHS、IDC_EDIT_COMPUTER、IDC_EDIT_CPROGRAM、IDC_EDIT_DATABASE和IDC_EDIT_ENGLISH引入变量。为“IDD_DIALOG_ADD”对话框创建一个新类,类名为CRecordADD。12.7.4 实现记录的添加功能 在MyOdbc工程中,实现“添加记录”功能分3步完成:(1) 启动“添加
13、记录”用户对话框,录入记录各字段值;(2) 将记录各字段赋给学生记录集(CMyRecordSet)对应字段,完成记录添加功能。(3) 修改科目表记录。(4) 更新显示学成绩表和科目表记录。1. 编程要点1 - 添加新记录(1) 用CRecordset类的成员函数AddNew进入添加模式;(2) 填写该记录;(3) 调用函数Updata把添加的新记录传递到数据库的表中;添加新记录的步骤 2. 编程要点2 - 修改记录(1) 用CRecordset类的成员函数Edit进入修改模式;(2) 修改当前记录;(3) 调用函数Updata把修改后的记录传递到数据库的表中; 修改记录的步骤 12.8 实现记
14、录的查询和排序功能有两种实现记录查找和排序方法:一种实现方法是使用SQL语言,另一种方法是使用ODBC。下面来介绍如何通过ODBC进行记录的查询和排序。12.8.1 预备知识(1) 在m_strFilter成员变量中设置筛选条件以实现Select语句中Where从句的功能;(2) 在m_strSort成员变量中设置排序字段以实现Select语句中Order by从句的功能;(3) 打开记录集后,记录的组成和顺序就是确定的,为了对记录重新筛选和排序,m_strFilter和m_strSort成员变量设置新值后,还必须重新打开记录集或调用CRecordset类的Requery()方法。1记录筛选的
15、示例代码例如,查询“计算机原理=80”的所有学生成绩记录,可用如下程序实现。void CMyOdbcDlg:OnRecordFilter()m_Set.Open(AFX_DB_USE_DEFAULT_TYPE, TableName);m_Set.m_strFilter = 计算机原理=80; m_Set.Requery();ShowStudentRecord(); /显示查询结果2. 记录排序的示例代码例如,以“高等数学”为关键字段,进行升序排序,可用如下程序实现。 void CMyOdbcDlg:OnRecordSort()m_Set.Open(AFX_DB_USE_DEFAULT_TYPE
16、, TableName);m_Set.m_strSort = 高等数学 ASCm_Set.Requery();ShowStudentRecord(); /显示排序结果12.8.2 创建“查询条件”的界面1创建对话框资源2编辑对话框资源12.8.3 创建CRecordFIND类12.8.4 为CRecordFIND类添加成员 为了获取在“查询条件”对话框中设置的查询条件,把“查询条件”传递给CMyOdbcDlg类来处理,必须为各控件引入变量,同时在CRecordFIND类添加数据成员,作为数据传递的中间变量。12.8.5 实现记录查询功能void CMyOdbcDlg:OnButtonFind(
17、) /1. 显示查找条件输入对话框CRecordFIND dlg;if( dlg.DoModal()!=IDOK)return; /2. 打开记录集this-Select(); /3. 构造筛选条件 m_Set.m_strFilter.Format(%s%s%.2f,dlg.m_Getstring1,dlg.m_Getstring2,dlg.m_find);m_ListCtrlx.DeleteAllItems();m_Set.Requery();/4. 显示筛选结果if(m_Set.IsEOF() AfxMessageBox(没有符合条件的记录);m_Set.Close();return ;e
18、lse this-ShowStudentRecord();12.8.6 实现排序功能利用MFC ClassWizard,为IDC_LIST3控件添加LVN_COLUMNCLICK消息响应函数 void CMyOdbcDlg:OnColumnclickList3(NMHDR* pNMHDR, LRESULT* pResult) NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;/ TODO: Add your control notification handler code hereif(m_bS = false) int k= pNMListView-iSubItem; Sort(k); m_ListCtrlx.DeleteAllItems(); this-ShowStudentRecord(); *pResult = 0; void CMyOdbcDlg:Sort(int secol) static bool isAsc=true; this-Select();CODBCFieldInfo fieldInfo;m_Set.GetODBCFieldInfo(secol,fieldInfo);if(isAsc)m_Set.m_strSort=fieldInfo.m_strName+ ASC;else m_Set.m_str
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 健身器材制作工岗位实操知识技能考核试卷含答案
- 收银员岗中团队合作考核试卷含答案
- 《肾癌的诊断与治疗》课件
- 医学课件-标准化病人问诊模板
- 腊梅主要病虫害的防治方法
- 医学课件-护理学专业介绍
- 127系统精讲-损伤中毒-第十五节 常见四肢骨折病人的护理-20250826-212411
- 医疗行业采购管理及谈判技巧培训
- 初中美术教资面试全真模拟题库及答案
- 2026初中道法教资面试答辩题库及答案
- 《信息安全产品配置与应用》全套教学课件
- 2025年高校辅导员招聘面试题库及参考答案
- 2026秋人教版小学美术二年级上册第一单元 身边的自然第1课 树叶的血管教学课件
- 人教版五年级上册语文单元同步测试题(附答案)
- 江西财经大学《Java》2025-2026学年期末试卷
- 2025年老年人冬季防摔倒培训
- 产品质量检验与追溯系统操作手册
- 2026年辽宁生态工程职业学院单招综合素质笔试备考试题附答案详解
- 幼教考试历年真题及答案
- 钢结构制作车间安全生产必知常识
- 2025湖南湘西州工会招聘11人考试笔试参考题库及答案解析
评论
0/150
提交评论