《数据库编程》课件.ppt
《《数据库编程》课件.ppt》由会员分享,可在线阅读,更多相关《《数据库编程》课件.ppt(54页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第9章章数据库编程数据库编程 数据库概述数据库概述 ODBC数据库编程数据库编程 数据库编程常用技巧数据库编程常用技巧 数据库相关的数据库相关的ActiveX控件控件 数据库概述数据库概述 数据库和数据库和DBMS 数据库是指以一定的组织形式存放在计算机存储介质上的相互关联的数据的集合。例如,把一个学校的教师、学生和课程等数据有序地组织起来,存储在计算机磁盘上,就构成了一个数据库。为了有效地管理数据库,常常需要一些数据库管理系统(DBMS)为用户提供对数据库操作的各种命令、工具及方法,包括数据库的建立和记录的输入、修改、检索、显示、删除和统计等。流行的DBMS都提供了一个SQL接口。SQL
2、作为用来在DBMS中访问和操作的语言,SQL(结构化查询语言)语句分为两类:一是DDL(Data Definition Language,数据定义语言)语句,它是用来创建表、索引等,另一是DML(Data Manipulation Language,数据操作语言)语句,这些语句是用来读取数据、更新数据和执行其他类似操作的语句。数据库概述数据库概述ODBC、DAO和和OLE DB ODBC(开放数据库连接)、DAO(数据访问对象)及OLE DB(OLE数据库)三种数据库方式,使应用程序从特定的数据管理系统(DBMS)脱离出来。ODBC提供应用程序接口(API),使任何一个数据库都可以通过ODBC
3、驱动器与指定的DBMS相联。程序就可通过调用ODBC驱动管理器中相应的驱动程序达到管理数据库的目的。DAO使用Jet数据库引擎形成一系列的数据访问对象:数据库对象、表和查询对象、记录集对象等。可以打开一个Access数据库文件(MDB文件),也可直接打开一个ODBC数据源以及使用Jet引擎打开一个ISAM(被索引的顺序访问方法)类型的数据源(dBASE、FoxPro、Paradox、Excel或文本文件)。OLE DB试图提供一种统一的数据访问接口,并能处理除了标准关系型数据库中的数据之外,还能处理包括邮件数据、Web上的文本或图形、目录服务以及主机系统中的IMS和VSAM数据。OLE DB提
4、供一个数据库编程COM接口,使得数据的使用者可以使用同样的方法访问各种数据,而不用考虑数据的具体存储地点、格式或类型。这个COM接口与ODBC相比,其健壮性和灵活性要高得多。9.2 ODBC数据库编程数据库编程 MFC AppWizard使用使用ODBC一般过程一般过程 构造数据库构造数据库数据库表与表之间的关系构成了一个数据库。用Microsoft Access 创建一个数据库Student.mdb,暂包含一个数据表score,如表。在表中包括上、下两部分内容,上部分是数据表的记录内容,下部分是数据表的结构内容。9.2 ODBC数据库编程数据库编程创建创建ODBC数据源数据源 如果没有ODB
5、C组件,当安装Visual C+的同时也会装上ODBC程序。它不是出现在程序组中,出现在系统的“控制面板”管理工具中,如图。双击ODBC图标,进入ODBC数据源管理器。可以设置ODBC数据源的一些信息。“用户DSN”页面是定义自己在本地计算机使用的数据源名,如图。9.2 ODBC数据库编程数据库编程创建用户DSN的过程如下。(1)(1)单击添加,在对话框中选择要添加用户数据源的驱动程序,这里选择“Microsoft Access Driver”,如图。(2)(2)单击完成,单击选择按钮将前面创建的数据库调入,如图。9.2 ODBC数据库编程数据库编程(3)(3)单击确定,刚才创建的用户数据源被
6、添加在“ODBC数据源管理器”的“用户数据源”列表中。如图。9.2 ODBC数据库编程数据库编程在在MFC AppWizard中选择数据源中选择数据源 用MFC AppWizard创建一个支持数据库的文档应用程序,如下面的过程。(1)(1)用MFC AppWizard创建一个单文档应用程序Ex_ODBC。(2)(2)在向导的第2步对话框中加入数据库的支持,如图。9.2 ODBC数据库编程数据库编程在对话框中可以选择对数据库的不同支持,其中各选项的含义如表。9.2 ODBC数据库编程数据库编程(3)(3)选中“数据库查看使用文件支持”项,单击Data Source,从中选择ODBC的数据源“Da
7、tabase Example For VC+”,如图。(4)(4)单击OK,如图,从中选择要使用的表score。9.2 ODBC数据库编程数据库编程(5)(5)单击OK,又回到了向导的第2步对话框。(6)(6)单击完成。开发环境自动打开表单视图CEx_ODBCView的对话框资源模板IDD_EX_ODBC_FORM以及相应的对话框编辑器。(7)(7)编译并运行,如图。记录浏览按钮9.2 ODBC数据库编程数据库编程设计浏览记录界面设计浏览记录界面 按照图所示的布局,为表单对话框资源模板添加所表所示的控件。9.2 ODBC数据库编程数据库编程(2)(2)按快捷键Ctrl+W,切换到Member
8、Variables页面,在Class name框中选择CEx_ODBCView,为上述控件添加相关联的数据成员。这里添加的控件变量都是由系统自动定义的,并与数据表字段相关联的。例如,双击IDC_STUNO,在弹出的“Add Member Variable”(添加类成员变量)对话框中的成员变量下拉列表中选择要添加的成员变量名m_pSet-m_studentno,选择后,控件变量的类型将自动设置,如图。9.2 ODBC数据库编程数据库编程(3)(3)按照上一步骤的方法,为下表的其他控件依次添加相关联的成员变量。控件变量的范围和大小应与数据表中的字段一一对应。如图。9.2 ODBC数据库编程数据库编
9、程(4)(4)编译运行并测试,如图。9.2 ODBC数据库编程数据库编程9.2.2 ODBC数据表更新数据表更新 在生成的CEx_ODBCView类中,包含一个指向CEx_ODBCSet对象的指针m_pSet。该指针与用户的表相关联,是由MFCAppWizard建立的,当数据表的字段更新后,例如,若Access将score数据表添加一个“备注”字段名,并关闭Access后,就需要为Ex_ODBC重新来指定数据表,其步骤如下:(1)(1)按快捷键Ctrl+W,切换到“Member Variables”页面。(2)(2)在“Class name”的下拉列表中选择“CEx_ODBCSet”,如图。U
10、pdate Columns 重新指定与CRecordSet类相关的表,Bind All指定表的字段的绑定,即为字段重新指定默认的关联变量。9.2 ODBC数据库编程数据库编程(3)(3)单击Update Columns,选择ODBC数据源“Database Example For VC+”,如图。(4)(4)单击OK,如图,从中选择要使用的表。9.2 ODBC数据库编程数据库编程(5)(5)单击OK,如图。(6)(6)单击Bind All,MFC Wizard将自动为字段落添加相关联的变量。需要说明的是,在按Bind All按钮绑定前最好将已有的字段关联变量删除,以保证数据表字段名更改或删除后
11、与变量绑定的正确性。9.2 ODBC数据库编程数据库编程CRecordSet 类基本操作类基本操作 查询记录查询记录 先看一个示例,该示例在前面的Ex_ODBC的表单中添加一个编辑框和一个查询按钮,单击查询,将按编辑框中的学号内容对数据表进行查询,并将查找到的记录显示在前面添加的控件中。示例的过程如下:(1)(1)打开Ex_ODBC应用程序的表单资源,按图8所示的布局添加控件,其中添加的编辑框ID号设为IDC_EDIT_QUERY,“查询”按钮的ID号设为IDC_BUTTON_QUERY。9.2 ODBC数据库编程数据库编程(2)打开MFCClassWizard,为控件IDC_EDIT_QUE
12、RY添加关联变量m_strQuery。(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_strQu
13、ery);/studentno是score表的字段名,用来指定查询条件m_pSet-m_strSort=course;/course是score表的字段名,用来按course字段从小到大排序m_pSet-Open();if(!m_pSet-IsEOF()/如果打开记录集有记录UpdateData(FALSE);/自动更新表单中控件显示的内容elseMessageBox(没有查到你要找的学号记录!);9.2 ODBC数据库编程数据库编程(4)(4)编译运行并测试,如图。9.2 ODBC数据库编程数据库编程增加记录增加记录增加记录是使用AddNew函数,但要求数据库必须是以“可增加”的方式打开的。
14、下面的代码是在表的末尾增加新记录:m_pSet-AddNew();/在表的末尾增加新记录m_pSet-SetFieldNull(&(m_pSet-m_studentno),FALSE);/设定m_studentno值不为空(NULL)m_pSet-m_studentno=21010503;./输入新的字段值m_pSet-Update();/将新记录存入数据库m_pSet-Requery();/刷新记录集,这在快照集方式下是必须的 删除记录删除记录 可以直接使用CRecordSet:Delete函数来删除记录。要使删除操作有效,还需要移动记录函数。例如下面的代码:CRecordsetStatus
15、status;m_pSet-GetStatus(status);/获取当前记录集状态m_pSet-Delete();/删除当前记录lCurrentRecord=0)/当前记录索引号,0表示第一条记录m_pSet-MoveNext();/下移一个记录elsem_pSet-MoveFirst();/移动到第一个记录处UpdateData(FALSE);9.2 ODBC数据库编程数据库编程修改记录修改记录 函数CRecordSet:Edit可以用来修改记录,例如:m_pSet-Edit();/修改当前记录m_pSet-m_name=刘向东;/修改当前记录字段值.m_pSet-Update();/将修
16、改结果存入数据库m_pSet-Requery();撤消操作撤消操作 如果用户在进行增加或者修改记录后,希望放弃当前操作,则在调用CRecordSet:Update()函数之前调用CRecordSet:Move(AFX_MOVE_REFRESH)来撤消操作,便可恢复在增加或修改操作之前的当前记录。数据库编程常用技巧数据库编程常用技巧 显示记录总数和当前记录号显示记录总数和当前记录号 Ex_ODBC的记录浏览过程中,不能知道表中的记录总数及当前的记录位置,必须将这些信息显示出来。这时就需要使用CRecordset类的成员函数GetRecordCount和GetStatus用来获得表中的记录总数和当
17、前记录的索引,原型:long GetRecordCount()const;long GetRecordCount()const;void GetStatus(CRecordsetStatus&void GetStatus(CRecordsetStatus&rStatus)const;)const;下面的示例过程将实现显示记录信息的功能:(1)(1)打开应用程序Ex_ODBC。(2)(2)在MainFrm.cpp文件中,向原来的indicators数组添加一个元素,用来在状态栏上增加一个窗格,修改的结果如下:static UINT indicators=ID_SEPARATOR,/第一个信息行窗
18、格ID_SEPARATOR,/第二个信息行窗格ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,;数据库编程常用技巧数据库编程常用技巧(3)(3)用ClassWizard为CEx_ODBCView类添加OnCommand消息处理函数,添加代码:BOOL CEx_ODBCView:OnCommand(WPARAM wParam,LPARAM lParam)CString str;CMainFrame*pFrame=(CMainFrame*)AfxGetApp()-m_pMainWnd;/获得主框架窗口的指针CStatusBar*pStatu
19、s=&pFrame-m_wndStatusBar;/获得主框架窗口中的状态栏指针if(pStatus)CRecordsetStatus rStatus;m_pSet-GetStatus(rStatus);/获得当前记录信息str.Format(当前记录:%d/总记录:%d,1+rStatus.m_lCurrentRecord,m_pSet-GetRecordCount();pStatus-SetPaneText(1,str);/更新第二个窗格的文本return CRecordView:OnCommand(wParam,lParam);数据库编程常用技巧数据库编程常用技巧(4)(4)在CEx_O
20、DBCView的OnInitialUpdate函数处添加下列代码:void CEx_ODBCView:OnInitialUpdate()m_pSet=&GetDocument()-m_ex_ODBCSet;/获得在文档类定义的记录集指针CRecordView:OnInitialUpdate();/视图更新并初始化GetParentFrame()-RecalcLayout();/视图所在的父窗口重新调整外观ResizeParentToFit();/根据视图的尺寸重新调整父窗口的大小while(!m_pSet-IsEOF()m_pSet-MoveNext();m_pSet-GetRecordCou
21、nt();m_pSet-MoveFirst();(5)(5)在Ex_ODBCView.cpp文件的开始处增加下列语句:#include“MainFrm.h”(6)(6)将MainFrm.h文件中的保护型变量m_wndStatusBar变成公共变量。(7)(7)编译运行并测试。数据库编程常用技巧数据库编程常用技巧9.3.2 编辑记录编辑记录 下面的过程是在Ex_ODBC的表单视图中增加三个按钮:添加、修改和删除,如图。单击添加或修改按钮都将弹出一个如图的对话框,在对话框中对数据进行编辑后,单击确定按钮使操作有效。数据库编程常用技巧数据库编程常用技巧(1)(1)切 换 到 ResourceView
22、页 面,打 开 用 于 表 单 视 图 CEx_ODBCView的 对 话 框 资 源IDD_EX_ODBC_FORM。向表单中添加三个按钮:添加、修改和删除。(2)(2)添加一个对话框资源,打开属性对话框将其字体设置为“宋体9号”,标题定为“学生课程成绩表”,ID号设为IDD_SCORE_TABLE。(3)(3)将表单中的控件复制到对话框中。(4)(4)将OK和Cancel的标题改为“确定”和“取消”。图中具有3D效果的竖直线是用静态图片控件(属性为Frame,Etched)构造的。(5)(5)双击对话框模板或按Ctrl+W快捷键,为对话框资源IDD_SCORE_TABLE创建一个对话框类C
23、ScoreDlg。(6)(6)打开Member Variables标签,在Class name中选择CScoreDlg,选中所需的控件ID号,双击鼠标或单击Add Variables按钮。为控件添加控件变量,如图。数据库编程常用技巧数据库编程常用技巧(7)(7)用MFC ClassWizard为CScoreDlg添加IDOK按钮的BN_CLICKED的消息映射,代码:void CScoreDlg:OnOK()UpdateData();m_strStudentNO.TrimLeft();m_strCourseNO.TrimLeft();if(m_strStudentNO.IsEmpty()Mes
24、sageBox(学号不能为空!);else if(m_strCourseNO.IsEmpty()MessageBox(课程号不能为空!);elseCDialog:OnOK();(8)(8)为CEx_ODBCView类中的三个按钮,添加代码:void CEx_ODBCView:OnRecAdd()CScoreDlg dlg;if(dlg.DoModal()=IDOK)m_pSet-AddNew();m_pSet-m_course=dlg.m_strCourseNO;m_pSet-m_studentno=dlg.m_strStudentNO;m_pSet-m_score=dlg.m_fScore;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库编程 数据库 编程 课件
限制150内