vc++数据库编程.ppt
《vc++数据库编程.ppt》由会员分享,可在线阅读,更多相关《vc++数据库编程.ppt(92页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第10 章数据库编程河北经贸大学信息技术学院2007年5月VC+程序设计教学目标与要求l了解ODBC的概念l掌握MFC ODBC中的常用类的使用方法;l掌握SQL 的常用语句;l掌握MFC ODBC开发数据库应用程序的方法和技巧;l掌握ADO编程模型l掌握ADO开发数据库应用程序的方法和技巧l综合设计-学生信息管理系统(ODBC)-教职工信息管理系统(ADO)本章主要内容l连接数据库的方式l数据库的访问与ODBClMFC ODBCl使用ODBC数据库应用程序lADO数据库开发技术 l开发ADO应用程序的方法 连接数据库的四种方式lODBC(Open DataBase Connectivity)
2、开放数据库连接开放数据库连接开放数据库连接开放数据库连接l提供了应用程序接口API。使得任何一个数据库都可以通过ODBC驱动器与指定的DBMS相联。用户的程序可以通过调用ODBC驱动管理器中相应的驱动程序达到管理数据库的目的。访问数据库时,是由ODBC管理器将应用程序的数据库访问请示传递给相应的数据库驱动程序,驱动程序再用SQL语句完成DBMS的访问任务。lDAO(Data Access Objects)数据访问对象数据访问对象数据访问对象数据访问对象lDAO使用Microsoft Jet提供的数据库访问对象集直接访问DBMS,速度比ODBC要快。lOLE DB OLEOLE数据库数据库数据库
3、数据库 OLE DB OLE DB 是一种高性能的、基于是一种高性能的、基于 COMCOM(组件对象模型)(组件对象模型)的数据库技术的数据库技术 lActiveX Data Object(ADO)其中,最简单也最常用的是ODBC,而ADO则是目前最流行的一种数据库编程方法项目演示l一个简单的学生信息管理系统(ODBC)l一个简单学生信息管理系统(ADO)l教职工信息管理系统10.1数据库概述l数据库和DBMS 数据库是指以一定的组织形式存放在计算机上的相互关联的数据的集合。一般一个库中有多个表组成,一张表中由多条记录组成,一条记录由若干字段组成。例如:学生信息库-基本信息表、成绩表 基本信息
4、表-每个学生的基本信息记录 基本信息记录-姓名、性别、年龄、专业等字段组成 DBMS数据库管理系统为用户提供对数据库操作的各种命令、工具及方法。例如:Access/Oracle/SQL Sever等等10.2 MFC ODBClODBC 开放数据库接口ODBC是一种标准的基于SQL的接口,提供了应用程序与数据库之间的接口,使得任何一个数据库都可以通过ODBC驱动器与指定的DBMS相联。使用ODBC能使用户编写数据库应用程序变得容易简单,避免了与数据库相连接的复杂性。lODBC的组成见图 ODBC管理器:位于控制面板控制面板 驱动程序管理器:ODBC32.dll ODBC驱动程序:以DLL文件形
5、式出现lMFC ODBC MFC类库中提供了两个有关ODBC对数据库操作的类:CDatabase CRecordset 图 ODBC的构成 位于控制面板控制面板ODBC32.dll以DLL文件形式出现MFC ODBC主要类介绍l lCDatabaseCDatabase 类:包含有数据库的连接信息包含有数据库的连接信息,可以在整个应用程可以在整个应用程序中共享这些信息,一个序中共享这些信息,一个Cdatabase对象代表了一个与数据对象代表了一个与数据源的连接,通过它可以对数据源进行操作。要想建立与数据源的连接,通过它可以对数据源进行操作。要想建立与数据源的连接,必须创建源的连接,必须创建Cda
6、tabase对象,然后用对象,然后用Open()函数或函数或OpenEx()函数初始化此对象。函数初始化此对象。lCDatabase m_db;m_db.OpenEx(“DSN=STUDENT;UID=;PWD=”,CDatabase:noOdbcDialog);CDatabaseCDatabase类的成员函数见类的成员函数见类的成员函数见类的成员函数见P282 P282 表表表表10-110-1l lCRecordsetCRecordset类:针对数据源中的记录集针对数据源中的记录集,负责对记录的操作负责对记录的操作.一个一个CRecordset对象代表了一组从数据源查询出来的记录,对象代表
7、了一组从数据源查询出来的记录,称为记录集。记录集从数据源中查询出数据,然后再进行添称为记录集。记录集从数据源中查询出数据,然后再进行添加、排序等操作。加、排序等操作。l快照记录集(snapshot):数据集的一个静态视图l动态记录集(Dynaset):能保持与其它用户所作的更改保持同步 使使用用记记录录集集对对象象,首首先先应应建建立立与与数数据据源源的的连连接接,这这时时应应当当创创建建并并初初始始化化CDatabaseCDatabase对对象象,然然后后将将创创建建的的CDatabaseCDatabase对对象象的的指指针针传传给给CRecordsetCRecordset对对象象的的构构造
8、造函函数数,这这样样记记录录对对象象创创建建成成功功,最最后后使使用用Open()Open()函函数数对对数数据据源源进进行行数数据据查询。查询。lCRecordset rs(&m_db);lCString sql=“select*from student_tab”;l rs.Open(CRecordset:dynaset,sql);lrs.GetFieldValue(1,strname);l CRecordView类:负责界面负责界面,以视图形式显示数据库记录以视图形式显示数据库记录 CRecordView类对是在控件中显示数据库记录的视图对象,是直接连接到CRecordView对象上的表单
9、视图。lCDBException:负责处理负责处理MFC ODBC在操作数据库时发生的异常。在操作数据库时发生的异常。CRecordset类的数据成员P283表表10-2CRecordset类的成员函数P283表10-3 CRecordSet类的成员函数CRecordset类的成员函数SQL语句介绍 SQL(Structured Query Language)即结构化查询语言,是关系数据库存储的工业标准。在数据库系统开发中常用的是SELECT语句。SELECT 命令用于对数据源的查询。它具有许多功能强大的语句,用它可以实现许多关系操作,以实现查询的目的。SELECT语句的基本结构如下:SELE
10、CT 子句 INTO 子句 FROM 子句 WHERE 子句 GROUP BY 子句 HAVING 子句 ORDER BY 子句除了以上子句,SELECT语句中经常出现的关键字还包括UNION运算符、COMPUTE子句、FOR子句和OPTION子句。SQL语句举例lSELECT*FROM EmployeeslSELECT*FROM Employees ORDER BY wage DESClSELECT SUM(Wage)FROM Employees lSELECT Dep_id AS 部门代号,AVG(Wage)AS 工资总额 FROM Employees GROUP BY Dep_id HA
11、VING AVG(Wage)3000lSELECT d.Dep_name,e.Emp_name,e.Title FROM Department AS d,Employees AS e WHERE d.Dep_id=e.Dep_id 排序 降序分组,求和联合查询INSERT子句lINSERT INTO dbf_name(fname1,fname2,.)VALUES(eExpression1,eExpression2,.)l/ACCESSlInsert into 表名 VALUES(6,SE,HighSchool,2007-01-01)l/Oracle数据库中lInsert into 表名 VAL
12、UES(6,SE,HighSchool,to_date(01/01/2007))Update子句lUPDATE DatabaseName1!TableName1SET Column_Name1=eExpression1,Column_Name2=eExpression2.WHERE FilterCondition1 AND|OR FilterCondition2.lUpdate 表名 Set 字段名1=表达式,字段名2=表达式 Where 条件Delete子句lDelete from 表名 where 条件条件语句Where age=5Where name=zhangsanDrop子句ldro
13、p table 表名l删除表中的所有记录,但表结构保留Oracle SQL语句中的类型转换lTO_CHARlTO_CHAR(10)lTO_CHAR(sysdate)lTO_CHAR(SYSDATE,MM/DD/YYYY)lTO_DATElTO_DATE(01/01/90,MM/DD/YY)lTO_DATE(04-JUL-97)lTO_DATE(July 4,1998,Month dd,yyyy)10.3 使用ODBC创建数据库应用程序创建一个支持创建一个支持ODBC数据库的数据库的SDI应用程序:应用程序:u可以检索可以检索ODBC数据库中的记录;数据库中的记录;u允许用户更新、添加和删除记录
14、;允许用户更新、添加和删除记录;u对记录的排序、查找等。对记录的排序、查找等。开发步骤l准备数据库l创建并注册数据源 l创建数据库应用框架 l设计记录操作界面 l更新记录 l排序和筛选 1.创建数据库l设计数据库 用Microsoft Access创建数据库StudentDB.mdb,其中包含一个表student序号字段名称数据类型字段大小字段含义1ID数字自动编号记录号2stuID文本11学号3name文本8姓名4sex文本2性别5subject文本18专业6age数字整型年龄2.创建并注册数据源lODBC管理器的使用l用户用户DSNl用户数据源只对当前用户可见,而且只能用于当用户数据源只对
15、当前用户可见,而且只能用于当前机器上前机器上 l系统系统DSNl系统数据源对当前机器上的所有用户可见系统数据源对当前机器上的所有用户可见 l文件文件DSNl文件数据源可以由安装了相同驱动程序的用户共文件数据源可以由安装了相同驱动程序的用户共享享 l数据源创建示例数据源创建示例创建并注册数据源l数据源创建示例数据源创建示例winXP:“控制面板控制面板”“性能与维护性能与维护”“管理工具管理工具”双击双击“ODBC数据源数据源(32位)位)”“用户用户DSN”“添添加加”选择数据库选择数据库驱动程序驱动程序“完成完成”创建并注册数据源l给数据源命名给数据源命名l选择数据库选择数据库3.创建数据库
16、应用框架l创建一个SDI应用程序EX_ODBC,AppWizard的选项设置:step 24.创建主窗体(详见表10-11 p295)l布置主窗体创建主窗体(详见表10-11)l将控件与字段相关联创建主窗体(详见表10-11)l编译、运行可浏览数据库中的记录 CEX_ODBCSet类class CEX_ODBCSet:public CRecordsetpublic:CEX_ODBCSet(CDatabase*pDatabase=NULL);DECLARE_DYNAMIC(CEX_ODBCSet)/Field/Param Data/AFX_FIELD(CEX_ODBCSet,CRecordset
17、)longm_ID;CStringm_stuID;CStringm_name;CStringm_sex;CStringm_subject;intm_age;/AFX_FIELD/Overrides/ClassWizard generated virtual function overrides/AFX_VIRTUAL(CEX_ODBCSet)public:virtual CString GetDefaultConnect();/Default connection stringvirtual CString GetDefaultSQL();/default SQL for Recordsetv
18、irtual void DoFieldExchange(CFieldExchange*pFX);/RFX support/AFX_VIRTUAL/Implementation#ifdef _DEBUGvirtual void AssertValid()const;virtual void Dump(CDumpContext&dc)const;#endif;记录集字段数据成员构造函数CEX_ODBCSet:CEX_ODBCSet(CDatabase*pdb):CRecordset(pdb)/AFX_FIELD_INIT(CEX_ODBCSet)m_ID=0;m_stuID=_T();m_name
19、=_T();m_sex=_T();m_subject=_T();m_age=0;m_nFields=6;/AFX_FIELD_INITm_nDefaultType=snapshot;记录集类型创建连接CString CEX_ODBCSet:GetDefaultConnect()return _T(ODBC;DSN=STUDENT);CString CEX_ODBCSet:GetDefaultSQL()return _T(student);用于获得定义了数据源类型和数据源名的连接字符串 定义SQL语句的字符串,本例的SQL语句定义了查询一张表的完整记录 记录集与数据库的数据交换void CEX_
20、ODBCSet:DoFieldExchange(CFieldExchange*pFX)/AFX_FIELD_MAP(CEX_ODBCSet)pFX-SetFieldType(CFieldExchange:outputColumn);RFX_Long(pFX,_T(ID),m_ID);RFX_Text(pFX,_T(stuID),m_stuID);RFX_Text(pFX,_T(name),m_name);RFX_Text(pFX,_T(sex),m_sex);RFX_Text(pFX,_T(subject),m_subject);RFX_Int(pFX,_T(age),m_age);/AFX_
21、FIELD_MAP5.更新记录(记录集的编辑函数)lAddNew()向记录集添加一条新记录lDelete()删除当前记录lEdit()允许编辑当前记录lUpdate()将当前记录修改存入数据库lCancelUpdate()lRequery()重新执行SQL语句,以刷新记录集a.进入添加模式long CEX_ODBCSet:GetMaxID()MoveLast();return m_ID;/返回当前记录ID号l向记录集类向记录集类CEX_ODBCSet添加计算下一个添加计算下一个ID号号的成员函数的成员函数进入添加模式l向向“记录记录”菜单添加新的菜单项菜单添加新的菜单项IDCaptionPro
22、mptIDM_RECORD_NEW增加新记录(&A)Add new recordnNew RecordIDM_RECORD_DELETE删除记录(&D)Pop_Up(TRUE)记录排序(&S)IDM_SORT_STUID按学号IDM_SORT_AGE按年龄PopUp(TRUE)查找记录IDM_FILTER_STUID按学号IDM_FILTER_NAME按姓名添加新记录l为视图类为视图类CEX_ODBCView添加一个关于该菜单添加一个关于该菜单的的COMMAND事件消息的事件处理函数。事件消息的事件处理函数。void CEX_ODBCView:OnRecordNew()CRecordset*p
23、Set=OnGetRecordset();/获得一个记录集指针 if(pSet-CanUpdate()&!pSet-IsDeleted()/确保当前记录的修改保存 pSet-Edit();if(!UpdateData()return;pSet-Update();long m_lNewID=m_pSet-GetMaxID()+1;/为新记录得到ID号m_pSet-AddNew();/添加新记录m_pSet-m_ID=m_lNewID;/设置新记录ID号m_pSet-Update();/保存新记录m_pSet-Requery();/刷新记录集m_pSet-MoveLast();/移动到新记录上Up
24、dateData(FALSE);/刷新窗体删除记录void CEX_ODBCView:OnRecordDelete()/TODO:Add your command handler code hereif(MessageBox(真的要删除该记录吗?,删除记录,MB_YESNO|MB_ICONQUESTION)=IDYES)m_pSet-Delete();/删除当前记录 m_pSet-MoveNext();/移到下一记录if(m_pSet-IsEOF()/删除记录为最后一条记录处理m_pSet-MoveLast();if(m_pSet-IsBOF()/删空记录集处理m_pSet-SetFieldN
25、ull(NULL);UpdateData(false);/更新控件显示l为视图类为视图类CEX_ODBCView添加一个关于该菜单的添加一个关于该菜单的COMMAND事件消息的事件处理函数。事件消息的事件处理函数。排序和筛选lm_strFilter/CRecordSet类的数据成员,可作过滤器,指定SQL的WHILE子句。lm_strSort/CRecordSet类的数据成员,用于控制记录的排序,指定SQL的ORDER BY子句。排序l添加两个排序子菜单的COMMAND事件消息的消息处理函数。void CEX_ODBCView:OnSortStuid()/定义排序关键字按ID排序m_pSet-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- vc 数据库 编程
限制150内