C++课件 第8章 数据库编程.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《C++课件 第8章 数据库编程.ppt》由会员分享,可在线阅读,更多相关《C++课件 第8章 数据库编程.ppt(90页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第8章 数据库编程 Visual C+6.0为用户提供了ODBC、DAO及OLE DB三种数据库方式。这三种方式中最简单也最常用的是ODBC,因此本章先来重点介绍MFC的ODBC编程方法和技巧,然后介绍基于OLE DB的ADO(ActiveX Data Objects,ActiveX数据对象)技术,最后介绍一些用于数据库的ActiveX控件。8.1 MFC ODBC数据库概述数据库概述ODBC是一种使用SQL的程序设计接口,使用ODBC能使用户编写数据库应用程序变得容易简单,避免了与数据源相连接的复杂性。在Visual C+中,MFC的ODBC数据库类CDatabase(数据库类)、CReco
2、rdSet(记录集类)和CRecordView(记录视图类)可为用户管理数据库提供了切实可行的解决方案。8.1.1 数据库基本概念数据库基本概念1.数据库和数据库和DBMS 数据库是指以一定的组织形式存放在计算机存储介质上的相互关联的数据的集合。例如,把一个学校的教师、学生和课程等数据有序地组织起来,存储在计算机磁盘上,就构成了一个数据库。为了有效地管理数据库,常常需要一些数据库管理系统(DBMS)为用户提供对数据库操作的各种命令、工具及方法,包括数据库的建立和记录的输入、修改、检索、显示、删除和统计等。流行的DBMS都提供了一个SQL接口。2.SQL作为用来在DBMS中访问和操作的语言,SQ
3、L(结构化查询语言)语句分为两类:一是DDL(Data Definition Language,数据定义语言)语句,它是用来创建表、索引等,另一是DML(Data Manipulation Language,数据操作语言)语句,这些语句是用来读取数据、更新数据和执行其他类似操作的语句。8.1.1 数据库基本概念数据库基本概念3.ODBC、DAO和和OLE DB ODBC提供了应用程序接口(API),使得任何一个数据库都可以通过ODBC驱动器与指定的DBMS相联。用户的程序就可以通过调用ODBC驱动管理器中相应的驱动程序达到管理数据库的目的。作为Microsoft Windows Open St
4、andards Architecture(WOSA,Windows开放式服务体系结构)的主要组成部分,ODBC一直沿用至今。DAO类似于用Microsoft Access或Microsoft Visual Basic编写的数据库应用程序,它使用Jet数据库引擎形成一系列的数据访问对象:数据库对象、表和查询对象、记录集对象等。它可以打开一个Access数据库文件(MDB文件),也可直接打开一个ODBC数据源以及使用Jet引擎打开一个ISAM(被索引的顺序访问方法)类型的数据源(dBASE、FoxPro、Paradox、Excel或文本文件)。OLE DB试图提供一种统一的数据访问接口,并能处理除
5、了标准关系型数据库中的数据之外,还能处理包括邮件数据、Web上的文本或图形、目录服务(Directory Services)以及主机系统中的IMS和VSAM数据。OLE DB提供一个数据库编程COM(组件对象模型)接口,使得数据的使用者(应用程序)可以使用同样的方法访问各种数据,而不用考虑数据的具体存储地点、格式或类型。8.1.1 数据库基本概念数据库基本概念4.ADO ADO 是目前在Windows环境中比较流行的客户端数据库编程技术。它是Microsoft为最新和最强大的数据访问范例OLE DB而设计的,是一个便于使用的应用程序层接口。ADO使用户应用程序能够通过“OLE DB提供者”访问
6、和操作数据库服务器中的数据。由于它兼具有强大的数据处理功能(处理各种不同类型的数据源、分布式的数据处理等等)和极其简单、易用的编程接口,因而得到了广泛的应用。ADO技术基于COM(Component Object Model,组件对象模型),具有COM组件的许多优点,可以用来构造可复用应用框架,被多种语言支持,能够访问包括关系数据库、非关系数据库及所有的文件系统。另外,ADO还支持各种B/S与基于Web的应用程序,具有远程数据服务RDS(Remote Data Service)的特性,是远程数据存取的发展方向。8.1.2 MFC ODBC向导过程向导过程用MFC AppWizard使用ODBC
7、数据库的一般过程是:用Access或其他数据库工具构造一个数据库;在Windows中为刚才构造的数据库定义一个ODBC数据源;在创建数据库处理的文档应用程序向导中选择数据源;设计界面,并使控件与数据表字段关联。8.1.2 MFC ODBC向导过程向导过程1.构造数据库构造数据库数据库表与表之间的关系构成了一个数据库。作为示例,这里用Microsoft Access 创建一个数据库Student.mdb,其中暂包含一个数据表score,用来描述学生课程成绩,如表8.1所示。在表中包括上、下两部分,上部分是数据表的记录内容,下部分是数据表的结构内容。表表8.1 学生课程成绩表学生课程成绩表(sco
8、re)及其表结构及其表结构8.1.2 MFC ODBC向导过程向导过程2.创建创建ODBC数据源数据源Windows中的ODBC组件是出现在系统的“控制面板”管理工具中,如图8.1所示。双击ODBC图标(在图8.1中已圈定),进入ODBC数据源管理器。在这里,用户可以设置ODBC数据源的一些信息。其中,“用户DSN”页面是用来定义用户自己在本地计算机使用的数据源名(DSN),如图8.2所示。图8.1 Windows 2000的管理工具 图8.2 ODBC数据源管理器 2.创建创建ODBC数据源数据源创建用户DSN的过程如下。(1)单击添加按钮,弹出有一驱动程序列表的“创建新数据源”对话框,在该
9、对话框中选择要添加用户数据源的驱动程序,这里选择“Microsoft Access Driver”,如图8.3所示。(2)单击完成按钮,进入指定驱动程序的安装对话框,单击选择按钮将前面创建的数据库调入,然后在数据源名输入“Database Example For VC+”,结果如图8.4所示。图8.3 “创建新数据源”对话框 图8.4 ODBC Access 安装对话框 2.创建创建ODBC数据源数据源(3)单击确定按钮,刚才创建的用户数据源被添加在“ODBC数据源管理器”的“用户数据源”列表中。如图8.5所示。图8.5 用户数据源列表图8.6 向导的第二步对话框8.1.2 MFC ODBC向
10、导过程向导过程3.在在MFC AppWizard中选择数据源中选择数据源用MFC AppWizard可以容易地创建一个支持数据库的文档应用程序,如下面的过程。用MFC AppWizard创建一个单文档应用程序Ex_ODBC。在向导的第2步对话框中加入数据库的支持,如图8.6所示。在该对话框中用户可以选择对数据库支持程序,其中各选项的含义如表8.2所示。表表8.2 MFC支持数据库的不同选项支持数据库的不同选项3.在在MFC AppWizard中选择数据源中选择数据源选中“数据库查看使用文件支持”项,单击Data Source按钮,弹出“Database Options”对话框,从中选择ODBC
11、的数据源“Database Example For VC+”,如图8.7所示。图8.7 “Database Options”对话框 3.在在MFC AppWizard中选择数据源中选择数据源(4)保留其他默认选项,单击OK按钮,弹出如图8.8所示的“Select Database Tables”对话框,从中选择要使用的表score。(5)单击OK按钮,又回到了向导的第2步对话框。(6)单击完成按钮。开发环境自动打开表单视图CEx_ODBCView的对话框资源模板IDD_EX_ODBC_FORM以及相应的对话框编辑器。(7)编译并运行,结果如图8.9所示。图8.8 “Select Databas
12、e Tables”对话框记录浏览按钮图8.9 Ex_ODBC运行结果8.1.2 MFC ODBC向导过程向导过程4.设计浏览记录界面设计浏览记录界面在上面的Ex_ODBC中,MFC为用户自动创建了用于浏览数据表记录的工具按钮和相应的“记录”菜单项。若用户选择这些浏览记录命令,系统会自动调用相应的函数来移动数据表的当前位置。若在表单视图CEx_ODBCView中添加控件并与表的字段相关联,就可以根据表的当前记录位置显示相应的数据。其步骤如下。(1)按照图8.10所示的布局,为表单对话框资源模板添加表8.3所示的控件。图8.10 控件的设计表表8.3 表单对话框控件及属性表单对话框控件及属性4.设
13、计浏览记录界面设计浏览记录界面(2)按快捷键Ctrl+W,弹出MFC ClassWizard对话框,切换到Member Variables页面,在Class name框中选择CEx_ODBCView,为上述控件添加相关联的数据成员。与以往添加控件变量不同的是,这里添加的控件变量都是由系统自动定义的,并与数据库表字段相关联的。例如,双击IDC_STUNO,在弹出的“Add Member Variable”对话框中的成员变量下拉列表中选择要添加的成员变量名m_pSet-m_studentno,选择后,控件变量的类型将自动设置,如图8.11所示。图8.11 为控件添加数据成员4.设计浏览记录界面设计
14、浏览记录界面(3)按照上一步骤的方法,为表8.4所示的其他控件依次添加相关联的成员变量。需要说明的是,控件变量的范围和大小应与数据表中的字段一一对应。结果如图8.12所示。表表8.4 控件变量控件变量图8.12 添加的控件变量图 4.设计浏览记录界面设计浏览记录界面(4)编译运行并测试,结果如图8.13所示。8.13 Ex_ODBC最后运行结果 8.1.3 ODBC数据表绑定更新数据表绑定更新其步骤如下:(1)按快捷键Ctrl+W,打开MFC ClassWizard对话框,切换到“Member Variables”页面。(2)在“Class name”的下拉列表中选择“CEx_ODBCSet”
15、,此时MFC ClassWizard对话框的Update Columns和Bind All按钮被激活,如图8.14所示。图8.14 “MFC ClassWizard”对话框8.1.3 ODBC数据表绑定更新数据表绑定更新(3)单击Update Columns按钮,又弹出前面的“Database Options”对话框,选择ODBC数据源“Database Example For VC+”,如图8.15所示。(4)单击OK按钮,弹出如图8.16所示的“Select Database Tables”对话框,从中选择要使用的表。图8.15 “Database Options”对话框 图8.16 “S
16、elect Database Tables”对话框 8.1.3 ODBC数据表绑定更新数据表绑定更新(5)单击OK按钮,又回到MFC ClassWizard界面,如图8.17所示。(6)单击Bind All按钮,MFC Wizard将自动为字段落添加相关联的变量。图8.17 更新后的“Member Variables”页面8.2 MFC ODBC应用编程应用编程使用MFC所供的ODBC类:CDatabase(数据库类)、CRecordSet(记录集类)和CRecordView(可视记录集类)。CDatabase类用来提供对数据源的连接,通过它可以对数据源进行操作;CRecordView类用来控
17、制并显示数据库记录,该视图是直接连到一个CRecordSet对象的表单视图。但在实际应用过程中,CRecordSet类是用户最关心的,因为它为用户提供了对表记录进行操作的许多功能,如查询记录、添加记录、删除记录、修改记录等,并能直接为数据源中的表映射一个CRecordSet类对象,方便用户的操作。CRecordSet类对象提供了从数据源中提取出表的记录集,并提供了两种操作形式:动态行集(Dynasets)和快照集(Snapshots)。动态行集能与其他用户所做的更改保持同步,而快照集则是数据的一个静态视图。8.2.1 查询记录查询记录使用CRecordSet类的成员变量m_strFilter、
18、m_strSort和成员函数Open可以对表进行记录的查询和排序。先来看一个示例,该示例在前面的Ex_ODBC的表单中添加一个编辑框和一个查询按钮,单击查询按钮,将按编辑框中的学号内容对数据表进行查询,并将查找到的记录显示在前面添加的控件中。具体过程如下:(1)打开Ex_ODBC应用程序的表单资源,按图8.18所示的布局添加控件,其中添加的编辑框ID号设为IDC_EDIT_QUERY,“查询”按钮的ID号设为IDC_BUTTON_QUERY。图8.18 要添加的控件8.2.1 查询记录查询记录(2)用MFC ClassWizard为控件IDC_EDIT_QUERY添加关联变量m_strQuer
19、y。(3)在CEx_ODBCView类中添加按钮控件IDC_BUTTON_QUERY的BN_CLICKED消息映射,并在映射函数中添加下列代码:void CEx_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);/studentn
20、o是score表的字段名,用来指定查询条件m_pSet-m_strSort=course;/course是score表的字段名,用来按course字段从小到大排序m_pSet-Open();/打开记录集if(!m_pSet-IsEOF()/如果打开记录集有记录UpdateData(FALSE);/自动更新表单中控件显示的内容elseMessageBox(没有查到你要找的学号记录!);代码中,m_strFilter和m_strSort是CRecordSet的成员变量,用来执行条件查询和结果排序。其中,m_strFilter称为“过滤字符串”,相当于SQL语句中WHERE后的条件串;而m_strS
21、ort称为“排序字符串”,相当于SQL语句中ORDER BY后的字符串。若字段的数据类型是文本,则需要在m_strFilter字符串中将单引号将查询的内容括起来,对于数字,则不需要用单引号。8.2.1 查询记录查询记录(4)编译运行并测试,结果如图8.19所示。图8.19 查询记录8.2.2 编辑记录编辑记录CRecordSet类为用户提供了许多对表记录进行操作的成员函数用来添加记录、删除记录和修改记录等。1.增加记录增加记录 增加记录是使用AddNew函数,但要求数据库必须是以“可增加”的方式打开的。下面的代码是在表的末尾增加新记录:m_pSet-AddNew();/在表的末尾增加新记录m_
22、pSet-SetFieldNull(&(m_pSet-m_studentno),FALSE);/设定m_studentno值不为空(NULL)m_pSet-m_studentno=21010503;./输入新的字段值m_pSet-Update();/将新记录存入数据库m_pSet-Requery();/刷新记录集,这在快照集方式下是必须的8.2.2 编辑记录编辑记录1.删除记录删除记录可以直接使用CRecordSet:Delete函数来删除记录。需要说明的是,要使删除操作有效,还需要移动记录函数。例如下面的代码:CRecordsetStatus status;m_pSet-GetStatus(
23、status);/获取当前记录集状态m_pSet-Delete();/删除当前记录if(status.m_lCurrentRecord=0)/若当前记录索引号为0(0表示第 一条记录)则m_pSet-MoveNext();/下移一个记录elsem_pSet-MoveFirst();/移动到第一个记录处UpdateData(FALSE);8.2.2 编辑记录编辑记录3.修改记录修改记录函数CRecordSet:Edit可以用来修改记录,例如:m_pSet-Edit();/修改当前记录m_pSet-m_name=刘向东;/修改当前记录字段值.m_pSet-Update();/将修改结果存入数据库m
24、_pSet-Requery();4.撤消操作撤消操作如果用户在进行增加或者修改记录后,希望放弃当前操作,则在调用CRecordSet:Update()函数之前调用CRecordSet:Move(AFX_MOVE_REFRESH)来撤消操作,便可恢复在增加或修改操作之前的当前记录。8.2.3 字段操作字段操作CRecordSet类中的成员变量m_nFields(用于保存数据表的字段个数)和成员函数GetODBCFieldInfo及GetFieldValue可以简化多字段的访问操作。GetODBCFieldInfo函数用来数据表中的字段信息,其函数原型如下:void GetODBCFieldInf
25、o(short nIndex,CODBCFieldInfo&fieldinfo);其中,nIndex用于指定字段索引号,0表示第一个字段,1表示第二个字段,以此类推。fieldinfo是CODBCFieldInfo结构参数,用来表示字段信息。CODBCFieldInfo结构体原型如下:struct CODBCFieldInfo CString m_strName;/字段名 SWORD m_nSQLType;/字段的SQL数据类型 UDWORD m_nPrecision;/字段的文本大小或数据大小 SWORD m_nScale;/字段的小数点位数 SWORD m_nNullability;/字段
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+课件 第8章 数据库编程 C+ 课件 数据库 编程
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内