《vc++数据库编程.ppt》由会员分享,可在线阅读,更多相关《vc++数据库编程.ppt(92页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
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-
26、m_strSort=stuID;m_pSet-Requery();/重新查询UpdateData(false);/更新控件显示排序l添加两个排序子菜单的COMMAND事件消息的消息处理函数。void CEX_ODBCView:OnSortAge()/定义排序关键字按ID排序m_pSet-m_strSort=age;m_pSet-Requery();/重新查询UpdateData(false);/更新控件显示查询l添加一个新的对话框资源IDD_DlALOG1,并新建对话框类CDlgFilter控件ID变量类型静态文本 IDC_FIELD m_fieldCString编辑IDC_EDIT1 M_f
27、ilterValueCString查询void CEX_ODBCView:OnFilterName()CDlgFilter dlg;dlg.m_field=姓名:;CString str=name;if(dlg.DoModal()=IDOK)/调用筛选对话框,按OK按钮返回if(dlg.m_filterValue.IsEmpty()/编辑框为空,显示整个记录集 str=;elsestr=str+=+dlg.m_filterValue+”;/定义筛选字符串m_pSet-m_strFilter=str;m_pSet-Requery();/重新查询记录集UpdateData(false);/更新控件
28、显示更新控件显示l为为“查找查找”两个子菜单进行消息映射两个子菜单进行消息映射Name=张三 查询void CEX_ODBCView:OnFilterStuid()CDlgFilter dlg;dlg.m_field=学号;CString str=stuID;if(dlg.DoModal()=IDOK)/调用筛选对话框,按OK按钮返回if(dlg.m_filterValue.IsEmpty()/编辑框为空,显示整个记录集 str=;elsestr=str+=+dlg.m_filterValue+;/定义筛选字符串m_pSet-m_strFilter=str;m_pSet-Requery();/
29、重新查询记录集 UpdateData(false);/更新控件显示l为为“查找查找”两个子菜单进行消息映射两个子菜单进行消息映射程序的进一步改进只需将工具栏按钮与IDM_RECORD_NEW菜单ID相关联l通过工具栏按钮实现添加、编辑和删除记录通过工具栏按钮实现添加、编辑和删除记录l界面用按钮实现添加、编辑和删除记录界面用按钮实现添加、编辑和删除记录只需将命令按钮与IDM_RECORD_NEW菜单ID相关联处理一个库中的多个表l增加一个CRecordSet派生类C*Setl指定数据源ODBCl选择表l使用C*Set C*Set m_Set;M_Set.Open();M_Set.MoveNext
30、();M_Set.m_strFilterADO技术综述及实践DAO技术综述及实践ADO技术介绍lADO简介lADO技术特点lADO对象模型l开发ADO应用程序的方法ADO简介 ADO(ActiveX Data Object)是Microsoft的数据库应用程序开发的新接口,是建立在OLE DB之上的高级数据库访问技术。ADO技术基于COM(Component Object Model),具有COM组件的诸多优点,可以用来构造可复用应用框架,被多种语言支持,能够访问关系数据库、非关系数据库以及所有的文件系统。另外,ADO还支持各种客户/服务器模式与基于Web的数据操作,具有远程数据服务RDS(R
31、emote Data Service)的特性,是远程数据存取的发展方向。应用程序ADOOLEDB关系数据库文本目录数据主机数据非结构化数据电子邮件地理信息图形信息ADO技术特点l易于使用l高速访问数据源l可以访问不同的数据源l可以用于Microsoft ActiveX页l程序占用的内存少ADO对象模型l连接对象Connectionl命令对象Commandl参数对象Parameterl记录集对象Recordsetl字段对象Fieldl属性对象PropertylErrors集合 lParameters集合 lFields集合 lProperties集合 ADO对象模型提供了7种对象、4种集合。分别
32、为:开发ADO应用程序的方法l使用ADO Data控件 这种方法简单,用户只需写相对较少的代码,甚至不写一行代码,可以实现对数据库的访问。其缺点是效率比较低,用户对程序的控制比较弱,不能充分发挥ADO的强大功能;l直接使用ADO对象 这种方法可以非常灵活地控制程序的细节,而且效率、性能很高,可以充分发挥ADO的特性。使用ADO对象开发数据库应用程序lADO对象编程模型lADO中的智能指针l引入ADO动态链接库l创建ADO与数据源的连接l获得记录集l遍历记录集l访问记录集中的数据l添加记录l修改记录l删除记录ADO对象编程模型l初始化OLE/COM库环境l引入ADO库文件l用3个智能指针进行数据
33、库操作,connection对象连接数据库l利用建立好的连接,通过connection、Command对象执行SQL命令,并取得结果记录集l记录集的遍历、更新l断开连接,结束ADO中的智能指针l_ConnectionPtr l_CommandPtr l_RecordsetPtr ADO模型中常用的对象:Connection对象、Command对象、Recordset对象,在使用这3个对象的时候,需要定义与之对应的3个智能指针,分别为#import c:program filescommon filessystemadomsado15.dll no_namespacerename(EOF,ado
34、EOF)rename(BOF,adoBOF)#include “stdafx.h”引入ADO库初始化OLE/COM库环境在能够使用ADO对象之前,必须为应用程序初始化COM环境。要完成这一任务,可以通过调用CoInitialize API函数,并传递NULL作为唯一的参数,代码如下::CoInitialize(NULL);如果应用程序中漏了这行代码,或是没有把它放在开始和对象交互之前,当运行应用程序时,将得到一个COM错误。当完成所有的ADO活动时,还必须通过调用函数CoUnitialize关闭COM环境,代码如下::CoUnitialize();这个函数可清除COM环境,并准备关闭应用程序。
35、创建ADO与数据源的连接 当初始化COM环境后,就可以创建与数据库的连接。建立数据库的连接需要使用连接对象Connection。首先定义一个_ConnectionPtr类型指针,然后调用CreateInstance方法实例化,代码如下:_ConnectionPtr m_pConnection;m_pConnection.CreateInstance(_uuidof(Connection);之后,调用Connection对象的Open方法创建数据库的连接 try _bstr_t strConnect=”Provider=OraOLEDB.Oracle.1;Password=db1;UserID=
36、db1;Data Source=ORADB;Persist Security Info=True”;m_pConnection-Open(strConnect,”,”,-1);/打开连接catch(_com_error e)/处理异常 AfxMessageBox(e.ErrorMessage();参考ACCESS数据库的设置同“ADODB.Connection”获得记录集lRecordsetPtr m_pRecordset;/定义记录集指针lm_pRecordset.CreateInstance(_uuidof(Recordset);/实例化lCString strSql=”select*fr
37、om STUDENT”;lBSTR bstrSQL=strSql.AllocSysString();lm_pRecordset-Open(bstrSQL,(Idispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);/打开记录集同“ADODB.Recordset”遍历记录集lMoveFirst()lMoveLast()lMoveNext()lMovePrevious()访问记录集中的数据lGetCollect()lGetItem()_ Variant_t theValue;theValue=m_pRecordset-Ge
38、tCollect(“NAME”);if(theValue.vt!=VT_NULL)strName=(char*)_bstr_t(theValue);theValue=m_pRecordset-Fields-GetItem(“AGE”)-Value();if(theValue.vt!=VT_NULL)nAge=theValue.iVal;添加记录l使用连接对象的Execute方法 l使用命令对象的Execute方法 l使用记录集对象的AddNew方法 m_pRecordset-AddNew();m_pRecordset-Fields-GetItem(“AGE”)-Value=(short)22
39、;m_pRecordset-Fields-GetItem(“NAME”)-Value=_bstr_t(“王晶晶”);m_pRecordset-Update();使用命令对象的Execute方法 添加记录l_CommandPtr m_pCommand;l tryl m_pCommand.CreateInstance(ADODB.Command);l _variant_t vNULL;l vNULL.vt=VT_ERROR;l vNULL.scode=DISP_E_PARAMNOTFOUND;l m_pCommand-ActiveConnection=m_pConnection;l m_pComm
40、and-CommandText=insert into score(name,birthday,english)VALUES(zhang,1990-10-20,100);l m_pCommand-Execute(&vNULL,&vNULL,adCmdText);l l catch(_com_error e)/处理异常处理异常ll AfxMessageBox(e.ErrorMessage();lName char(10)Birthday dateEnglish int 修改记录lm_pRecordset-Fields-GetItem(“AGE”)-Value=(short)20 ;lm_pRec
41、ordset-Fields-GetItem(“NAME”)-Value=_bstr_t(“孙楠”);lm_pRecordset-Update();使用命令对象的Execute方法删除记录l_CommandPtr m_pCommand;ltryl l m_pCommand.CreateInstance(ADODB.Command);l _variant_t vNULL;l vNULL.vt=VT_ERROR;l vNULL.scode=DISP_E_PARAMNOTFOUND;l m_pCommand-ActiveConnection=m_pConnection;l m_pCommand-Com
42、mandText=delete from score where name=zhao;l m_pCommand-Execute(&vNULL,&vNULL,adCmdText);l l l catch(_com_error e)/处理异常处理异常ll AfxMessageBox(e.ErrorMessage();l实例-一个简单的数据库系统l创建数据库(源)-Accessl创建一个使用ADO Data控件的对话框应用程序l创建一个使用ADO对象的应用程序用ADO Data控件开发数据库应用程序 该系统的主要功能包括:在DataGrid表格中显示学生的主要信息;可以添加、修改、删除学生数据 步骤
43、l创建一个基于对话框的工程,工程名ADOData l添加ADO Data控件和DataGrid控件 l设置控件属性l为ADO Data控件添加成员变量m_adodc,类型为CAdodc;为DataGrid控件添加成员变量m_datagrid,类型为CDataGrid。l为对话框类CADODataDlg添加OnInitDialog函数,用于设置ADO Data控件的数据源和DataGrid控件的列宽度。并添加代码 l添加文件包含语句#include“column.h”#include“columns.h”#include“COMDEF.H”编译运行控件控件类类型型属性属性属性属性值值ADO Da
44、taIDIDC_ADODC1Visible取消取消选择选择Connection StringProvider=Microsoft.Jet.OLEDB.4.0;Data Source=D:VC+studentDB.mdb;Persist Security Info=FalseCommandType1Text CommandTypeRecordSourceSELECT*FROM STUDENTDataGridIDIDC_DATAGRID1Caption学生基本信息学生基本信息DataSourceIDC_ADODC1FONT12 HeadFont14 粗体粗体AllowAddNewTRUEAllow
45、DeleteTRUEAllowUpdateTRUEBOOL CADODlg:OnInitDialog()/TODO:Add extra initialization here /设置设置ADO Data控件的数据源,将列名用汉字显示控件的数据源,将列名用汉字显示m_adodc.SetRecordSource(Select ID,stuID AS 学号学号,name AS 姓名姓名,sex AS 性别性别,age AS 年龄年龄,subject AS 专业专业 FROM STUDENT);m_adodc.Refresh();/刷新结果集的内容刷新结果集的内容/设置列宽度设置列宽度_variant
46、_t vIndex;vIndex=long(0);/将整型值转换为将整型值转换为_variant_t类型类型m_datagrid.GetColumns().GetItem(vIndex).SetWidth(30);vIndex=long(1);m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100);vIndex=long(2);m_datagrid.GetColumns().GetItem(vIndex).SetWidth(80);vIndex=long(3);m_datagrid.GetColumns().GetItem(vIndex).S
47、etWidth(60);vIndex=long(4);m_datagrid.GetColumns().GetItem(vIndex).SetWidth(60);vIndex=long(5);m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100);。使用ADO对象开发数据库应用程序 步骤l创建基于对话框的工程,工程名ADO l编辑对话框资源,并添加控件的关联变量,消息处理函数l在文件Stdfx.h文件中增加引入ADO库的代码。l在程序类CADOApp中声明连接对象,访问类型为public:l初始化程序例程l在对话框类CADODlg中声明记录集对
48、象,访问类型为protected l初始化对话框 l在对话框类中,添加显示记录函数DispRecord(),将数据库中的记录显示在对话框中。l浏览记录集 l增加记录 l删除记录 l更新保存记录 l 还原COM环境以及关闭连接对象和记录集对象。控件控件IDCaption属属性性控件控件类类型型关关联变联变量量变变量量类类型型IDC_STUID_EDITEditm_stuidCStringIDC_NAME_EDITEditm_nameCStringIDC_SEX_EDITEditm_sexCStringIDC_AGE_EDITEditm_ageintIDC_SUBJECT_EDITEditm_su
49、bjectCStringIDC_PREV_BUTTON前一条前一条ButtonIDC_NEXT_BUTTON后一条后一条ButtonIDC_ADD_BUTTON增加增加ButtonIDC_DEL_BUTTON删删除除ButtonIDC_UPDATE_BUTTON保存保存Button 在文件Stdfx.h文件中增加引入ADO库的代码#import c:program filescommon filessystemadomsado15.dll no_namespacerename(EOF,adoEOF)rename(BOF,adoBOF)引入ADO库初始化COM环境,创建连接对象lpublic:_
50、ConnectionPtr m_pConnection;lBOOL CADObApp:InitInstance():CoInitialize(NULL);m_pConnection.CreateInstance(ADODB.Connection);lm_pConnection-Open(Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:vc+ADObstudentDB.mdb,adModeUnknown);返回打开记录集(初始化对话框)lprotected:_RecordsetPtr m_pRecordset;l m_pRecordset.Creat