




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章数据库编程9.1综述9.2数据库应用实例思考题
9.1综述
数据库技术是信息技术的基础。作为计算机应用领域的一个重要组成部分,管理数据库是计算机的主要用途之一,尤其是商业应用软件基本上都有数据库交互功能。使用数据库管理数据有很明显的优点,如减小数据冗余,可以对数据的一致性和完整性统一控制,实现数据共享和快速查找等。因此数据库在不同的领域,不同的部门得到了广泛的应用。
在VC++6.0中,用户可以选择使用开放数据链接(ODBC)、数据访问对象(DAO)、OLEDB或ActiveX数据对象(ADO)方式来访问数据库,MFC中也提供了数据库类,使用户可以方便地进行数据库操作。9.1.1常见数据库访问技术简介
1.VisualC++开发数据库技术的特点
1)简单性
Visual
C++中提供了MFC类库、ATL模板类以及AppWizard、ClassWizard等一系列的Wizard工具用于帮助用户快速地建立自己的应用程序,大大简化了应用程序的设计。开发者使用这些技术只需编写很少的代码或不需编写代码就可以开发一个数据库应用程序。
2)灵活性
Visual
C++提供的开发环境使开发者可以根据自己的需要设计应用程序的界面和功能,而且Visual
C++提供了丰富的类库和方法,使开发者可以根据自己的应用特点进行选择。
3)访问速度快
为了解决ODBC开发的数据库应用程序访问数据库速度慢的问题,Visual
C++提供了新的访问技术——OLE
DB和ADO。OLE
DB和ADO都是基于COM接口的技术,使用这种技术可以直接对数据库的驱动程序进行访问,这大大提高了访问速度。
4)可扩展性
Visual
C++提供了OLE技术和ActiveX技术,这种技术可以增强应用程序的能力。使用OLE技术和ActiveX技术可以使开发者利用Visual
C++中提供的各种组件、控件以及第三方开发者提供的组件来创建自己的程序,从而实现应用程序的组件化。使用这种技术使应用程序具有良好的可扩展性。
5)可访问不同种类数据源
传统的ODBC技术只能访问关系型数据库,在Visual
C++中,提供了OLE
DB访问技术,用户不仅可以访问关系型数据库,还可以访问非关系型数据库。
2.VisualC++常用开发数据库技术
VisualC++提供了多种访问数据库的技术,主要有如下几种。
1) SQL(结构化查询语言)
SQL语句分为两类:一类是DDL(DataDefinitionLanguage,数据定义语言)语句,它用来创建表、索引等,另一类是DML(DataManipulationLanguage,数据操作语言)语句,这些语句用来读取数据、更新数据和执行其他类似操作。
2) ODBC(OpenDataBaseConnectivity)
ODBC是客户应用程序访问关系数据库时提供的一个统一的接口。对于不同的数据库,ODBC提供了一套统一的API,使应用程序可以应用所提供的API来访问任何提供了ODBC驱动程序的数据库。而且ODBC已经成为一种标准,所以目前所有的关系数据库都提供了ODBC驱动程序,这使ODBC的应用非常广泛,基本上可用于所有的关系数据库。
但由于ODBC只能用于关系数据库,因此利用ODBC很难访问对象数据库及其他非关系数据库。
由于ODBC是一种底层的访问技术,因此,ODBC
API可以使客户应用程序从底层设置和控制数据库,完成一些高层数据库技术无法完成的功能。
3) MFCODBC(MicrosoftFoundationClassesODBC)
由于直接使用ODBC
API编写应用程序要编制大量代码,因此在Visual
C++中提供了MFC
ODBC类,封装了ODBC
API,这使得利用MFC来创建ODBC的应用程序非常简便。
4) DAO(DataAccessObject)
DAO提供了一种通过程序代码创建和操纵数据库的机制。多个DAO构成一个体系结构,在这个结构中,各个DAO对象协同工作。MFC
DAO是微软提供的用于访问Microsoft
Jet数据库文件(*.mdb)的强有力的数据库开发工具。它通过DAO的封装,向程序员提供了DAO丰富的操作数据库手段。
5) OLEDB(ObjectLinkandEmbeddingDataBase)
OLE
DB是Visual
C++开发数据库应用中提供的新技术,它基于COM接口。因此,OLE
DB对所有的文件系统包括关系数据库和非关系数据库都提供了统一的接口。这些特性使得OLE
DB技术比传统的数据库访问技术更加优越。
与ODBC技术相似,OLE
DB属于数据库访问技术中的底层接口。直接使用OLE
DB来设计数据库应用程序需要大量的代码。在VC中提供了ATL模板,用于设计OLE
DB数据应用程序和数据提供程序。
6) ADO(ActiveXDataObject)
ADO技术是基于OLE
DB的访问接口,它继承了OLE
DB技术的优点,并且,ADO对OLE
DB的接口作了封装,定义了ADO对象,使程序开发得到简化。ADO技术属于数据库访问的高层接口。
本书中,对MFCODBC做重点介绍。9.1.2ODBC介绍
1.ODBC概述
Microsoft于1991年1月发布了ODBC,并迅速得到了广大用户的认可,各主要数据库厂商也纷纷推出支持ODBC的驱动程序。ODBC作为
Microsoft的重大成果,已经成功地为Windows操作系统建立了一个开放的接口。
ODBC是OpenDatabaseConnectivity的缩写,意思为“开放数据库链接”。ODBC是使用最广泛的Windows应用程序数据库接口。ODBC为不同的数据库资源提供一个标准的接口,可以使用与数据库管理系统(DBMS)的类型无关的方式访问数据库。一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。也就是说,不论是FoxPro、Access还是Oracle数据库,均可用ODBCAPI进行访问。由此可见,ODBC的最大优点就是能以统一的方式处理所有的数据库。作为一个一致的数据库操作接口,ODBC提供了一个允许单一应用程序访问许多不同数据库管理系统的机制,这种机制允许应用程序开发者不把一个特定的数据库管理系统(DBMS)作为目标去创建应用程序,随后用户能够增加数据库驱动程序模块,该数据库驱动程序把应用程序连接到用户选择的DBMS上。
ODBC通过使用数据库驱动程序(Driver)来提供数据库的独立性。驱动程序是用以支持ODBC函数调用的模块,ODBC通过调用驱动程序所支持的函数来对数据库进行操作。驱动程序与具体的数据库有关,如果要访问不同类型的数据库,ODBC就需要动态地连接到不同的驱动程序上。
ODBC的另一个重要组成部分是驱动程序管理器(DriverManager)。ODBC驱动程序管理器位于Windows控制面板中的32位ODBC程序项中。驱动程序管理器包含在ODBC32.DLL中,能够连接到所有的ODBC应用程序中,它负责安装驱动程序、管理数据源、ODBC函数与DLL中函数的绑定,并帮助程序员跟踪ODBC的函数调用。在ODBC中,应用程序不能直接存取数据库,必须通过管理器和数据库交换信息。
MFC提供的ODBC类对较复杂的ODBCAPI进行了封装,提供了简化的调用接口,从而大大方便了数据库应用程序的开发。程序员不必了解ODBCAPI和SQL的具体细节,利用ODBC类即可完成对数据库的大部分操作。VisualC++6.0中已经提供了对ODBC3.51的支持,用户可以用其API函数进行操作。
2.ODBC组成
一个完整的ODBC由下列几个部件组成:
(1)应用程序(Application)。
(2)ODBC管理器(Administrator)。该程序位于Windows95控制面板(ControlPanel)的32位ODBC内,其主要任务是管理安装的ODBC驱动程序和管理数据源。
(3)驱动程序管理器(DriverManager)。驱动程序管理器包含在ODBC32.DLL中,对用户是透明的。其任务是管理ODBC驱动程序,是ODBC中最重要的部件。
(4) ODBCAPI。
(5) ODBC驱动程序。ODBC驱动程序是一些DLL,提供了ODBC和数据库之间的接口。
(6)数据源。数据源包含了数据库位置和数据库类型等信息,实际上是一种数据连接的抽象。各部件之间的关系如图9-1所示。图9-1ODBC组成结构图应用程序要访问一个数据库,首先必须用ODBC管理器注册一个数据源(或动态注册一个数据源),管理器根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系。这样,只要应用程序将数据源名提供给ODBC,ODBC就能建立起与相应数据库的连接。
在ODBC中,ODBCAPI不能直接访问数据库,必须通过驱动程序管理器与数据库交换信息。驱动程序管理器负责将应用程序对ODBCAPI的调用传递给正确的驱动程序,而驱动程序在执行完相应的操作后,将结果通过驱动程序管理器返回给应用程序。
在VC的数据库类中,最主要的有CDatabase类和CRecordset类。
3.CDatabase类
CDatabase类主要用于对数据库的连接,应用程序通过此连接访问数据源。
使用CDatabase的操作步骤如下:
(1)构造一个CDatabase对象。
(2)调用CDatabase类的成员函数OpenEx()打开一个链接。
(3)当用户在程序中构造CRecordset对象来处理连接的数据源时,将一个指向CDatabase对象的指针传递给CRecordset对象。
(4)使用连接完后,调用CDatabase::Close成员函数来关闭连接,并删除CDatabaset。
常用的成员函数如下:
1)构造函数
通过CDatabase函数可以创建一个CDatabase对象,它的原型如下:
CDatabase();
构造对象后,必须调用成员函数Open或OpenEx建立到指定数据源的连接。
2) Open()函数
通过Open函数建立数据库对象与ODBC数据源之间的连接,其函数原型如下:
virtualBOOLOpenEx(LPCTSTRlpszDSN,
BOOLbExclusive=FALSE,
BOOLbReadOnly=FALSE,
LPCTSTRlpszConnect="ODBC",
BOOLbUseCursorLib=TRUE);
Open函数参数说明如表9-1所示。
3) OpenEx()函数
通过OpenEx函数建立数据库对象与ODBC数据源之间的连接,其函数原型如下:
virtualBOOLOpenEx(LPCTSTRlpszConnectString,DWORDdwOptions=0);
throw(CDBException,CMemoryException);
OpenEX函数参数说明如表9-2所示。
4) Close()函数
该函数断开数据库对象与ODBC数据源之间的连接,其函数原型如下:
virtualvoidClose();
5) GetConnect()函数
通过这个函数可以获得与ODBC数据源连接的字符串,其函数原型如下:
constString&GetConnect();
6) IsOpen()函数
通过IsOpen函数可以确定当前的CDatabase对象是否与数据源连接,其函数原型如下:
BOOLIsOpen();
如当前的CDatabase对象已经与数据源连接,返回非0值,否则返回0值。
7) GetDatabaseName()函数
通过GetDatabaseName函数可以得到与CDatabase对象连接的数据库名称,其函数原型如下:
CStringGetDatabaseName();
8) CanUpdate()函数
通过CanUpdate函数可以检测CDatabase对象是否允许更新,其函数原型如下:
BOOLCanUpdate();
如果CDatabase对象允许更新,则返回非0值,否则返回0值。
9) CanTransact()函数
通过CanTransact函数可以确定数据源是否支持事务,其函数原型如下:
BOOLCanTransact()const;
如果数据源支持事务,则返回非0值,否则返回0值。
10) SetLoginTimeout()函数
通过SetLoginTimeout函数可以设置登录超时时间,其函数原型如下:
voidSetLoginTimeout(DWORDdwSeconds);
11) SetQueryTimeout()函数
SetQueryTimeout函数可以设置查询超时时间,其函数原型如下:
voidSetQueryTimeout(DWORDdwSeconds);
4.CRecordset类
CRecordset类主要用来与数据库进行交互。类中封装了对一个数据记录的处理,如添加、修改、删除、更新等操作。
常见的成员函数如下。
1)构造函数
在处理数据库的记录集之前,需要为CRecordset对象打开记录集。CRecordset类的Open函数用于打开记录集,但在打开之前,首先要构造CRecordset对象,这时需用到CRecordset的构造函数,函数原型为:
CRecordset(CDatabase*pDatabase=NULL);参数为指向CDatabase的指针。默认值为NULL。如果有了CDatabase对象,则可以直接传递给CRecordset构造函数。如果参数CDatabase对象没有进行连接,即使用默认参数NULL,则在CRecordset对象的Open函数中进行连接。
2) Open()函数
Open函数用于为CRecordset对象打开记录集,函数原型为:
virtualBOOLOpen(UINTnOpenType=AFX_DB_USE_DEFAULT_TYPE,
LPCTSTRlpszSQL=NULL,DWORDdwOptions=none);
throw(CDBException,CMemoryException);
Open函数参数说明如表9-3所示。0
3) Close()函数
Close函数用于关闭记录集,其函数原型如下:
virtualvoidClose();
4) AddNew()函数
AddNew用于向记录集中添加一条新的空白记录,插入数据库的末尾。用户可以通过修改成员变量的值在空白记录中写入数据,然后调用Update函数更新数据库。其函数原型如下:
virtualvoidAddNew();
throw(CDBException);
如果选择dynasets方式打开记录集,新增加的记录会立刻出现在记录集的末尾;而对于snapshots方式,只有调用Requery函数后记录集中才会体现这种增加。
5) Delete()函数
Delete函数用于删除当前记录,记录集指针移动到下一条记录,其函数原型如下:
virtualvoidDelete();
throw(CDBException);
注意,执行此命令后,不需要使用Update函数进行更新;删除记录前,需要确认是否可以修改数据源,可以使用CanUpdate函数进行判断。
6) Edit()函数
Edit函数用于编辑记录集中的当前记录,调用此函数后,可对成员变量进行修改,其函数原型如下:
virtualvoidEdit();
throw(CDBException,CMemoryException);
执行此命令后,需要使用Update函数进行更新。
7) Update()函数
Update函数用于将AddNew和Edit函数执行后对记录集的修改进行更新,保存到数据源中,其函数原型为:
virtualvoidUpdate();
throw(CDBException);
8) CancelUpdate()函数
与Update函数功能相反,CancelUpdate函数用于取消Edit和AddNew函数进行的更新操作,其函数原型为:
virtualvoidCancelUpdate();
9) Requery()函数
Requery函数用于重新刷新记录集。调用该函数后,记录集将获得从数据源中重新获取的数据而重建记录集,所有相关的应用程序进行的修改将反应在新的记录集上,其函数原型为:
virtualvoidRequery();
throw(CDBException);
如果用户进行了查询过滤操作,可以在修改了m_strFilter和m_strSort成员变量后调用Requery函数。
10) MoveFirst()函数
MoveFirst函数可将当前位置移动到开始位置,函数原型为:
voidMoveFirst();
throw(CDBException,CMemoryException);
11) MoveLast()函数
MoveLast函数可将当前位置移动到末尾位置,函数原型为:
voidMoveLast();
throw(CDBException,CMemoryException);
12) MoveNext()函数
MoveNext函数可将当前位置向前移动一个记录位置,函数原型为:
voidMoveNext();
throw(CDBException,CMemoryException);
13) MovePrev()函数
MovePrev函数可将当前位置向后移动一个记录位置,函数原型为:
voidMovePrev();
throw(CDBException,CMemoryException);
14) Move()函数
Move函数用于移动记录集指针到指定位置,函数原型为:
voidMove(longnRows,WORDwFetchType=SQL_FETCH_RELATIVE);
throw(CDBException,CMemoryException);
Move函数参数说明如表9-4所示。
15) GetRecordCount()函数
GetRecordCount函数用于获得记录集中记录的条目数,其函数原型为:
LongGetRecordCount();
16) GetTableName()函数
GetTableName函数用于获得记录集对应的数据库表名称,其函数原型为:
ConstCString&GetTableName();
17) GetSQL()函数
GetSQL函数用于获得记录集所使用的SQL语句,函数原型为:
ConstCString&GetSQL();
18) IsBOF()函数
IsBOF函数用于判断当前记录集指针的位置是否已到达记录集的起始位置,函数原型为:
BOOLIsBOF();
19) IsEOF()函数
IsEOF函数用于判断当前记录集指针的位置是否已到达记录集的最后一条位置,函数原型为:
BOOLIsEOF();
20) IsDelete()函数
IsDelete函数用于判断当前记录集指针的位置是否指向一个已经被删除的记录位置,函数原型为:
BOOLIsDelete();
9.2数据库应用实例
下面通过一个数据库应用实例来学习如何创建一个数据库、连接一个数据库并且操作一个数据库的方法。
9.2.1利用Access创建一个数据库
下面将为后面的ODBC应用建立一个名为“studentinfo”的Access数据库,操作步骤如下:
(1)进入“MicrosoftAccess”操作界面。
(2)选择“文件/新建”命令,弹出“新建文件”对话框,单击“空数据库”,如图9-2所示。
(3)弹出“文件新建数据库”对话框,在“保存位置”右边的下拉列表中选择数据库的保存路径,这里选择“d:\visualc++程序教程\第9章”,在“文件名”右边的编辑框中输入“sutdentinfo.mdb”为新建数据库命名,单击“创建”按钮。
(4)回到“MicrosoftAccess”操作界面,出现了数据库设计工作区,单击“设计”按钮,如图9-2所示。
(5)弹出“表1:表”对话框,等待定义数据库表各字段名称。定义如表9-5所示。图9-2数据库设计工作区
(6)弹出“是否保存对表1的设计的更改?”提示框,单击“是”按钮,如图9-3所示。
(7)弹出“另存为”对话框,在“表名称”下的编辑框中输入“student”,为表命名,单击“确定”按钮。
(8)回到数据库设计工作区,单击“打开”按钮,按照各字段,输入初始客户学生信息,如图9-4所示。图9-3提示框图9-4输入初始学生信息9.2.2为ODBC数据源管理器添加ODBC数据库源
ODBC应用程序是连接在ODBC数据源上的。本机的数据源可以使用控制面板中ODBC数据源管理器进行配置。
下面将刚建立的“studentinfo”数据库添加到ODBC数据源管理器中。
操作步骤如下:
(1) Windows桌面上单击“开始”按钮。
(2)弹出开始菜单,选择“设置/控制面板/管理工具/数据源(ODBC)”命令。
(3)弹出“ODBC数据源管理器”对话框,选择“用户DSN”选项卡,单击“添加”按钮,如图9-5所示。图9-5“ODBC数据源管理器”对话框这里,用户DSN中给出的是在本地机上的数据源;系统DSN中给出的是可以为任何用户使用的本地数据源;文件DSN中给出了数据源文件。
(4)弹出“创建新数据源”对话框,驱动程序选择“MicrosoftAccessDrive(*.mdb)选项,单击“完成”按钮,如图9-6所示。
(5)弹出“ODBCMicrosoftAccess安装”对话框,在“数据源名”右边的编辑框中输入“studentinfo”;在“数据库”分组框中单击“选择”按钮,如图9-7所示。图9-6“创建新数据源”对话框图9-7“ODBCMicrosoftAccess安装”对话框
(6)弹出“选择数据库”对话框,在“驱动器”下的组合框中选择创建的“addressbook.mdb”数据库所在的驱动器符号,在“目录”下的树形列表框中选择数据库所在位置的路径,这里的路径为“d:\vc++程序设计\第9章”,在左边的列表框中出现该路径下的所有后缀名为“.mdb”的文件,双击“studentinfo.mdb”,单击“确定”按钮,如图9-8所示。
(7)回到“ODBC数据源管理器”对话框,选择“用户DSN”选项卡,可以在“用户数据源”下的列表框中看到新增加的用户ODBC数据源“studentinfo”,单击“确定”按钮,如图9-9所示。
这样,就建立了一个名为“addressbook”的用户ODBC数据源。图9-8“选择数据库”对话框图9-9“ODBC数据源管理器”对话框9.2.3建立一个带有ODBC数据库支持功能的单文档界面工程文件
操作步骤如下:
(1)打开VisualC++6.0,选择“文件/新建”命令,即弹出“新建”对话框。
(2)在弹出的对话框中,选择“工程”选项卡,在列表中选择
,在“位置”中输入工程建立路径,在“工程”文本框中输入工程名“chap9_1”,然后单击“确定”按钮。
(3)弹出“MFCAppWizard-Step1”对话框,选择“单个文档”,然后选择“下一个”。
(4)弹出“MFCAppWizard-Step2of6”对话框,选择“查看数据库不使用文件支持”单选框,单击“DataSource…”按钮,如图9-10所示。图9-10“MFCAppWizard-Step2of6”对话框
(5)弹出“DatabaseOptions”对话框,在“Datasource”中选中“ODBC”选项,在旁边的下拉菜单中选中“studentinfo”,如图9-11所示。
(6)弹出“SelectDatabaseTables”对话框,在列表框中选择“student”,单击“OK”按钮,如图9-12所示。
(7)弹出“MFCAppWizard-Step2of6”对话框,单击“完成”按钮,如图9-13所示。
这样就建立了一个ODBC支持的工程文件。图9-11“DatabaseOptions”对话框图9-12“SelectDatabaseTables”对话框图9-13“MFCAppWizard-Step2of6”对话框9.2.4设计用户操作主界面
现在已经生成了一个带有数据库支持功能的单文档界面工程文件,系统自动生成了一个名为“IDD_CHAP9_1_FORM”的对话框,运行时自动显示。下面就利用该对话框作为用户操作主界面。
●用户操作主界面下包含:
●学生信息浏览;
●学生信息删除;
●学生信息添加;
●学生信息修改。操作步骤如下:
(1)在选项卡中,双击文件夹,在展开菜单中选择对话框。
(2)双击对话框,在右边的对话框编辑区中利用编辑框、静态文本和按钮设计主界面,如图9-14所示。
各功能区使用控件列表说明如表9-6所示。图9-14用户操作主界面设计表9-6控件列表说明9.2.5实现学生信息浏览功能
建立工程文件时,系统菜单中已经自动生成“记录”菜单,其中包含“第一个记录”、“前一个记录”、“下一个记录”、“最后一个记录”4个选项,其ID分别对应为“ID_RECORD_FIRST”、“ID_RECORD_PREV”、“ID_RECORD_NEXT”、“ID_RECORD_LAST”。
下面就利用这4个选项完成对学生信息的浏览功能,并将结果在主操作界面的“学生信息管理系统”功能区中显示出来。操作步骤如下:
(1)在主菜单中选择“查看/建立类向导”。
(2)弹出“MFCClassWizard”对话框,选择“MessageVariables”选项卡;在“Classname”下的组合框中,选择“CChap9_1View”选项;在“ControlIDs”下的列表框中选择“IDC_NAME”,单击“AddVariable...”按钮,如图9-15所示。
(3)弹出“AddMemberVariable”对话框,在“Membervariablename”下的组合框中输入“m_name”,单击“OK”按钮,如图9-16所示。
(4)回到“MFCClassWizard”对话框,可以看到增加了ContrlIDs为IDC_ADDRESS,类型为CString,变量名为m_address的成员变量。
(5)使用同样的方法添加成员变量,如表9-7所示。图9-15“MFCClassWizard”对话框图9-16“AddMemberVariable”对话框
(6)选择“MFCClassWizard”选项卡,在“Classname”下的组合框中,选择“CChap9_1View”选项;在“ObjectIDs”下的列表框中选择“ID_RECORD_FIRST”;在“Messages”下的列表框中选择“COMMAND”,单击“AddFunction…”按钮,如图9-17所示。
(7)弹出“AddMemberFunction”对话框,单击“OK”按钮,如图9-18所示。
(8)回到“MFCClassWizard”对话框,在“Memberfunctions”下的列表框中已经增加了名为“OnRecordFirst”的成员函数,如图9-19所示。图9-17“MFCClassWizard”对话框图9-18“AddMemberFunction”对话框图9-19添加“OnRecordFirst”成员函数
(9)用同样的方法,如表9-8所示添加成员函数。(10)选择,修改函数体内容:
voidCChap9_1View::OnRecordFirst()
{
//TODO:Addyourcommandhandlercodehere
m_pSet->MoveFirst();//数据库表记录集指针移动到数据库起始位置
m_name=m_pSet->m_name;
m_ID=m_pSet->m_ID;
m_grade=m_pSet->m_grade;
m_major=m_pSet->m_major;
m_tel=m_pSet->m_telephone;
UpdateData(FALSE);//将数据显示在编辑框中
}这里,m_pSet为系统自动生成的CRecordset派生类Chap9_1Set的对象指针,使用该指针可以对数据库表中的内容进行操作。其中m_pSet->name、m_pSet->m_ID、m_pSet->m_major、m_pSet->m_telephone分别对应“studentinfo”数据库表“student”中的name、ID、major、telephone四个字段当前数据库表记录集指针位置的数据。(11)选择,修改函数体内容:
voidCChap9_1View::OnRecordLast()
{
//TODO:Addyourcommandhandlercodehere
m_pSet->MoveLast();//数据库表记录集指针移动到数据库起始位置
m_name=m_pSet->m_name;
m_ID=m_pSet->m_ID;
m_grade=m_pSet->m_grade;
m_major=m_pSet->m_major;
m_tel=m_pSet->m_telephone;
UpdateData(FALSE);
}(12)选择,修改函数体内容:
voidCChap9_1View::OnRecordNext()
{
//TODO:Addyourcommandhandlercodehere
m_pSet->MoveNext();//数据库表记录集指针当前位置向后移动一条记录
m_name=m_pSet->m_name;
m_ID=m_pSet->m_ID;
m_grade=m_pSet->m_grade;
m_major=m_pSet->m_major;
m_tel=m_pSet->m_telephone;
UpdateData(FALSE);
}(13)选择,修改函数体内容:
voidCChap9_1View::OnRecordPrev()
{
//TODO:Addyourcommandhandlercodehere
m_pSet->MovePrev();//数据库表记录集指针当前位置向前移动一条记录
m_name=m_pSet->m_name;
m_ID=m_pSet->m_ID;
m_grade=m_pSet->m_grade;
m_major=m_pSet->m_major;
m_tel=m_pSet->m_telephone;
UpdateData(FALSE);
}
(14)选择菜单“编译/编译chap9_1View.cpp”编译程序,无误;选择菜单“编译/构件chap9a.exe”,无误;选择菜单“编译/执行chap9_1.exe”,选择“记录/下一个记录”,“学生信息管理系统”功能区即出现记录结果,如图9-20所示。图9-20学生信息浏览运行结果9.2.6实现学生信息添加功能
添加记录操作通过单击按钮来完成,下面为按钮添加BN_CLICKED成员函数。
(1)在主菜单中选择“查看/建立类向导”。
(2)弹出“MFCClassWizard”对话框,选择“MessageMaps”选项卡;在“Classname”下的组合框中,选择“CChap9_1View”选项;在“ObjectIDs”下的列表框中选择“IDC_ADD”;在“Messages”下的列表框中选择“BN_CLICKED”,单击“AddFunction…”按钮,如图9-21所示。图9-21添加BN_CLICKED成员函数
(3)弹出“AddMemberFuction”对话框,单击“OK”按钮,如图9-22所示。
(4)回到“MFCClassWizard”对话框,在“Memberfunctions”下的列表框中已经增加了名为“OnAdd”的成员函数。
(5)修改函数体内容:
voidCChap9_1View::OnAdd()
{
//TODO:Addyourcontrolnotificationhandlercodehere
UpdateData(TRUE); //将编辑框中的输入保存到对应变量中
m_pSet->AddNew(); //记录集当前指针位置添加一空白记录
m_pSet->m_name=m_name; m_pSet->m_ID=m_ID;
m_pSet->m_grade=m_grade;
m_pSet->m_major=m_major;
m_pSet->m_telephone=m_tel;
m_pSet->Update(); //更新记录
m_pSet->MoveLast(); //数据库记录集指针移动到最后一条记录
m_pSet->Requery(); //重新排序
}
(6)选择菜单“编译/编译chap9_1View.cpp”编译程序,无误;选择菜单“编译/构件chap9_1.exe”,无误;选择菜单“编译/执行chap9_1.exe”,在对应的编辑框中输入对应信息,单击
按钮,如图9-23所示。图9-23增加学生成绩信息操作
(7)选择菜单“记录/最后一个记录”,在“成绩浏览”功能区显示增加的新记录,如图9-24所示。图9-24浏览最后一个记录9.2.7实现学生信息删除功能
对学生信息的删除操作是通过单击按钮,对当前显示的记录进行删除。
操作步骤如下:
(1)选择菜单“查看/建立类向导”。
(2)弹出“MFCClassWizard”对话框,选择“MessageMaps”选项卡;在“Classname”下的组合框中,选择“CChap9aView”选项;在“ObjectIDs”下的列表框中选择“IDC_DELETE”;在“Messages”下的列表框中选择“BN_CLICKED”,单击“AddFunction…”按钮,弹出“AddMemberFu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 徐州工程学院《材料与化工传输原理》2023-2024学年第二学期期末试卷
- 驻马店职业技术学院《列车牵引计算》2023-2024学年第二学期期末试卷
- 苏州百年职业学院《分布式数据存储》2023-2024学年第二学期期末试卷
- 幼儿园食品卫生小常识
- 创意广告设计展览行业深度调研及发展项目商业计划书
- 创意市集与商业街区行业深度调研及发展项目商业计划书
- 生物基聚酯多元醇制备行业跨境出海项目商业计划书
- 健康轻食吧行业深度调研及发展项目商业计划书
- 高遮盖力墙面漆颜料行业跨境出海项目商业计划书
- 基于强化学习的复杂控制系统动态帧率优化-洞察阐释
- 2025年中考道法答题技巧与模板构建专题08主观题答题技巧(观点概括类试)(学生版+解析)
- 风力发电场调试规程
- 2024-2025学年广东省深圳市高一数学下学期7月期末考试(附答案)
- “教-学-评”一体化下初中英语写作教学评价措施
- 2025团员考试试题及答案
- 2025年软件测试工程师考试题及答案
- 血管内导管相关性血流感染预防与诊治指南(2025)解读课件
- 2025年高考数学考前最后一课
- 茶叶加工考试题及答案
- 2025 中小学征订教辅谋利问题整治工作自查报告
- 江苏省南通市海门市海门中学2025届高考物理四模试卷含解析
评论
0/150
提交评论