第13章_数据库应用程序的开发

上传人:资****亨 文档编号:133877011 上传时间:2020-05-31 格式:PPT 页数:36 大小:207.50KB
返回 下载 相关 举报
第13章_数据库应用程序的开发_第1页
第1页 / 共36页
第13章_数据库应用程序的开发_第2页
第2页 / 共36页
第13章_数据库应用程序的开发_第3页
第3页 / 共36页
第13章_数据库应用程序的开发_第4页
第4页 / 共36页
第13章_数据库应用程序的开发_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《第13章_数据库应用程序的开发》由会员分享,可在线阅读,更多相关《第13章_数据库应用程序的开发(36页珍藏版)》请在金锄头文库上搜索。

1、 1 第13章数据库应用程序的开发 2 13 1有关数据库的基础知识 现有的数据库软件有很多 如大型数据库Oracle SQLServer 小数据库Access等 都支持关系模型 数据库模型 层次模型网状模型关系模型面向对象模型 3 13 2ODBC介绍和引用 4 13 2 1ODBC简介 MS推出了OpenDatabaseConnectivity 简称ODBC 它包含访问不同数据库所要求的ODBC驱动程序 只要调用ODBC所支持的函数 动态链接到不同的驱动程序上即可 一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS 不直接与DBMS打交道 所有的数据库操作由对应的DBMS的ODBC

2、驱动程序完成 也就是说 不论是Oracle SQLServer还是Access数据库 均可用ODBCAPI进行访问 由此可见 ODBC的最大优点是能以统一的方式处理所有的数据库 5 ODBC数据源控制台就是Windows系统管理数据源的控制台 所有的数据库驱动 以及数据源登记都要在此发布 并向系统发出请求 通过使用ODBCAPI和MFCODBC类 可以访问任何数据资源 只要应用程序的用户的终端机器上有ODBC的驱动 都可以访问任何地方的数据源 ODBC是一种接口 它是通过相应的各个数据库的ODBC驱动来访问各种数据库中的数据 使用ODBC 能够使应用程序独立于数据库的硬件环境 ODBC提供的A

3、PI函数独立于数据库管理系统 6 ODBC是Microsoft的Windows系统下的数据库服务的一部分 它是由下面几个部分构成的 ODBCAPI 包含在一个动态库中的函数集合 一个错误代码的集合 一个标准的SQL语句集合 用来调用DBMS中的数据 ODBCDriverManager 一个动态库文件 ODBC32 DLL 来加载ODBC驱动 这个DLL对你的应用程序是透明的 ODBCdatabasedrivers 由一个或是多个DLL构成 其中含有ODBCAPI 这些DLL由其拥有者DBMS调用 ODBCCursorLibrary 这也是一个动态连接库文件 ODBCAdministrator

4、这是一个ODBC控制台 用来管理不同的数据源 7 13 2 2MFC对ODBC的封装 8 13 2 3如何访问数据库 建立ODBC数据源连接数据源选择和处理记录数据库应用程序中的文档和视图 访问数据库 9 13 2 4在数据库应用程序中常用的几个类 1CRecordView类 一个CRecordView对象就是用一个视图中的控件来显示数据库中的记录 CRecordView类使用了动态数据交换 DDX 和数据库交换 RFX 在视图上的控件和数据源中的数据库中进行数据交换 AppWizard生成CRecordView和CRecordset类 并和相应的数据源关联 10 例13 1 创建一个数据库应

5、用程序 可以显示Access数据库表中的记录 11 步骤 1 用AppWizard来生成一个单文档的ODBC工程文件 12 选择已创建好的数据库My Access db mdb表单 13 用ClassWizard给相应的EditBox连接变量 注意 在AddMemberVariable对话框中的下拉组合框中已经有了相应表中的字段 只要选中相应的字段就可以了 14 2CRecordset类 为了能够处理各种的数据库 最好从类CRecordset派生出一个子类来 数据库从数据源读取数据后 可以做以下的工作 翻阅所有的记录 修改记录 设定锁定状态 挑选有用的记录 给数据库排序 给定参数 让数据库在运

6、行的时候自动选择数据 15 3CDatabase类 CDatabase在afxdb h中定义 其对象是用来连接一个数据源的 为了使用CDatabase对象 需调用构造函数 并调用OpenEx或是Open函数 这将会打开一个连接 当构造一个CDatabase类完成后 可以向CRecordset类的对象传递这个CDatabase类的指针 连接数据源结束时 必须用Close函数关闭这个对象 16 4RFX RFX RecordFieldExchange 是支持应用程序的一个交换机制 当从CRecordset类派生一个类 在交换数据的时候没有选择大容量交换的方式 BulkRFX 时 RFX机制将在数据

7、交换中起作用 RFX在视图和数据源之间自动交换数据 由于一次交换的数据可能不止一个 为此可能要多次调用DoFieldExchange函数 同时它也是应用程序框架和ODBC交流的媒介 RFX机制能够安全的通过调用 例如ODBC函数SQLBindCol 来保存用户的工作 17 下面代码就是 例13 1 工程文件中AppWizard自动加入的RFX代码 见粗斜体部分 voidCODBCSet DoFieldExchange CFieldExchange pFX AFX FIELD MAP CODBCSet pFX SetFieldType CFieldExchange outputColumn RF

8、X Long pFX T 书籍ID m ID RFX Text pFX T 作者 m column1 RFX Text pFX T 出版社 m column2 RFX Text pFX T 价格 m column3 AFX FIELD MAP 18 函数DoFieldExchange是RFX机制的中枢 任何时候应用框架需要从数据源到数据库或是从数据库到数据源 都要调用DoFieldExchange函数 下面是CRecordset派生类的头文件 其中关于RFX机制的部分已经用粗斜体显示 classCODBCSet publicCRecordset Field ParamData AFX FIEL

9、D CODBCSet CRecordset longm ID CStringm column1 CStringm column2 CStringm column3 AFX FIELD Overrides ClassWizardgeneratedvirtualfunctionoverrides AFX VIRTUAL CODBCSet public virtualvoidDoFieldExchange CFieldExchange pFX RFXsupport AFX VIRTUAL 19 5CDBException CDBException是用来处理从其它ODBC类传过来的异常情况的 这个类一

10、般是和关键字CATCH连用的 同样的用户也可以用全局函数AfxThrowDBException抛出一个异常情况 m nRetCode 它包含了一个结构体RETCODE 里面包含了ODBC的错误信息的描述 m strError 包含一个描叙异常情况的字符串 m strStateNativeOrigin 包含描述异常情况的字符串m strStateNativeOrigin 如果变量包含多个错误的描述 错误会分行显示 CDBException类的成员变量 20 例13 2 在 例13 1 的基础上增加 删除一个记录 更新记录 和 清除域 三个菜单项 并实现相应的操作 响应COMMAND命令 响应命令

11、UPDATE COMMAND UI 1加入菜单项 21 2重载OnMove函数 22 BOOLCODBCView OnMove UINTnIDMoveCommand switch nIDMoveCommand caseID RECORD PREV m pSet MovePrev if m pSet IsBOF break 如果移到数据库的开始 自动执行MoveFirst函数caseID RECORD FIRST m pSet MoveFirst break caseID RECORD NEXT m pSet MoveNext if m pSet IsEOF break if m pSet Ca

12、nScroll m pSet SetFieldNull NULL 清空屏幕break caseID RECORD LAST m pSet MoveLast break default ASSERT FALSE 异常情况 UpdateData FALSE 交换数据returnTRUE 23 3添加菜单响应函数 voidCODBCView OnDeleteRecord 删除记录 CRecordsetStatusm cStatus try m pSet Delete catch CDBException m pEx AfxMessageBox m pEx m strError m pEx Delet

13、e m pSet MoveFirst 若失败 将记录指针移到首记录UpdateData FALSE return m pSet GetStatus m cStatus if m cStatus m lCurrentRecord 0 m pSet MoveFirst 删除了最后一个记录elsem pSet MoveNext UpdateData FALSE 24 voidCODBCView OnUpdateDeleteRecord CCmdUI pCmdUI 删除后的刷新 pCmdUI Enable m pSet IsEOF voidCODBCView OnUpdateRecord m pSet

14、 Edit UpdateData TRUE if m pSet CanUpdate m pSet Update 25 voidCODBCView OnUpdateUpdateRecord CCmdUI pCmdUI 刷新记录集 pCmdUI Enable m pSet IsEOF voidCODBCView OnClearDomain 清除域 m pSet SetFieldNull NULL UpdateData FALSE 26 例13 3 在 例13 2 的基础上增加功能 使得程序能够向数据库中添加新记录 增加一个菜单项 增加一个新记录 其ID标识为ID ADD RECORD 27 在数据

15、库中增加记录步骤 得到最后一条记录的ID号将其加1通过AddNew函数来添加记录把新的ID值设置为新增记录中的ID字段值用Update函数保存新记录调用Requery函数更新记录把输入控制滚动到数据库中的最后一条记录上 28 为了计算新的ID号 需增加CODBCSet类的成员函数GetMaxID longCODBCSet GetMaxID MoveLast 移到最后一条记录returnm ID 返回该ID值 29 voidCODBCView OnAddRecord CRecordset pSet OnGetRecordset 获取指向数据库的指针if pSet CanUpdate 更新表单 3

16、0 例13 4 在 例13 3 的基础上增加浏览记录的功能和对记录进行排序的功能 创建对话框 通过在对话框中指定记录序号 记录序号不是记录的ID号标识 来浏览该条记录的内容 IDD MOVE RECORD IDC RECORD ID 31 voidCODBCView OnMoveToRecord CMoveToRecorddlgMoveTo 创建CMoveToRecord类的对象实例if dlgMoveTo DoModal IDOK CRecordset pSet OnGetRecordset 指向数据库记录的指针if pSet CanUpdate 更新表单 32 由于在视图中响应了对话框的操作 因此 还需要在ODBCView类的实现文件ODBCView cpp中加入定义对话框类的头文件 include MoveToRecord h 同样 为了使用工具栏按钮进行快速操作 在工具栏中定义一个Move按钮 其ID与菜单项 移到第 条记录 的ID一致 Move按钮的ID为ID MoveToRecord 33 由于CRecordset类的对象或从CRecordset类继承的对象都拥有一个m s

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号