




已阅读5页,还剩49页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章数据库编程 9 1数据库概述9 2ODBC数据库编程9 3数据库编程常用技巧9 4数据库相关的ActiveX控件 9 1数据库概述 数据库和DBMS数据库是指以一定的组织形式存放在计算机存储介质上的相互关联的数据的集合 例如 把一个学校的教师 学生和课程等数据有序地组织起来 存储在计算机磁盘上 就构成了一个数据库 为了有效地管理数据库 常常需要一些数据库管理系统 DBMS 为用户提供对数据库操作的各种命令 工具及方法 包括数据库的建立和记录的输入 修改 检索 显示 删除和统计等 流行的DBMS都提供了一个SQL接口 SQL作为用来在DBMS中访问和操作的语言 SQL 结构化查询语言 语句分为两类 一是DDL DataDefinitionLanguage 数据定义语言 语句 它是用来创建表 索引等 另一是DML DataManipulationLanguage 数据操作语言 语句 这些语句是用来读取数据 更新数据和执行其他类似操作的语句 9 1数据库概述 ODBC DAO和OLEDBODBC 开放数据库连接 DAO 数据访问对象 及OLEDB OLE数据库 三种数据库方式 使应用程序从特定的数据管理系统 DBMS 脱离出来 ODBC提供应用程序接口 API 使任何一个数据库都可以通过ODBC驱动器与指定的DBMS相联 程序就可通过调用ODBC驱动管理器中相应的驱动程序达到管理数据库的目的 DAO使用Jet数据库引擎形成一系列的数据访问对象 数据库对象 表和查询对象 记录集对象等 可以打开一个Access数据库文件 MDB文件 也可直接打开一个ODBC数据源以及使用Jet引擎打开一个ISAM 被索引的顺序访问方法 类型的数据源 dBASE FoxPro Paradox Excel或文本文件 OLEDB试图提供一种统一的数据访问接口 并能处理除了标准关系型数据库中的数据之外 还能处理包括邮件数据 Web上的文本或图形 目录服务以及主机系统中的IMS和VSAM数据 OLEDB提供一个数据库编程COM接口 使得数据的使用者可以使用同样的方法访问各种数据 而不用考虑数据的具体存储地点 格式或类型 这个COM接口与ODBC相比 其健壮性和灵活性要高得多 9 2ODBC数据库编程 9 2 1MFCAppWizard使用ODBC一般过程构造数据库数据库表与表之间的关系构成了一个数据库 用MicrosoftAccess创建一个数据库Student mdb 暂包含一个数据表score 如表 在表中包括上 下两部分内容 上部分是数据表的记录内容 下部分是数据表的结构内容 9 2ODBC数据库编程 创建ODBC数据源如果没有ODBC组件 当安装VisualC 的同时也会装上ODBC程序 它不是出现在程序组中 出现在系统的 控制面板 管理工具中 如图 双击ODBC图标 进入ODBC数据源管理器 可以设置ODBC数据源的一些信息 用户DSN 页面是定义自己在本地计算机使用的数据源名 如图 9 2ODBC数据库编程 创建用户DSN的过程如下 1 单击 添加 在对话框中选择要添加用户数据源的驱动程序 这里选择 MicrosoftAccessDriver 如图 2 单击 完成 单击 选择 按钮将前面创建的数据库调入 如图 9 2ODBC数据库编程 3 单击 确定 刚才创建的用户数据源被添加在 ODBC数据源管理器 的 用户数据源 列表中 如图 9 2ODBC数据库编程 在MFCAppWizard中选择数据源用MFCAppWizard创建一个支持数据库的文档应用程序 如下面的过程 1 用MFCAppWizard创建一个单文档应用程序Ex ODBC 2 在向导的第2步对话框中加入数据库的支持 如图 9 2ODBC数据库编程 在对话框中可以选择对数据库的不同支持 其中各选项的含义如表 9 2ODBC数据库编程 3 选中 数据库查看使用文件支持 项 单击 DataSource 从中选择ODBC的数据源 DatabaseExampleForVC 如图 4 单击 OK 如图 从中选择要使用的表score 9 2ODBC数据库编程 5 单击 OK 又回到了向导的第2步对话框 6 单击 完成 开发环境自动打开表单视图CEx ODBCView的对话框资源模板IDD EX ODBC FORM以及相应的对话框编辑器 7 编译并运行 如图 记录浏览按钮 9 2ODBC数据库编程 设计浏览记录界面按照图所示的布局 为表单对话框资源模板添加所表所示的控件 9 2ODBC数据库编程 2 按快捷键Ctrl W 切换到MemberVariables页面 在Classname框中选择CEx ODBCView 为上述控件添加相关联的数据成员 这里添加的控件变量都是由系统自动定义的 并与数据表字段相关联的 例如 双击IDC STUNO 在弹出的 AddMemberVariable 添加类成员变量 对话框中的成员变量下拉列表中选择要添加的成员变量名m pSet m studentno 选择后 控件变量的类型将自动设置 如图 9 2ODBC数据库编程 3 按照上一步骤的方法 为下表的其他控件依次添加相关联的成员变量 控件变量的范围和大小应与数据表中的字段一一对应 如图 9 2ODBC数据库编程 4 编译运行并测试 如图 9 2ODBC数据库编程 9 2 2ODBC数据表更新在生成的CEx ODBCView类中 包含一个指向CEx ODBCSet对象的指针m pSet 该指针与用户的表相关联 是由MFCAppWizard建立的 当数据表的字段更新后 例如 若Access将score数据表添加一个 备注 字段名 并关闭Access后 就需要为Ex ODBC重新来指定数据表 其步骤如下 1 按快捷键Ctrl W 切换到 MemberVariables 页面 2 在 Classname 的下拉列表中选择 CEx ODBCSet 如图 UpdateColumns 重新指定与CRecordSet类相关的表 BindAll 指定表的字段的绑定 即为字段重新指定默认的关联变量 9 2ODBC数据库编程 3 单击 UpdateColumns 选择ODBC数据源 DatabaseExampleForVC 如图 4 单击 OK 如图 从中选择要使用的表 9 2ODBC数据库编程 5 单击 OK 如图 6 单击 BindAll MFCWizard将自动为字段落添加相关联的变量 需要说明的是 在按 BindAll 按钮绑定前最好将已有的字段关联变量删除 以保证数据表字段名更改或删除后与变量绑定的正确性 9 2ODBC数据库编程 9 2 3CRecordSet类基本操作查询记录先看一个示例 该示例在前面的Ex ODBC的表单中添加一个编辑框和一个 查询 按钮 单击 查询 将按编辑框中的学号内容对数据表进行查询 并将查找到的记录显示在前面添加的控件中 示例的过程如下 1 打开Ex ODBC应用程序的表单资源 按图8所示的布局添加控件 其中添加的编辑框ID号设为IDC EDIT QUERY 查询 按钮的ID号设为IDC BUTTON QUERY 9 2ODBC数据库编程 2 打开MFCClassWizard 为控件IDC EDIT QUERY添加关联变量m strQuery 3 在CEx ODBCView类中添加按钮控件IDC BUTTON QUERY的BN CLICKED消息映射 在映射函数中添加代码 voidCEx ODBCView OnButtonQuery UpdateData m strQuery TrimLeft if m strQuery IsEmpty MessageBox 要查询的学号不能为空 return if m pSet IsOpen m pSet Close 如果记录集打开 则先关闭m pSet m strFilter Format studentno s m strQuery studentno是score表的字段名 用来指定查询条件m pSet m strSort course course是score表的字段名 用来按course字段从小到大排序m pSet Open if m pSet IsEOF 如果打开记录集有记录UpdateData FALSE 自动更新表单中控件显示的内容elseMessageBox 没有查到你要找的学号记录 9 2ODBC数据库编程 4 编译运行并测试 如图 9 2ODBC数据库编程 增加记录增加记录是使用AddNew函数 但要求数据库必须是以 可增加 的方式打开的 下面的代码是在表的末尾增加新记录 m pSet AddNew 在表的末尾增加新记录m pSet SetFieldNull 9 2ODBC数据库编程 修改记录函数CRecordSet Edit可以用来修改记录 例如 m pSet Edit 修改当前记录m pSet m name 刘向东 修改当前记录字段值 m pSet Update 将修改结果存入数据库m pSet Requery 撤消操作如果用户在进行增加或者修改记录后 希望放弃当前操作 则在调用CRecordSet Update 函数之前调用CRecordSet Move AFX MOVE REFRESH 来撤消操作 便可恢复在增加或修改操作之前的当前记录 9 3数据库编程常用技巧 9 3 1显示记录总数和当前记录号Ex ODBC的记录浏览过程中 不能知道表中的记录总数及当前的记录位置 必须将这些信息显示出来 这时就需要使用CRecordset类的成员函数GetRecordCount和GetStatus用来获得表中的记录总数和当前记录的索引 原型 longGetRecordCount const voidGetStatus CRecordsetStatus 9 3数据库编程常用技巧 3 用ClassWizard为CEx ODBCView类添加OnCommand消息处理函数 添加代码 BOOLCEx ODBCView OnCommand WPARAMwParam LPARAMlParam CStringstr CMainFrame pFrame CMainFrame AfxGetApp m pMainWnd 获得主框架窗口的指针CStatusBar pStatus 9 3数据库编程常用技巧 4 在CEx ODBCView的OnInitialUpdate函数处添加下列代码 voidCEx ODBCView OnInitialUpdate m pSet 5 在Ex ODBCView cpp文件的开始处增加下列语句 include MainFrm h 6 将MainFrm h文件中的保护型变量m wndStatusBar变成公共变量 7 编译运行并测试 9 3数据库编程常用技巧 9 3 2编辑记录下面的过程是在Ex ODBC的表单视图中增加三个按钮 添加 修改 和 删除 如图 单击 添加 或 修改 按钮都将弹出一个如图的对话框 在对话框中对数据进行编辑后 单击 确定 按钮使操作有效 9 3数据库编程常用技巧 1 切换到ResourceView页面 打开用于表单视图CEx ODBCView的对话框资源IDD EX ODBC FORM 向表单中添加三个按钮 添加 修改 和 删除 2 添加一个对话框资源 打开属性对话框将其字体设置为 宋体9号 标题定为 学生课程成绩表 ID号设为IDD SCORE TABLE 3 将表单中的控件复制到对话框中 4 将 OK 和 Cancel 的标题改为 确定 和 取消 图中具有3D效果的竖直线是用静态图片控件 属性为Frame Etched 构造的 5 双击对话框模板或按Ctrl W快捷键 为对话框资源IDD SCORE TABLE创建一个对话框类CScoreDlg 6 打开MemberVariables标签 在Classname中选择CScoreDlg 选中所需的控件ID号 双击鼠标或单击AddVariables按钮 为控件添加控件变量 如图 9 3数据库编程常用技巧 7 用MFCClassWizard为CScoreDlg添加IDOK按钮的BN CLICKED的消息映射 代码 voidCScoreDlg OnOK UpdateData m strStudentNO TrimLeft m strCourseNO TrimLeft if m strStudentNO IsEmpty MessageBox 学号不能为空 elseif m strCourseNO IsEmpty MessageBox 课程号不能为空 elseCDialog OnOK 8 为CEx ODBCView类中的三个按钮 添加代码 voidCEx ODBCView OnRecAdd CScoreDlgdlg if dlg DoModal IDOK m pSet AddNew m pSet m course dlg m strCourseNO m pSet m studentno dlg m strStudentNO m pSet m score dlg m fScore m pSet m credit dlg m fCredit m pSet Update m pSet Requery 9 3数据库编程常用技巧 voidCEx ODBCView OnRecEdit CScoreDlgdlg dlg m strCourseNO m pSet m course dlg m strStudentNO m pSet m studentno dlg m fScore m pSet m score dlg m fCredit m pSet m credit if dlg DoModal IDOK m pSet Edit m pSet m course dlg m strCourseNO m pSet m studentno dlg m strStudentNO m pSet m score dlg m fScore m pSet m credit dlg m fCredit m pSet Update UpdateData FALSE 9 3数据库编程常用技巧 voidCEx ODBCView OnRecDel CRecordsetStatusstatus m pSet GetStatus status m pSet Delete if status m lCurrentRecord 0 m pSet MoveNext elsem pSet MoveFirst UpdateData FALSE 9 在Ex ODBCView cpp文件的开始处增加下列语句 include ScoreDlg h 10 编译运行并测试 9 3数据库编程常用技巧 9 3 3处理多个表用MicrosoftAccess为数据库Student mdb添加一个数据表course 如表所示 表中上部分是数据表的记录内容 下部分是数据表的结构内容 9 3数据库编程常用技巧 示例的具体步骤如下 1 打开前面的单文档应用程序Ex ODBC 2 按快捷键Ctrl W 单击 AddClass 选择 New 3 指定CRecordSet的派生类CCourseSet 如图 9 3数据库编程常用技巧 4 单击 OK 弹出 DatabaseOptions 对话框 图9 7所示 5 选择ODBC的数据源 DatabaseExampleForVC 单击 OK 选择要使用的表course 6 单击 OK 单击 确定 系统自动为生成CCodeSet类所需要的代码 7 将工作区切换到ResourceView页面 打开对话框资源IDD STU TABLE 按图所示的控件布局 向对话框添加一个组合框控件和三个用于显示课程名称 课时数和开课学期数据的静态文本控件 9 3数据库编程常用技巧 8 打开MemberVariables页面 在Classname中选择CStuDlg 选中所需的控件ID号 双击鼠标或单击AddVariables按钮 再为控件添加控件变量 9 3数据库编程常用技巧 9 切换到MesssageMaps页面 为CScoreDlg中增加WM INITDIALOG的消息映射 并添加下列代码 BOOLCScoreDlg OnInitDialog CDialog OnInitDialog 将课程信息表的课程号添加到组合框中CCourseSetcSet cSet Open while cSet IsEOF m comboNO AddString cSet m courseno cSet MoveNext if cSet IsOpen cSet Close 确定组合框的当前选择项m strCourseNO TrimLeft if m strCourseNO IsEmpty m strNO m strCourseNO UpdateData FALSE OnSelchangeComboNo returnTRUE returnTRUEunlessyousetthefocustoacontrol 9 3数据库编程常用技巧 10 为控件IDC COMBO NO增加CBN SELCHANGE的消息映射 添加代码 voidCScoreDlg OnSelchangeComboNo intnIndex m comboNO GetCurSel if nIndex CB ERR return CStringstr m comboNO GetLBText nIndex str 根据课程号查找course表中的记录CCourseSetcSet cSet m strFilter Format courseno s str cSet Open if cSet IsEOF 如果打开记录集有记录 m strNO m strCourseNO str m strName cSet m cname m strHours Format d cSet m hours m strOpen Format d cSet m copen m fScore cSet m credit UpdateData FALSE if cSet IsOpen cSet Close 9 3数据库编程常用技巧 11 在ScoreDlg cpp文件的开始处增加下列语句 include ScoreDlg h include CourseSet h 12 编译运行并测试 当单击 修改 按钮时 弹出如图所示的对话框 9 3数据库编程常用技巧 9 3 4字段操作CRecordSet类中的成员变量m nFields 用于保存数据表的字段个数 和成员函数GetODBCFieldInfo及GetFieldValue可以简化多字段的访问操作 GetODBCFieldInfo函数用来数据表中的字段信息 其函数原型如下 voidGetODBCFieldInfo shortnIndex CODBCFieldInfo 9 3数据库编程常用技巧 例Ex Field 多个字段的编程操作 1 创建一个基于CScrollView类的单文档应用程序Ex Field 2 为数据表course创建一个CRecordSet的派生类CCourseSet 3 在CEx FieldView OnDraw函数中添加下列代码 voidCEx FieldView OnDraw CDC pDC CEx FieldDoc pDoc GetDocument ASSERT VALID pDoc TEXTMETRICtm pDC GetTextMetrics 9 3数据库编程常用技巧 显示记录CStringstr while cSet IsEOF x 0 y nLineHeight for UINTi 0 iTextOut x y str x nWidth cSet MoveNext cSet Close 设置视图滚动大小CSizesizeTotal sizeTotal cx x nWidth sizeTotal cy y nLineHeight SetScrollSizes MM TEXT sizeTotal 9 3数据库编程常用技巧 4 在Ex FieldView cpp文件的前面添加CCourseSet类的包含语句 include Ex FieldDoc h include Ex FieldView h include CourseSet h 5 编译运行 结果如图所示 9 4数据库相关的ActiveX控件 9 4 1使用MSFlexGrid控件将控件的类添加到项目中 1 选择 工程 添加工程 ComponentsandControls 如图 2 双击 RegisteredActiveXControls 项 在列表中找到MicorsoftFlexGridControl 如图 单击 更多信息 可以获得该控件的帮助内容 9 4数据库相关的ActiveX控件 3 在该控件双击鼠标 单击 确定 如图 单击 OK 接受所有的类 4 单击 结束 按钮关闭 ComponentsandControlsGallery 对话框 9 4数据库相关的ActiveX控件 向对话框添加MSFlexGrid控件打开表单IDD EX ODBC FORM 看到上述控件已添加到对话框编辑器的控件工具栏中 如图 通过对话框编辑器可以方便地添加MSFlexGrid控件 修改MSFlexGrid控件属性在IDD EX ODBC FORM表单资源添加MSFlexGrid控件 右击该控件 选择 属性 或 PropertiesMSFlexGridObject 命令均可打开该控件的属性对话框 如图 添加的控件 9 4数据库相关的ActiveX控件 编程控制 1 保留默认的属性及其控件标识IDC MSFLEXGRID1 2 在CEx ODBCView类中为刚才添加的MSFlexGrid控件增加一个CMSFlexGrid类成员变量m MSFGrid 并在CEx ODBCView类的OnInitialUpdate函数中添加代码 voidCEx ODBCView OnInitialUpdate m pSet MoveFirst m MSFGrid SetCols m pSet m nFields 1 根据字段个数 设置单元格的最大列数m MSFGrid SetRows m pSet GetRecordCount 1 根据记录数 设置单元格的最大行数m MSFGrid SetColWidth 1 1440 将所有的单元格都设为相同的列宽 1表示所有的列 列宽单位为一个点的 1 20 一个点是1 72英寸 也就是说 1440刚好为1英寸 定义单元格的表头m MSFGrid SetRow 0 m MSFGrid SetCol 0 定位到 0 0 单元格m MSFGrid SetText 记录号 设置其显示内容m MSFGrid SetCellAlignment 4 设置单元格对齐方式 4表示水平和垂直居中CODBCFieldInfofield 9 4数据库相关的ActiveX控件 for UINTi 0 im nFields i m MSFGrid SetRow 0 m MSFGrid SetCol i 1 m pSet GetODBCFieldInfo i field 获取指定字段信息m MSFGrid SetText field m strName m MSFGrid SetCellAlignment 4 intiRow 1 while m pSet IsEOF 将表的记录内容显示在单元格中 CStringstr str Format 记录 d iRow m MSFGrid SetRow iRow m MSFGrid SetCol 0 m MSFGrid SetText str m MSFGrid SetCellAlignment 4 for UINTi 0 im nFields i m MSFGrid SetRow iRow m MSFGrid SetCol i 1 m pSet GetFieldValue i str m MSFGrid SetText str m MSFGrid SetCellAlignment 4 iRow m pSet MoveNext m MSFGrid SetRow 1 m MSFGrid SetCol 1 m pSet MoveFirst 9 4数据库相关的ActiveX控件 3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 济南市2025-2026学年七年级上学期语文月考测试试卷
- 集安市2025-2026学年九年级下学期语文期末测试试卷
- 高速雨天安全知识培训课件
- 电解铝安全环保知识培训课件
- 电视产品知识培训总结课件
- 高速公路施工培训课件
- 农贸市场、集市管理服务项目投标方案
- qc考试试题及答案格力
- 电缆相关知识培训课件
- 电线生产专业知识培训课件
- 2025北京平谷区初三二模数学试题及答案
- 2025年中级会计职称考试经济法冲刺试题及答案
- 乐器供销合同范本
- 2025年执业医师考试全真试题及答案
- GA 1808-2022军工单位反恐怖防范要求
- 《工程制图完整》课件
- 先张法U型梁施工与管理
- 江苏省五年一贯制专转本《C语言程序设计》模拟试卷试题三(晓庄)
- 高三教学视导方案
- (高清版)外墙饰面砖工程施工及验收规程JGJ126-2015
- 布袋除尘器计算书
评论
0/150
提交评论