c++程序设计 陈圣国 第11章

上传人:E**** 文档编号:89400233 上传时间:2019-05-24 格式:PPT 页数:80 大小:207.01KB
返回 下载 相关 举报
c++程序设计 陈圣国 第11章_第1页
第1页 / 共80页
c++程序设计 陈圣国 第11章_第2页
第2页 / 共80页
c++程序设计 陈圣国 第11章_第3页
第3页 / 共80页
c++程序设计 陈圣国 第11章_第4页
第4页 / 共80页
c++程序设计 陈圣国 第11章_第5页
第5页 / 共80页
点击查看更多>>
资源描述

《c++程序设计 陈圣国 第11章》由会员分享,可在线阅读,更多相关《c++程序设计 陈圣国 第11章(80页珍藏版)》请在金锄头文库上搜索。

1、11.1 关系数据库模型 11.2 使用ODBC 11.3 使用DAO,第 11 章 数据库编程,返回主目录,11章 数据库编程,11.1 关系数据库模型 11.1.1 数据结构 关系数据库采用关系模型,关系模型的数据结构是一种二维表格结构。二维表由行和列构成,称为关系数据表。如表11.1所示,表中每一列描述了对象的一个属性,如姓名、地址等,而表的每一行则是对一个对象的具体描述。表中的一行称作记录(record)或行(row),每一列称作字段(field)或列(column)。,表11.1 关系形式的数据,ID 姓名 地址 邮编 电话 E-mail 1 李明 南京 210001 1234567

2、 2 张芳 西安 710001 7654321,关系数据表中能够唯一标识一个对象的字段称为关键字。如果表中存在多个字段都能用来唯一标识表中的对象,可指定一个字段为该表的关键字,称为主关键字。 一个数据库可以包含多个相关的表,例如表11.1中字段ID为该表的关键字。如果数据库中还有另一个表用于记录表11.1中人员E-mail的收发记录,则可以通过ID这个关键字段将两个表联系起来。此时表11.1称为主表,记录E-mail收发记录的表称为从表,字段ID为该表的外关键字。,在设计关系数据库的表结构时,如果不存在可作为关键字的字段,可增加一个字段作为关键字段,用于唯一标识该行,例如上面表中的ID。大部

3、分数据库管理系统允许在建立表时生成一个自动增加类型的字段,每当表增加一行时,由数据库管理系统自动生成该字段的内容,保证其唯一性。,11.1.2 完整性规则 数据库的数据完整性,是指数据库中数据的正确性和一致性。数据完整性由数据完整性规则来维护。 为了维护数据库中数据的正确性和一致性,在对关系数据库执行插入、删除和修改操作时必须遵循三类完整性规则。 (1) 实体完整性规则:要求主关键字不能为空值,否则主关键字起不到唯一标识表中对象的作用。 (2) 引用完整性规则:不允许引用不存在的对象。例如,如果在上面记录E-mail收发记录的数据库中插入一条记录,其ID值在表11.1中不存在,则破坏了引用完整

4、性规则。 (3) 用户定义的完整性规则:这是针对某一具体数据的约束条件,由应用环境决定。,11.1.3 关系数据库管理系统 关系数据库管理系统(RDBMS)是一套程序,用来定义、管理和处理关系数据库与应用程序之间的联系。例如FoxPro、Access等都是RDBMS。 一个数据库管理系统一般具有如下功能: (1) 数据定义功能:提供数据定义语言及其翻译程序,定义数据库结构、数据完整性和保密性约束等。 (2) 数据操纵功能:提供数据操纵语言及其翻译程序,实现对数据库的查询、插入、更新和删除等操作。,(3) 数据库运行和控制功能:包括数据完整性控制、数据安全性控制、多用户环境的并发控制等。 (4)

5、 数据库维护功能:包括数据库数据的载入、转储和恢复,数据库的维护及数据库的功能、性能分析和检测等。 (5) 数据字典:存放数据库各级模式结构的描述,是访问数据库的接口。 (6) 数据通信功能:包括与操作系统的联机处理、分时处理和远程作业传输的相应接口等。,11.1.4 结构化查询语言(SQL) SQL(Structured Query Language,结构化查询语言)最早由IBM提出,是专门用来处理关系数据库的基于文本的语言,这种数据库语言的最初版本叫做Sequel。SQL的最新标准是SQL92,关系数据库都使用SQL。SQL向数据库提供了完善而一致的接口,它不是独立的计算机语言,需要数据库

6、管理系统的支持方能执行。当前大部分的数据库管理系统都支持SQL。 SQL语言不是一种过程化的语言,它是用于处理一组记录的,这些记录可以来自于存储在关系数据库中的一个表或多个表。,SQL的基本思想是,首先获取满足用户指定的约束条件的一组记录,然后再对这些记录进行某种操作。SQL具有与英语相似的句法。一个SQL语句一般有一个表示要采取的动作的动词,如select、update、delete或insert命令,其中最常用的动作是检索(select)记录。,11.2 使 用 ODBC,11.2.1 ODBC工作原理 ODBC(Open Database Connectivity,开放数据库互连)是微软

7、公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它为关系数据库的应用软件提供了一种统一接口。 基于ODBC的应用程序对数据库的操作不依赖数据库管理系统,所有的数据库操作由对应的ODBC驱动程序完成。不论是FoxPro、Access还是Oracle数据库,均可通过ODBC接口访问。ODBC的最大优点是能以统一的方式处理所有的关系数据库。图11.1是ODBC体系结构示意图。Visual C+6.0提供了各种常见数据库的ODBC驱动程序,在安装时可以选择安装。,图11.1 ODBC体系结构示意图,应用程序要访问一个数据库,

8、首先必须用ODBC管理器注册一个数据源,管理器根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系。这样,只要应用程序将数据源名提供给ODBC,ODBC就能建立起与相应数据库的连接。ODBC管理器通过Windows 95控制面板启动,其主要任务是管理安装的ODBC驱动程序和管理数据源。 在ODBC管理器中的“用户DSN”页单击“添加”按钮,在弹出的对话框中选择ODBC驱动程序,然后将出现数据源配置对话框。图11.2是Access数据库配置时的对话框。,图11.2 数据源的配置,11.2.2 MFC ODBC类简介 MFC的ODBC类对较复杂的ODBC

9、编程接口进行了封装,提供了简化的调用接口,从而大大方便了数据库应用程序的开发。程序员不必了解ODBC接口的细节,利用ODBC类即可完成对数据库的大部分操作。 MFC的ODBC类主要包括: (1) CDatabase类:主要功能是建立与数据源的连接。要建立与数据源的连接,首先应构造一个CDatabase对象,然后再调用CDatabase的Open函数成员。 (2) CRecordset类:该类代表从数据源选择的一组记录(记录集),程序可以选择数据源中的某个表作为一个记录集,也可以通过对表的查询得到记录集,还可以合并同一数据源中多个表的列到一个记录集中。,通过该类可对记录集中的记录进行滚动、修改、

10、增加和删除等操作。 在多任务操作系统或网络环境中,多个用户可以共享同一个数据源。共享数据存在的一个问题就是如何协调各个用户对数据源的修改。CRecordset类支持快照(Snapshot) 和动态集(Dynaset)两种记录集类型,它们的不同表现在,对其他用户改变数据源记录采取了不同的处理方法。 快照型记录集提供了对数据的静态视。当别的用户改变了记录时(包括修改、添加和删除),快照中的记录不受影响,它不反映别的用户对数据源记录的改变。,直到调用了CRecordset:Requery重新查询后,快照才会反映变化。对于像产生报表或统计计算这样的不希望中途变动的工作,快照是很有用的。需要指出的是,快

11、照的这种静态特性是相对于别的用户而言的,它会正确反映由本身用户对记录的修改和删除,但对于新添加的记录直到调用Requery后才能反映到快照中。 动态集提供了数据的动态视。当别的用户修改或删除了记录集中的记录时,会在动态集中反映出来:当滚动到修改过的记录时,对其所作的修改会立即反映到动态集中;当记 录被删除时,MFC代码会跳过记录集中的删除部分。对于其它用户添加的记录,直到调用Requery时,才会在动态集中反映出来。应用程序本身对记录的修改、添加和删除会反映在动态集中。当数据必须是动态的时侯,使用动态集是最适合的。例如,在一个火车票联网售票系统中,显然应该用动态集随时反映出共享数据的变化。,(

12、3) CRecordView类:CRecordView(记录视图)是CFormView的派生类,提供了一个表单视图与某个记录集直接相连,利用对话框数据交换机制(DDX)在记录集与表单视图的控件之间传输数据,用户可以通过表单视图显示当前记录,可以修改、添加和删除数据。该类支持对记录的浏览和更新,在撤消时会自动关闭与之相联系的记录集。用户一般需要创建一个CRecordView的派生类并在其对应的对话框资源中加入控件。 (4) CFieldExchange类:支持记录字段数据交换(DFX),即记录集字段数据成员与相应的数据库的表的字段之间的数据交换。该类的功能与CDataExchange类的对话框数

13、据交换功能类似。 (5) CDBException类:代表ODBC类产生的异常。,11.2.3 创建ODBC应用程序 AppWizard和ClassWizard提供了对ODBC的支持,本节首先通过一个地址簿应用程序演示如何创建一个简单的数据库应用。 第一步,首先使用Access 97建立地址簿数据库,在该数据库中创建地址簿表格。然后建立ODBC数据源,名字为AddressBook。 第二步,在Visual C+中使用AppWizard创建单文档界面的应用程序框架dbdemo。在Step 2中选择“Database view without file support”,如图11.3所示。,图11

14、.3 AppWizard创建数据库应用程序Step 2 of 6,第三步,选择数据源。在图11.3所示的窗口中单击“Data Source”按钮,弹出窗口如图11.4所示。选择ODBC数据源AddressBook。单击“OK”按钮,弹出选择数据表的窗口,如图11.5所示。在该窗口中选择所需的数据表。 第四步,在AppWizard窗口中单击“finish”按钮,AppWizard生成dbdemo程序的框架,并自动打开主窗口资源编辑窗口。如图11.6所示,在该窗口中加入用于查看编辑地址表记录字段内容的文本编辑框,它们的ID分别为:IDC_IDEDIT、IDC_NameEDIT、IDC_Addres

15、sEDIT、IDC_ZipEDIT、IDC_TelenumEDIT、IDC_EmailEDIT。,图11.4 选择数据源,图11.5 选择数据表,图11.6 编辑主窗口资源,第五步,启动ClassWizard设置控件与CDbdemoView类数据成员的对应关系,例如IDC_AddressEdit对应m_pSet-m_Address,如图11.7所示。这些数据成员用于从记录集中获得当前记录的对应的字段值。 最后,编译执行dbdemo.exe,程序执行情况如图11.8所示,可以通过“记录”菜单或工具条上的按钮查阅地址表中的记录,也可以对记录内容进行修改。 现在再回过头来看看AppWizard所生成

16、的部分主要代码,看看使用MFC ODBC类的数据库应用程序是如何工作的。 AppWizard为每一个数据表创建一个CRecordset的派生类。自动生成的CDbdemoset类的声明代码如下:,图11.7 设置控件与CDbdemoView类数据成员的对应关系,图11.8 执行地址簿程序,class CDbdemoSet : public CRecordset public: CDbdemoSet(CDatabase* pDatabase = NULL); DECLARE_DYNAMIC(CDbdemoSet) / Field/Param Data /AFX_FIELD(CDbdemoSet, CRecordset) long m_ID; CString m_name; CString m_address; CString m_zip; CString m_telenum; CString m_email;,/AFX_FIELD / Overrides / ClassWizard g

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

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

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