《C++中用ODBC和ADO方式数据库编程.pdf》由会员分享,可在线阅读,更多相关《C++中用ODBC和ADO方式数据库编程.pdf(31页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 VC+利用利用 ODBC 和和 ADO 方式访问数据库的方法及实例方式访问数据库的方法及实例 大家一起努力学习软件开发,祝你取得成功!大家一起努力学习软件开发,祝你取得成功!企事业企事业管理信息管理信息处理的处理的 C+的数据库的数据库编程编程 第第 1 节节 数据库的数据库的逻辑设计逻辑设计 1.1 商品商品进销存进销存数据库管理数据库管理项目项目 .等数据表。在表的数据结构设计中,字段名尽量采用“可读性可读性”较好的标识符,在程序中看到它,也就知道它实际含义,即“说明”处的文字解释。下面就是这样做的,在。1.2 学生成绩管理学生成绩管理数据库数据库项目项目 在下面的讨论中,结合本教科书(
2、详见第 247 页),不妨做“学生成绩管理数据库”,它有三个数据表:学生信息表学生信息表(学号学号/C/8,姓名姓名/C/8,性别性别/C/6,出生日期出生日期/C/10,身高,身高/C/4,专业专业/C/16)表名为 StudentTable (number,name ,sex ,birthdate,height,specialty)课程表课程表(课程号课程号/C/8,所属专业所属专业/C/20,课程名课程名/C/10,学分学分/C/4,考试时间考试时间/C/10)表名为 CourseTable (CourseNumber,ForSpecial ,CourseName,TotalCredit
3、,TestDate )学生成绩表学生成绩表(学号学号/C/8,课程号课程号/C/8,成绩成绩/C/6)(studentNO,courseNo,score )表名为 StudentScoreTable 上面的数据库,不管是在上面的数据库,不管是在 ACCESS 系统中设计的,还是在系统中设计的,还是在 SQL Server 系统中设计的,系统中设计的,VC+的使用的使用和和 SQL 语句语句引用的引用的方式是一样的、效果是一样的方式是一样的、效果是一样的。C+特别适合做“文本(类型 CString)”处理。在学生成绩管理数据库中,各字段一律定义为“文本型”,当字段实际类型是数值型或要做算术运算时
4、,C+提供了将数值字符串转换为算术型量转换函数:atoi(str)、atol(str)依次将串转换为 int、long;而 atof(str)转换 double 或 float 型。第第 2 节节 数据库管理系统数据库管理系统和和数据库的数据库的物理设计物理设计 2.1 用用 ACCESS 系统创建系统创建学生成绩管理学生成绩管理数据库数据库 2.2 用用 SQL Server 系统创建系统创建学生成绩管理学生成绩管理数据库数据库 省略 2.3 将创建的数据库添加到系统将创建的数据库添加到系统数据源数据源 ODBC 的“的“用户 DSN”中”中 例如:由 ACCESS 创建的数据库,它是一个容
5、器型文件,扩展名为“.mdb”。所以,上述数据库文件是“学生成绩管理.mdb”。操作:“开始/控制面板/性能和维护/管理工具/ODBC 数据源”,则弹出“ODBC 数据源管理器”对话框。先选择“用户 DSN”,再按“添加(D)”按钮:按“添加”按钮之后,又弹出下面“创建新数据源创建新数据源”对话框:取数据源的驱动程序“Microsoft Access Driver(*.mdb)”之后,按“完成完成”按钮。当按“完成完成”按钮之后,系统回到第 2 步,弹出下面“ODBC Microsoft Access 安装安装”对话框。在此,完成将已经设计的 ACCESS 系统的数据库送入系统 ODBC 并且
6、命名(数据源(N):处填写)。例如,将“学生成绩管理.mdb”数据库,送入系统数据源 ODBC 中并且命名为 StudentAndJava:第第3节节 C+C+开发应用程序开发应用程序的的基本知识 基本知识 33.1 1 V C+系统V C+系统的几个重要的的几个重要的英文词语英文词语 (1)(1)I dI d e n t i f i e r 标识符(俗话讲“名字”),缩写词是I DI D。(2)(2)M F CF C M i c r o s o f t FF o u n d a t i o n C C l a s s L i b r a r y 微软的基础类库。(3)(3)A p pA p
7、p l i c a t i o n(A p pA p p)泛指“应用”(程序)。(4)(4)A P IA P I AA p p l i c a t i o n PP r o g r a m m i n g II n t e r f a c e 应用程序接口。(5)(5)A F XA F X A p p l i c a t i o n F r a m e w o r k s 应用程序框架。(6)(6)A p p W i z a r d 应用程序向导。(7)(7)W o r k S p a c e V C+的工作空间视窗,有三个页(面):C l a s s V i e wV i e w 页:“类”
8、视图页,展示当前应用程序所用的类。R e s o u r c e V i e wV i e w 页:“资源”视图页,展示当前应用程序所用的资源(如D i a l o g 和M e n u 等)。F i l e V i e wV i e w 页:“文件”视图页,展示当前应用程序所存放的文件(如扩展名为.c p p、.h 文件)。(8)(8)O D B CO D B C O O p e n DD a t a bb a s e C C o n n e c t i v i t y(开放的数据库连接)。为各种类型的数据库管理系统提供了统一的编程接口,例如不同数据库系统的驱动程序。3.2 3.2 M F
9、CF C 中提供的中提供的基类基类(B a s e C l a s sB a s e C l a s s)(1)(1)C O b j e c t 是大多数类的基类,完成动态空间的分配与回收,支持一般诊断与出错处理。(2)(2)C C m d T a r g e t 负责将系统事件(消息)和窗口事件(消息)发送给响应该事件的对象。(3)(3)C W i n A p p 是C C m d T a r g e t 类的派生类,完成对线程的控制(线程的建立、运行、终止、挂起)。(4)(4)C D o c u m e n t 是文档类,包括应用程序在运行期间所得到的数据。(5)(5)C W n d 是通
10、用窗口类,提供W i n d o w s 中的所有通用特性、对话框和控件。(6)(6)C F r a m e W n d 是从C W n d 继承来的,实现了标准的框架应用程序。(7)(7)C D i a l o g 用来控制对话框窗口。(8)(8)C V i e w 用于让用户通过窗口来访问文档。(9)(9)C M D I F a m e W n d 是一个简化的窗口框架(没有最大化和最小化按钮),用于多文档应用程序的主框架窗口的显示和管理。(1 0)(1 0)C M D I C h i l d W n d 用于文档子窗口的显示和管理。(1 1)(1 1)动态记录集C R e c o r d
11、 S e t 选择和连接O D B C 中数据库的某个“表”。3.3 3.3 C+C+的对话框(的对话框(表单视图表单视图)中最基本“中最基本“控件”的使用”的使用 (1)(1)静态文本(S t a t i c T e x t)设计“标签”,默认的I DI D 是“I D C _ S T A T I C”。不接受用户的输入,不产生通知消息。例如,书写数据库的字段名、提示词。(2)(2)组框(G r o u p B o x)定义一个矩形框,默认的I DI D 是“I D C _ S T A T I C”。矩形框内可以放按钮等控件,使界面设计“好看”一点。(3)(3)编辑框(E d i t B o
12、 x)在对换话框中用于设计文本数据的显示或输入,系统默认的I DI D 是“I D C _ E D I T 1”,用其属性对换话框中“G e n e r a l”选项后,用户可重新命名字(例如:I D C _ S T A T I C _ n u m b e r)。(4)(4)命令按钮(B u t t o n)映射消息:B N _ C L I C K E D 单击,B N _ D O U B L E C L I C K E D 双击,响应“单击”消息的是“事件(E v e n t s)”函数程序。系统默认的I DI D 是I D C _ B U T T O N 1。C+中C+中的消息的消息驱动机
13、制 W i n d o w s 的环境中,系统产生的动作和用户程序运行产生的动作“称为”事件(E v e n t s)产生的消息(M e s s a g e),W i n d o w s 是通过系统发送消息来完成用户输入的。例如:用户按鼠标左按钮,系统发送 W M _ L B U T T O N D O W N 消息;用户敲一个字符键,系统发送 W M _ C H A R 消息;用户进行菜单选择、工具按钮单击等操作,系统发送 W M _ C O M M A N D 消息;C+中 C+中的资源的资源 应用程序中的光标、菜单、工具栏、位图、对话框、.,都是资源,系统都用相应的“标识符”来区分。这些
14、资源,像V C+中的常量一样,可以被编辑和修改。V C+的许多编辑器,都能达到“所见即所得”的设计效果。例如:I D O K 为对话框中“确认”,I D C A N C E L 为对话框中“取消”,B N _ C L I C K E D 为单击按钮。W i n d o w s 的动态连接库(.动态连接库(.D L LD L L)实现用户界面、在屏幕上显示文本和图形,都是通过动态连接库来实现的。动态连接库是一些具有扩展名为D L L 文件,文件中是一些特殊结构的函数。例如:U S E R 3 2.D L L,负责窗口管理,功能有消息、菜单、光标、计时器,其它与控制窗口显示相关的功能。3.4 3.
15、4 在在C+中中创建一个工程(创建一个工程(Project)并且附带并且附带数据库数据库的基本步骤的基本步骤 (1)在C+环境中,选择菜单“文件文件/新建新建”,在弹出的“新建”对话框中,取“工程/MFC AppWizard(exe)/给工程命名”。例如,工程名是“学生成绩管理”:(2)在MFC向导的第第1步步,选择“S单个文档”(或M多重文档),然后按“下一步”按钮。即,要创建一个表单视图表单视图(界面),在界面上设置各种“控件”:(3)在 MFC 向导的第第 2 步步,取“W 数据库查看使用文件支持”,并通过命令 Data Source 去浏览已经存放在 ODBC 中的数据库及其数据库中的
16、一个表:数据库和数据表选择成功后,按 MFC 向导对话框中“完成”按钮以及最后的“确定”按钮,就进入下面的 C+的 MFC 开发环境。可以用“工具箱”中的控件在界面上设计了,例如控件(标签、文本框、组框、命令按钮,在工具箱中的图标依次是)。注意:“W 数据库数据库查看查看使用文件支持使用文件支持”将数据库与表单视图连接在一起,或者说建立了“表单视图与记录集”之间的联系,系统自动产生了程序操作数据库的指针 m_pSet-。第第4节节 用用C+C+做应用程序开发中做应用程序开发中的的技术技术或或技巧技巧的汇总的汇总 44.1 数据库指针“数据库指针“m_pSet-”常用的”常用的成员函数成员函数(
17、完成不同的完成不同的功能功能)(1)激活界面中控件 UpdateData(TRUE);激活表单中控件,例如m_Name、m_Number、m_Result等。UpdateData(FALSE);使用户能看见表单视图(界面上)当前记录的m_Name、m_Number、等的变化 (2)数据指针的位置的确定 m_pSet-IsEOF()是否遇到数据表尾尾,“是”返回值为真真。m_pSet-IsBOF()是否为数据表文件头头。m_pSet-MoveFirst();指向第第1个个记录 m_pSet-MoveNext();指向当前位置的下一个下一个记录 m_pSet-MovePrev();指向当前位置的前
18、一个前一个记录 m_pSet-MoveLast();指向最后一个最后一个记录 m_pSet-m_字段名;(例如:学号字段,m_pSet-m_number)(3)在数据库中添加一个新记录 m_pSet-AddNew();追加一条新记录追加一条新记录的功能函数 在此语句之后,书写向数据库追加的记录的各个字段。最后写下面两句换话:m_pSet-Update();新记录写入数据库的数据表。m_pSet-Requery();刷新记录集。这将改动“物理”数据库。(4)删除数据库中当前显示的记录 m_pSet-Delete();删除“当前显示当前显示”的记录时,有时会出现的记录时,有时会出现“”字样回显。字
19、样回显。(5)执行“统计或或查询”类命令的一般程序模式 在对话框上添加一个“命令按钮命令按钮”,再创建该命令的事件事件(Events.)函数函数,在函数体内书写程序,组织“循环、判定、数据指针移位循环、判定、数据指针移位”等操作。例如:m_pSet-MoveFirst();while(!m_pSet-IsEOF()没有遇到数据表尾时继续循环。统计和判断语句;放结果信息的控件m_Result 成员变量;MessageBox(按确定键看下一个记录,对话框,0);m_pSet-MoveNext();44.2 应用程序应用程序执行时执行时的的“人机交互”“人机交互”办法办法 可以可以引用系统内部的人机
20、交互人机交互对话框,下面的是它们一般格式:AfxMessageBox(提示信息,int,int);窗口标题不能自己确定 MessageBox(提示信息,窗口标题,int);可以自己确定窗口标题 (1)AfxMessageBox(窗口内提示信息,标题默认为项目名,100,10 );返回值是整数。有“是(Y)”、“否(N)”两个按钮,选择“是(Y)”函数返回值 6、“否(N)”函数返回值 7。(2)MessageBox(窗口内提示信息,窗口标题,0 );只有一个“确定”按钮,返回值是整数1。如果是如果是 int flag=MessageBox(窗口内提示信息,窗口标题,100);有“是(Y)”、“
21、否(N)”两个按钮,选择“是(Y)”函数返回值 6、“否(N)”函数返回值 7。用户在程序中用 if 语句语句判 flag 中保存的返回值,决定执行“则”或“否则”动作。(3)利用字符串“并置”运算,将记录的各个字段“合并”到 1 个字符串变量中,放到MessageBox()或者 AfxMessageBox()中,作为提示信息随时输出。例如:CString info=0;info =学号学号:t+m_pSet-m_number+n;info+=姓名姓名:t+m_pSet-m_name +n;info+=性别性别:t+m_pSet-m_sex +n;info+=身高身高:t+m_pSet-m_c
22、olumn1+n;info+=出生日期出生日期:t+m_pSet-m_birthdate+n;if(查询条件满足)MessageBox(info,查询到的记录如下:查询到的记录如下:,100);return;44.3 更改更改应用程序的“应用程序的“标题标题”在C+环境中创建的“项目(Project)”,例如“学生成绩管理”工程,做“编译、连接、运行”时,结果显示为:在标题栏上出现了“无标题无标题”字样。我们希望将“无标题无标题学生成绩管理”中的“无标题”去掉,改成设计者自己定义的标题自己定义的标题,例如换成为“学生成绩管理”。方法方法是:是:在Class View 页,展开类CMyApp(因
23、为我们用汉字“学生成绩管理”作为工程名,C+不识别“汉字标识符”,所以工程类名用My代替,全名是CMyApp),双击函数InitInstance。双击函数InitInstance之后,在弹出的源码文档中,找到函数InitInstance的下面显示位置(该函数尾部),添加“深色深色”的一行:m_pMainWnd-SetWindowText(学生成绩管理);/新加的 再重新“编译、连接、运行”,结果的标题就变成为希望的了:44.4 在在主界面主界面(main()函数所在地)用命令方式用命令方式操作操作另一个对话框另一个对话框中的的成员变量成员变量。这是开发较复杂项目时必然出现的问题。例如,对一个数
24、据表作记录添加时,用另一个对话框接受用户输入的字段值,在调用处启动该对话框中,然后引用其控件的成员变量成员变量,再做记录添加操作。同样,做不同数据表操作时,有时也需要“交流信息”,也可以用这样办法来实现。(1)在主调文档中用 Insert Dialog 命令命令新建立一个对话框,命名为 Dlg1Name。在V C+的工作空间视窗中选择“资源页R e s o u r c e V i e w”,然后“右击”D i a l o g,在弹出的快捷菜单中选择“Insert Dialog”(见下图),则出现一个对话框,按“C t r l +W”键之后,给该对话框命名为Dlg1Name(以后再插入对话框时,
25、可以命名为Dlg2Name、Dlg3Name、Dlg4Name等)等)。当单击选项“Insert Dialog”之后,出现下面下面只带“O K 和C a n c e l”两个按钮的对话框,默认的I D是I D D _ D I A L O G 1、默认的标题是Dialog:按“C t r l +C t r l +W”键之后,系统弹出“A d d i n g a C l a s s”对话框,按“O K”按钮,则出现给该对话框资源命名字的“New Class”对话框,我们输入Dlg1Name(这个名字就是IDD_DIALOG1以资源方式出现在程序中,是程序员操作该对话框的手段,请见下面(2)点),然
26、后按“O K”按钮:(2)在 I D D _ D I A L O G 1 对话框中设置“标签、文本框”等控件,并将控件映射到对应的成员变量成员变量,见下图。在主调处设计一个命令按钮,在命令按钮的事件函数中说明“Dlg1Name dlg;”对象,请并用对象 dlg 去操作 I D D _ D I A L O G 1 对话框中的成员变量。例如:对话框中的成员变量是:m_number 和 m_name 用对象操作是:dlg.m_number 和 dlg.m_name#include Dlg1Name.h void CMyView:OnButtonAdd()/记录添加模块,操作另一个对话框:Dlg1N
27、ame dlg;if(dlg.DoModal()=IDOK)/按 IDD_DIALOG1 的的“O K”按钮返回之后:m_pSet-AddNew();/先执行追加新记录的功能函数 AddNew()m_pSet-m_number=dlg.m_number;/给学号、姓名字段赋值:m_pSet-m_name =dlg.m_name;/.其他字段 m_pSet-Update();/新记录写入数据库的数据表 m_pSet-Requery();/刷新记录集。这将改动物理数据库。(3)将新插入对话框(例如 I D D _ D I A L O G 1)的默认标题标题“Dialog”改成有实际意义的窗口标题。
28、例如:这是做记录插入用的对话框,所以对话框标题取作“添加记录对话框”。在该对话框的属性窗口(Dialog Properties)中,写上新的标题:44.5 在在新建对话框新建对话框(如 I D D _ D I A L O GI D D _ D I A L O G 11)中“连接中“连接 ODBC 的数据源”的的数据源”的方法方法 (1)如果如果连接主控文档 m_pSet-所指向的那个数据表时 先找到项目的“头文件(“学生成绩管理 Set.h)”,展示了其中的“类名(CMySet)”,然后在新建对话框的.CPP 文件中添加:#include “学生成绩管理 Set.h”CMySet pset;通
29、过对象 pset 即可操作字段名和记录移动等功能函数。例如:pset.Open();和 pset.m_number;(2)使用系统基类 CRecordset 为新建对话框连接 ODBC 中的其他数据表 按“Ctrl+W”键,进入 MFC Class Wizard,然后操做下面三步:当第 3 步点击“New.”之后,弹出下面“New Class”对话框,操作(1)和(2)之后按“OK”:上面按“OK”按钮之后,弹出“DataBase Options”对话框,这时要选择数据库、点动态使用。然后按该对话框左上角的“OK”按钮,进入(Select Database Tables)选择数据库中某个数据表
30、的对话框,选定一个表。要操作对话框 Dlg1Name 中已经连接上的命名为 Dlg1Dataset 的的数据表时,可用下面代码:#include Dlg1Dataset.h Dlg1Dataset pset;pset.Open();pset.m_字段名字段名;pset.m_ MoveNextt();.等等 4 4.6 如果后台数据库或数据库中的数据表如果后台数据库或数据库中的数据表“结构修改了结构修改了”,那么那么原来原来的的C+的表单文档的表单文档如何办?如何办?请注意:请注意:m_pSet-是MFC AppWizard建立的,目的是建立“表单视图与记录集”之间的联系。但是,有一个“弱点”:
31、当ACCESS库或SQL库中的数据表“结构被修改时结构被修改时”,则VC+中表单文档就不识别了。可以在MFC AppWizard的环境下,用Update Column与Bind All按钮来重新修改。要注意的是“只能用于开始创建项目时的带数据库的、含main()函数的单个文档”,因为指针m_pSet-是唯一的。P254图8.14。(1)将原来的“Member Variables”的成员变量(上图 CYYYSet 下的),用 Delete Variable 命令一一删除,然后再单击 Update Column 按钮,重新从数据源 ODBC 中选择“数据库”和“表”。(2)对第 1 步重新连接的数
32、据库及表,单击 Bind All 按钮,则重新添加相关联字段。44.7 在当前正在开发的项目(在当前正在开发的项目(Project)的)的“工具箱工具箱”中中添加添加新控件新控件的方法的方法 例如在 MFC 环境下,往项目“学生成绩管理”对话框的工具箱中添加 A D O D a t a 控件,过程为:(11)使用 C+菜单“工程/添加工程/C o m p o n e n t s a n d c o n t r o l s ”,则弹出 C o m p o n e n t s a n d c o n t r o l s G a l l e r y 对话框;(22)在该对话框中双击“R e g i
33、s t e r e d A c t i v e x C o n t r o l s”文件夹;在展开的 R e g i s t e r e d A c t i v e x C o n t r o l s 文件夹内,使用滚动条寻找所需要的控件。例如 A D OA D O D a t a D a t a 控件 控件,对应的文件为 M i c r o s o f t A D O D a t a C o n t r o l,v e r s i o n 6.0 O L E D B。(33)找到控件所对应的文件之后,点击该文件名(即选中),然后按“I n s e r t”按钮(这之后的系统询问,一律使用默认
34、值),最后将控件插入到“工具箱工具箱”之中,方便使用。注意:往工具箱内添加其他控件的做法,与上面操作过程类似。D a t a G r i d 控件:对应文件(M i c r o s o f t D a t a G r i d C o n t r o l,v e r s i o n 6.0 O L E D B)D a t a C o m b o 控件:对应文件(M i c r o s o f t D a t a C o m b o C o n t r o l,v e r s i o n 6.0 O L E D B)W e b 控件:对应文件(M i c r o s o f t W e b B r
35、 o w s e r )44.8 标签(Static text)控件建立时,系统默认的 ID 是“IDC_STATIC”。在它的属性对话框中,要给它一个命名,比如是“IDC_STATIC_QUERY”。注:增加英文词 Query,是为了增强增强该标识符的该标识符的可读性。在操作命令操作命令“查询记录”所对应的模块函数体内模块函数体内加下面源代码源代码(注意注意:只有命令按钮的事件函数内才能用):CStatic *pwnd=(CStatic*)GetDlgItem(IDC_STATIC_ QUERY);pwnd-SetWindowText(输入要查询的学号:);这样,命令命令“查询记录”运行时,
36、动态文本信息将送进标签标签 IDC_STATIC_ QUERY 的框架内。其它“命令按钮”使用时类似类似。动态地动态地更换组框(Group Box)的标题 void CEx_MCIView:OnButtonTop()CStatic *pwnd=(CStatic*)GetDlgItem(IDC_STATIC_top);pwnd-SetWindowText(请编辑当前记录的相关字段值请编辑当前记录的相关字段值);第第 5 节节 使用使用 C+C+的的 MFC AppWizard 和和 ADO 技术创技术创建建表单视图表单视图和和连接数据库连接数据库 55.1 主控窗口带数据库使用主控窗口带数据库使
37、用 m_pSet-指针,其他对话框使用指针,其他对话框使用 ADO 控件控件完成数据库的完成数据库的插入插入、删除删除、查询查询、修改修改等操作等操作。(1)采用“33.4”节的做法,在C+中中创建一个工程(创建一个工程(Project)并且附带并且附带数据库数据库。(22)采用“44.4”节的做法,在工程中工程中插入新的对话框并且命名字。(33)采用“44.7”节做法,在项目(Project)的“工具箱”中添加 A D O D a t a 控件、D a t a G r i d 控件。在新建对话框中设置 A D O D a t a 控件和 D a t a G r i d 控件,状态如下:查看对
38、话框上的控件 Adodc1 或 DataGrid1 的属性时,右击该控件,在弹出的窗口内选择选择“属性”:这就打开控件属性窗口(Properties),在此对控件做下面的属性(Property)值设置:设置控件 Adodc1 和 DataGrid1 的属性,连接连接数据库数据库及及表表。在 Adodc1 属性对话框中:ConnectionString 属性填:DSN=StudentAndJava 记录源(RecordSource)属性填:命令方式和访问的表 而 DataGrid1 的属性:DataSource 属性值取 IDC_ADODC1 控件所绑定的。(4)主调处主调处用命令方式打开对话框
39、(打开对话框(例如下面代码),效果为),效果为#include Dlg2Name.h void CMyView:OnButtonQuery()Dlg2Name dlg;if(dlg.DoModal()=IDOK)AfxMessageBox(打开数据编辑对话框);UpdateData(FALSE);5.2 使用使用 D a t a G r i dD a t a G r i d 控件的选项功能控件的选项功能,在在 D a t a G r i dD a t a G r i d 的列表的列表上做上做记录的记录的追加、删除、字段值的修改追加、删除、字段值的修改。(1)DataGrid 属性选择(下图)。
40、(2)如果)如果主空界面的 m_pSet-数据库表和 DataGrid 操作的数据库表是同一个,则两个窗口可以同步。(33)ADO 操作的数据库,既可以是 ACCESS 的的、也可以是 SQL Server 的的,模式一样。注意:因为做“记录追加、记录删除”时,涉及“数据库的表”物理改动,有一个响应时间问题,所以用“新建对话框”教适宜,主控模块用“命令调用”方式,启动一次对话框,做一个记录的“追加”或者“删除”操作。由 A D O d a t a A D O d a t a 控件提供数据源的 D a t a G r i dD a t a G r i d 列表能够提供记录“添加、删除、更新(即修
41、改)”等操作,见下图的标识,应该充分利用它。(4)用 DataGrid 列表作记录删除时,先用鼠标器选择要删除的记录行(则行变为有底色),然后按人热键“DELETE”。主调对话框也被删除。(5)用 DataGrid 列表做记录插入时,先用鼠标器指到“*”标记行,然后将光标移进“相关字段”并输入新数据。记录录入完成后,按“OK”按钮:主调对话框可以看到新记录。(6)在 DataGrid 的列表中,做记录字段值修改时,随时可以用鼠标器点击到“目标字段”,然后光标在“该字段”闪动,用户进行修改字段数据。修改完成后,按“OK”按钮返回。5.3 D a t a G r i dD a t a G r i
42、d控件的选项功能控件的选项功能“允许添加允许添加(记录追加记录追加)、)、允许删除允许删除(记录删除记录删除)、)、允许更新允许更新(字段值修改字段值修改)”,但是)”,但是数据数据查询查询和和统计统计功能需要自己设计功能需要自己设计。做法:用 Insert Dialog 插入一个对话框,命名为 Dlg3Name,标题是“数据查询和统计对话框”,在此设计查询键、查询命令。查询命令的事件处理函数,完成被查询对象的操作,即对相关数据表的访问。源代码:(1)主控处“查询记录”事件的程序:#include Dlg3Name.h void CMyView:OnButtonQuery()Dlg3Name
43、dlg;dlg.DoModal();(2)“数据查询和统计对话框”中查询命令的程序:#include 学生成绩管理 Set.h void Dlg3Name:OnButtonQuery()/对话框 3 中,访问主控界面的数据库 CMySet pset;UpdateData(TRUE);pset.Open();pset.MoveFirst();while(!pset.IsEOF()if(m_number=pset.m_number|m_name=pset.m_name)CString info=0;查询条件满足 info =学号:t+pset.m_number+n;info+=姓名:t+pset.
44、m_name +n;info+=性别:t+pset.m_sex +n;info+=出生日期:t+pset.m_birthdate+n;info+=专业:t+pset.m_specialty+n;MessageBox(info,查询到的记录如下:,100);return;else pset.MoveNext();然虽在一个“主控文档窗口”内,既可以用指针 m _ p S e t-m _ p S e t-操作数据库,同时也可以用 ADO 控件操作同一数据库,只因为 D a t a G r i d控件做“记录追加、记录删除”时要物理地修改数据库,有时运行不正常。因为 A D O 和 D a t a
45、G r i d 的“游标”定位方式,与 m _ p S e t-m _ p S e t-操有差异的。当 DataGrid 表中,要将原来的英文字段名(如 CourseNumber)换成汉字输出时,应在 Adodc1 控件的“记录源”选项中,用命令 SQL 语句,一般格式为:SELECT CourseNumber AS 课程号课程号,CourseName AS 课程名课程名 FORM CourseTable 5.4 引用 ADO D a t aD a t a 控件控件数据源的 D a t aD a t a C o m b oC o m b o 控件、D a t a L i s tD a t a
46、L i s t控件的使用方法。C+系统中,一个对话框中可以设置多个 Adodc 控件控件,但是一个 Adodc 控件控件只能连接数据库的一个(记录源记录源)表。Da t a Da t a C o m b oC o m b o和 D a t a L i s tD a t a L i s t 操作数据表,像 D a t a G r i dD a t a G r i d 控洋那样,也要依靠 Adodc 控件控件连接的数据库。所以,要想 D a t a G r i d、Da t aD a t a G r i d、Da t a C o m b o、C o m b o、D a t a L i s tD a
47、 t a L i s t 访问不同的数据表,必须各自用 Adodc1 控件控件。右击“D a t a L i s tD a t a L i s t”控件,在掸出快捷菜单中取“属性(R).DataList Object”,则有:先先在属性“RowSource”项下指定“IDC ADODC1”;再再在属性“ListField”项下选择被 LIST 的字段(例如“商品名”,但是一个D a t a L i s tD a t a L i s t控件只能输出一个字段只能输出一个字段)。注:注:实现“D a t aD a t a C o m b oC o m b o”控件的使用时,类似 D a t a L
48、i s tD a t a L i s t 控件的做法。例如例如将商品编号字段“s h a n g p i n I D”放入:第第 6 节节 C+数据库编程中的C+数据库编程中的常规算法常规算法和和实现实现 在“5.3”节已经讲到:D a t a G r i dD a t a G r i d 控件的选项功能选项功能“允许添加、允许删除、允许更新”,能方便完成记录追加、记录删除和字段值修改。但是,对数据库的大量查询查询和统计统计操作不能完成,这需要程序员自己来设计程序了,这就是这就是第第 6 节节要讨论的问题要讨论的问题。?做法:用 Insert Dialog 插入一个对话框,命名为 Dlg3Na
49、me,标题是“数据查询和统计对话框”,在此设计查询键、查询命令。查询命令的事件处理函数,完成被查询对象的操作,即对相关数据表的访问。?当没有 DataGrid 列表自动提供的操作功能的时候,自己书写功能程序。这是要学会的。66.1 一个简单的方案:一个简单的方案:数据数据浏览浏览和数据和数据追加、删除、修改、查询追加、删除、修改、查询和和统计统计等操作都在主控窗口,数据指针是等操作都在主控窗口,数据指针是系统系统给的给的 m_pSet-。这样做的要求是:(1)记录查询时:必须是先赋给了查询键值。若执行“查询”命令时没有输入查询键值,则不执行“查询的模块程序”而返回。(2)删除当前记录时:必须是
50、浏览到了要删除的记录。若执行“删除”命令时没有指定到记录位置就返回,则不执行“m_pSet-Delete();”命令。(3)记录追加时:仍然是采用在另一个对话框中交互式地键入各字段数据,存放在对话框的各个成员变量中,从对话框返回后,定义该对话框的对象 dlg,通过 dlg 引用成员变量程序执行,在 m_pSet-AddNew()命令执行后,依次将“dlg.成员变量 赋值给 m_pSet-字段名”。(4)修改记录时:即做当前记录的相关字段内容修改。在当前记录中,鼠标器点击的字段,光标进入,则键入新数据,然后执行命令 m_pSet-Edit(),则数据库被物理地修改。如果你点击“修改记录”命令之前