VC第八章应用实例之三-开发一个简单的数据库系统.ppt

上传人:小飞机 文档编号:6522798 上传时间:2023-11-08 格式:PPT 页数:32 大小:345.47KB
返回 下载 相关 举报
VC第八章应用实例之三-开发一个简单的数据库系统.ppt_第1页
第1页 / 共32页
VC第八章应用实例之三-开发一个简单的数据库系统.ppt_第2页
第2页 / 共32页
VC第八章应用实例之三-开发一个简单的数据库系统.ppt_第3页
第3页 / 共32页
VC第八章应用实例之三-开发一个简单的数据库系统.ppt_第4页
第4页 / 共32页
VC第八章应用实例之三-开发一个简单的数据库系统.ppt_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《VC第八章应用实例之三-开发一个简单的数据库系统.ppt》由会员分享,可在线阅读,更多相关《VC第八章应用实例之三-开发一个简单的数据库系统.ppt(32页珍藏版)》请在三一办公上搜索。

1、VC+入门与提高,主讲教师:贾澎涛,第八章应用实例之三开发一个简单的数据库系统,数据库操作是在制作管理类应用程序时经常要面对的问题,VC+6.0中提供了处理数据库的功能。本章首先介绍数据库的概念,并用一个实例说明了调用数据库的方法。,8.1关系数据库简介,在关系数据库中,所有的数据都按“表(术语:关系)”进行组织和管理。例如,某班的学生基本情况表,如下表所示。,表用于组织和存储数据,由行与列组成。每一列表示一个数据分类。例如学号、姓名、性别、出生日期等,分别表示了“学生”的各种信息。术语称一列为一个字段并且字段名称在表中必须唯一;而每一行则表示数据的具体描述,例如第一行就记录了学生“李玉红”的

2、基本信息。术语称一行为一条记录。,关系数据库:一个关系数据库是由若干表组成。数据表:简称表,一个表就是一组相关的数据分类后(字段)按行排列,像一张表格一样。数据集:一般指数据表通过条件过滤产生的子集或者整个数据表。(在“ADO数据表”中可以通过“过滤”产生子集,在“ADO查询”可以通过SQL查询产生子集)。“数据表”和“数据集”两个名词常常通用,在没有指定选择条件下,一般指的是同一个东西。如表1所示,查询性别为“男”的学生,我们往往称查询的结果为数据集。,数据:数据指的是储存在数据表中的信息,数据可能是一个字段中的一个内容,一个由一系列字段组成的记录,或是一个记录的集合。数据库应用项目能取得、

3、增加、修改或是删除数据表中的数据。字段:在数据表中,每一列称为一个字段。每一个字段都有相应的描述信息,如数据类型、数据宽度等。,记录:在数据表中每一行称为一条记录。索引:为了加快访问数据库的速度,数据库都使用索引,类似于图书馆为图书建立的图书索引,使读者可以方便的查阅所到需要的图书。索引是一个独立的文件或表格(每个数据库处理的方式不同);在数据库的整个生命周期中,它一直存在,并得到相应的维护。过滤:从数据表中列出符合你给出条件的记录。,主键:主键是表中一列或多列的组合,其值惟一标识了表中的一行记录。在数据表中,任意两条记录的主键不能具有相同的值。例如在表1中,“学号”字段当作数据表的主键。如果

4、出现了相同的学号,将提示出错,因为系统不知道存取的究竟是哪一条记录的数据。假设把“姓名”字段设为主键,这就要求该班不能出现重名现象。但就实际情况来看,一个班中确实存在重名现象的可能,所以“姓名”字段不宜做为主键。排序:在浏览数据表时,我们常常对数据表按某种类型排序。排序在最后的表现方式上与索引是相同的。它们的区别是,排序常常是一种临时性的行为,浏览、打印后就不需要了,一般不进行物理上的存储。,8.2 ODBC及MFC的ODBC类,ODBC(OpenDatabaseConnectivity,开放数据库互连)是微软公司开放服务结构(WOSA,WindowsOpenServicesArchitect

5、ure)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。,一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。也就是说,不论是FoxPro、Access还是Oracle数据库,均可用ODBCAPI进行访问。由此可见,ODBC的最大优点是能以统一的方式处理所有的数据库。,8.2.1 MFC的ODBC类,VisualC+的MFC基类库定义了

6、几个数据库类。在利用ODBC编程时,经常要使用到CDatabase(数据库类),CRecordSet(记录集类)和CRecordView(可视记录集类)。其中:CDatabase类对象提供了对数据源的连接,通过它你可以对数据源进行操作。-,CRecordSet类对象提供了从数据源中提取出的记录集。CRecordSet对象通常用于两种形式:动态行集(dynasets)和快照集(snapshots)。动态行集能保持与其他用户所做的更改保持同步。快照集则是数据的一个静态视图。每一种形式在记录集被打开时都提供一组记录,所不同的是,当你在一个动态行集里滚动到一条记录时,由其他用户或是你应用程序中的其他记

7、录集对该记录所做的更改会相应地显示出来。CRecordView类对象能以控件的形式显示数据库记录。这个视图是直接连到一个CRecordSet对象的表视图。,8.2.2 应用ODBC编程,应用Visual C+的AppWizard可以自动生成一个ODBC应用程序框架。方法是:(1)打开File菜单的New选项,选取Projects,填入工程名,选择MFC AppWizard(exe),然后按AppWizard的提示进行操作。(2)当AppWizard询问是否包含数据库支持时,如果你想读写数据库,那么选定Database view with file support;而如果你想访问数据库的信息而不

8、想回写所做的改变,那么选定Database view without file support选项就比较合适了。,(3)选择了数据库支持之后Database Source按钮会激活,选中它去调用Data Options对话框。在Database Options对话框中会显示已在ODBC注册的数据库资源,选定你所要操作的数据库,单击OK后会出现Select Database Tables对话框,其中列举了你所选中的数据库中包含的全部表,选择你希望操作的表后,单击OK。(4)在选定了数据库和数据表之后,你可以按照惯例继续进行AppWizard操作。特别需要指出的是:在生成的应用程序框架View类中

9、包含一个指向数据库类对象的指针m_pSet,该指针由AppWizard建立,目的是在视表单和记录集之间建立联系,使得记录集中的查询结果能够很容易地在视表单上显示出来。,8.3 数据库应用实例,要建立一个数据库应用程序,当然要先有一个数据源。可以用现有的数据库软件建立数据库,比如MicroSoft Access,Visual FoxPro等。,8.3.1建立ODBC数据源,(1)用MicroSoft Access建立一个数据库stu.mdb。(2)打开控制面板,找到32bit ODBC图标。(3)双击该图标,在弹出的ODBC数据源管理对话框的User DSN选项卡上单击Add按钮,弹出Creat

10、e New Data Source对话框。(4)选定数据库类型后(我们所选的stu.mdb是一个Access数据库,所以选择Microsoft Access Driver),单击“完成”按钮。,(5)在弹出的对话框上单击Database的Select按钮,在弹出的文件选择对话框中选定所用的数据库文件(如stu.mdb),再在Data Source Name中输入一个数据库名,这个名字可以随便给定,单击OK。(6)回到ODBC数据源管理器对话框,单击“确定”按钮,登录数据库的工作就完成了。,8.3.2生成数据库应用程序,数据库已经建立并建立了ODBC数据源,我们可以回到VC+中生成我们的程序了。

11、(1)FileNewMFC AppWizard(EXE),在工程名中输入一个工程名Ex15。(2)在Step1中选择Single Document。(3)在Step 2 of 6中选择Database view without file support选项,这时下面的Data Source按钮将会有效。(4)单击Data Source按钮,弹出Database Options对话框,选择ODBC单选钮,并从下拉列表中选择我们创立的数据源名称。然后AppWizard还会提示用户选择一个表,我们选择一个表。其余步骤选择默认项。,至此,我们没有添加一行代码就生成了一个完整的面向表的数据库应用程序。下

12、面我们对这个程序进行分析。,8.3.3数据库应用程序结构,CEx15SetCEx15DocCEx15View,8.3.4为CEx15View的对话框资源添加控件,在ResourceView中找到IDD_EX15_FORM的对话框资源,对其进行修改。添加静态文本控件和编辑控件。静态文本控件用来说明右边的编辑控件的内容,而编辑控件则是为了与数据库相连。因此,编辑控件的ID应能表明它所要显示的内容。在这个例子中,数据库中学号、姓名、所在城市、家庭电话相关联的编辑控件的ID分别为ID_NO,ID_NAME,ID_CITY,ID_TEL。,现在要把Edit控件同数据库的字段相关联。只须利用ClassWi

13、zard的Member Variable页,将Edit的ID同CEx15View中的一个CEx15Set类型的指针m_pSet相关联就可以了。打开ClassWizard,选择Member Variable,用户找到相应控件ID,选择Add Variable,弹出Add Member Variable对话框。注意,不用直接输入变量名,打开变量名的下拉列表,选择相应的m_pSet的成员变量即可。将每个Edit控件都关联起来。编译连接运行。,8.3.5进一步了解CRecordSet,在前面我们已经提到利用MFC ODBC类对数据库进行访问,主要利用两个类:CDatabase和CRecordSet。其

14、中,CDatabase的对象通过ODBC和数据源相连接,如果没有建立和数据源的连接,CRecordset是无法访问数据库的。但在上面的例子中。我们并没有看到CDataBase的对象,那么CEx15Set是如何实现对数据源的连接的呢?,实际上,CRecordSet类中有一个CDatabase对象指针型的成员变量m_pDatabase,该成员变量用来指向数据源。在CRecordSet的构造函数中,用户可以直接将一个指向数据源的CDatabase型的指针赋给它的m_pDataSet。但是在CEx15Doc中定义m_ex15Set时,并没有赋给它CDatabase指针。那么,m_ex15Set是怎样取

15、得CDatabase指针的呢?CRecordSet通过一个虚函数GetDefaultConnect获得CDatabase指针。虚函数GetDefaultConnect返回一个用于建立数据源连接的字符串。,在知道了数据源之后,m_ex15Set是如何知道该连接那个表的呢?CRecordSet还有一个虚函数GetDefaultSQL,通过它可以取到所要连接的表名。将CRecordSet派生类对象中的变量和数据库中相应字段对应要用到另一个CRecordSet的纯虚函数DoFieldExchange。,8.3.6增加和删除记录,(1)打开应用程序Ex15,在Record菜单下增加两个菜单项:“增加”和

16、“删除”,ID分别设为ID_RECORD_ADD和ID_RECORD_DELETE。增加记录。增加记录要涉及到CRecordSet的两个函数AddNew和Update。AddNew用于在一打开的记录集中产生一个空记录,当用户在空记录中填入数据后,再调用Update函数才能将新的纪录写入数据库,否则输入的内容会丢失。(2)在视图类CEx15View中增加一个BOOL类型的状态变量,来标识当前是否处于增加记录状态。,protected:BOOL m_Add;并在视图类的构造函数中进行初始化m_Add=FALSE;(3)在视图类中增加ID_RECORD_ADD的消息响应函数,添加如下程序:,void

17、 CEx15View:OnRecordAdd()if(m_Add)OnMove(ID_RECORD_FIRST);/增加一个空记录m_pSet-AddNew();m_Add=TRUE;UpdateData(FALSE);,(4)在视图类中重载OnMove函数,用来实现数据库的Update。添加如下代码:BOOL CEx15View:OnMove(UINT nIDMoveCommand)if(m_Add)if(!UpdateData()return FALSE;m_pSet-Update();/更新记录m_pSet-Requery();/将记录移到新增的最后一条记录m_pSet-MoveLast

18、();,/如果用户要求移到相应位置if(nIDMoveCommand=ID_RECORD_PREV)m_pSet-MovePrev();else if(nIDMoveCommand=ID_RECORD_FIRST)m_pSet-MoveFirst();UpdateData(FALSE);m_Add=FALSE;return TRUE;elsereturn CRecordView:OnMove(nIDMoveCommand);,(5)添加ID_RECORD_DELETE的消息响应函数,并添加如下代码:void CEx15View:OnRecordDelete()m_pSet-Delete();m_pSet-Requery();UpdateData(FALSE);(6)编译连接运行。,大作业,建立一个简单的学生成绩管理系统。数据表有字段:学号、姓名、平时成绩、期中成绩、期末成绩、总评总评平时成绩10期中成绩20期末成绩70要求输入平时成绩、期中成绩、期末成绩后,可以计算出总评成绩。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号