vc++数据库编程.ppt_第1页
vc++数据库编程.ppt_第2页
vc++数据库编程.ppt_第3页
vc++数据库编程.ppt_第4页
vc++数据库编程.ppt_第5页
已阅读5页,还剩87页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第10章数据库编程,2007年5月,VC+,教学目标与要求,了解ODBC的概念掌握MFCODBC中的常用类的使用方法;掌握SQL的常用语句;掌握MFCODBC开发数据库应用程序的方法和技巧;掌握ADO编程模型掌握ADO开发数据库应用程序的方法和技巧综合设计-学生信息管理系统(ODBC)-教职工信息管理系统(ADO),本章主要内容,连接数据库的方式数据库的访问与ODBCMFCODBC使用ODBC数据库应用程序ADO数据库开发技术开发ADO应用程序的方法,连接数据库的四种方式,ODBC(OpenDataBaseConnectivity)开放数据库连接提供了应用程序接口API。使得任何一个数据库都可以通过ODBC驱动器与指定的DBMS相联。用户的程序可以通过调用ODBC驱动管理器中相应的驱动程序达到管理数据库的目的。访问数据库时,是由ODBC管理器将应用程序的数据库访问请示传递给相应的数据库驱动程序,驱动程序再用SQL语句完成DBMS的访问任务。DAO(DataAccessObjects)数据访问对象DAO使用MicrosoftJet提供的数据库访问对象集直接访问DBMS,速度比ODBC要快。OLEDBOLE数据库OLEDB是一种高性能的、基于COM(组件对象模型)的数据库技术ActiveXDataObject(ADO),其中,最简单也最常用的是ODBC,而ADO则是目前最流行的一种数据库编程方法,项目演示,一个简单的学生信息管理系统(ODBC)一个简单学生信息管理系统(ADO)教职工信息管理系统,10.1数据库概述,数据库和DBMS数据库是指以一定的组织形式存放在计算机上的相互关联的数据的集合。一般一个库中有多个表组成,一张表中由多条记录组成,一条记录由若干字段组成。例如:学生信息库-基本信息表、成绩表基本信息表-每个学生的基本信息记录基本信息记录-姓名、性别、年龄、专业等字段组成DBMS数据库管理系统为用户提供对数据库操作的各种命令、工具及方法。例如:Access/Oracle/SQLSever等等,10.2MFCODBC,ODBC开放数据库接口ODBC是一种标准的基于SQL的接口,提供了应用程序与数据库之间的接口,使得任何一个数据库都可以通过ODBC驱动器与指定的DBMS相联。使用ODBC能使用户编写数据库应用程序变得容易简单,避免了与数据库相连接的复杂性。ODBC的组成见图ODBC管理器:位于控制面板驱动程序管理器:ODBC32.dllODBC驱动程序:以DLL文件形式出现MFCODBCMFC类库中提供了两个有关ODBC对数据库操作的类:CDatabaseCRecordset,图ODBC的构成,位于控制面板,ODBC32.dll,以DLL文件形式出现,MFCODBC主要类介绍,CDatabase类:包含有数据库的连接信息,可以在整个应用程序中共享这些信息,一个Cdatabase对象代表了一个与数据源的连接,通过它可以对数据源进行操作。要想建立与数据源的连接,必须创建Cdatabase对象,然后用Open()函数或OpenEx()函数初始化此对象。CDatabasem_db;m_db.OpenEx(“DSN=STUDENT;UID=;PWD=”,CDatabase:noOdbcDialog);CDatabase类的成员函数见P282表10-1CRecordset类:针对数据源中的记录集,负责对记录的操作.一个CRecordset对象代表了一组从数据源查询出来的记录,称为记录集。记录集从数据源中查询出数据,然后再进行添加、排序等操作。,快照记录集(snapshot):数据集的一个静态视图动态记录集(Dynaset):能保持与其它用户所作的更改保持同步使用记录集对象,首先应建立与数据源的连接,这时应当创建并初始化CDatabase对象,然后将创建的CDatabase对象的指针传给CRecordset对象的构造函数,这样记录对象创建成功,最后使用Open()函数对数据源进行数据查询。CRecordsetrs(CRecordView类:负责界面,以视图形式显示数据库记录CRecordView类对是在控件中显示数据库记录的视图对象,是直接连接到CRecordView对象上的表单视图。CDBException:负责处理MFCODBC在操作数据库时发生的异常。,CRecordset类的数据成员P283,表10-2,CRecordset类的成员函数P283,表10-3CRecordSet类的成员函数,CRecordset类的成员函数,SQL语句介绍,SQL(StructuredQueryLanguage)即结构化查询语言,是关系数据库存储的工业标准。在数据库系统开发中常用的是SELECT语句。SELECT命令用于对数据源的查询。它具有许多功能强大的语句,用它可以实现许多关系操作,以实现查询的目的。SELECT语句的基本结构如下:SELECT子句INTO子句FROM子句WHERE子句GROUPBY子句HAVING子句ORDERBY子句,除了以上子句,SELECT语句中经常出现的关键字还包括UNION运算符、COMPUTE子句、FOR子句和OPTION子句。,SQL语句举例,SELECT*FROMEmployeesSELECT*FROMEmployeesORDERBYwageDESCSELECTSUM(Wage)FROMEmployeesSELECTDep_idAS部门代号,AVG(Wage)AS工资总额FROMEmployeesGROUPBYDep_idHAVINGAVG(Wage)3000SELECTd.Dep_name,e.Emp_name,e.TitleFROMDepartmentASd,EmployeesASeWHEREd.Dep_id=e.Dep_id,排序降序,分组,求和,联合查询,INSERT子句,INSERTINTOdbf_name(fname1,fname2,.)VALUES(eExpression1,eExpression2,.)/ACCESSInsertinto表名VALUES(6,SE,HighSchool,2007-01-01)/Oracle数据库中Insertinto表名VALUES(6,SE,HighSchool,to_date(01/01/2007)),Update子句,UPDATEDatabaseName1!TableName1SETColumn_Name1=eExpression1,Column_Name2=eExpression2.WHEREFilterCondition1AND|ORFilterCondition2.Update表名Set字段名1=表达式,字段名2=表达式Where条件,Delete子句,Deletefrom表名where条件,条件语句Whereage=5Wherename=zhangsan,Drop子句,droptable表名删除表中的所有记录,但表结构保留,OracleSQL语句中的类型转换,TO_CHARTO_CHAR(10)TO_CHAR(sysdate)TO_CHAR(SYSDATE,MM/DD/YYYY)TO_DATETO_DATE(01/01/90,MM/DD/YY)TO_DATE(04-JUL-97)TO_DATE(July4,1998,Monthdd,yyyy),10.3使用ODBC创建数据库应用程序,创建一个支持ODBC数据库的SDI应用程序:可以检索ODBC数据库中的记录;允许用户更新、添加和删除记录;对记录的排序、查找等。,开发步骤,准备数据库创建并注册数据源创建数据库应用框架设计记录操作界面更新记录排序和筛选,1.创建数据库,设计数据库用MicrosoftAccess创建数据库StudentDB.mdb,其中包含一个表student,2.创建并注册数据源,ODBC管理器的使用用户DSN用户数据源只对当前用户可见,而且只能用于当前机器上系统DSN系统数据源对当前机器上的所有用户可见文件DSN文件数据源可以由安装了相同驱动程序的用户共享数据源创建示例,创建并注册数据源,数据源创建示例winXP:“控制面板”“性能与维护”“管理工具”双击“ODBC数据源(32位)”“用户DSN”“添加”选择数据库驱动程序“完成”,创建并注册数据源,给数据源命名选择数据库,3.创建数据库应用框架,创建一个SDI应用程序EX_ODBC,AppWizard的选项设置:step2,4.创建主窗体(详见表10-11p295),布置主窗体,创建主窗体(详见表10-11),将控件与字段相关联,创建主窗体(详见表10-11),编译、运行可浏览数据库中的记录,CEX_ODBCSet类,classCEX_ODBCSet:publicCRecordsetpublic:CEX_ODBCSet(CDatabase*pDatabase=NULL);DECLARE_DYNAMIC(CEX_ODBCSet)/Field/ParamData/AFX_FIELD(CEX_ODBCSet,CRecordset)longm_ID;CStringm_stuID;CStringm_name;CStringm_sex;CStringm_subject;intm_age;/AFX_FIELD,/Overrides/ClassWizardgeneratedvirtualfunctionoverrides/AFX_VIRTUAL(CEX_ODBCSet)public:virtualCStringGetDefaultConnect();/DefaultconnectionstringvirtualCStringGetDefaultSQL();/defaultSQLforRecordsetvirtualvoidDoFieldExchange(CFieldExchange*pFX);/RFXsupport/AFX_VIRTUAL/Implementation#ifdef_DEBUGvirtualvoidAssertValid()const;virtualvoidDump(CDumpContext,记录集字段数据成员,构造函数,CEX_ODBCSet:CEX_ODBCSet(CDatabase*pdb):CRecordset(pdb)/AFX_FIELD_INIT(CEX_ODBCSet)m_ID=0;m_stuID=_T();m_name=_T();m_sex=_T();m_subject=_T();m_age=0;m_nFields=6;/AFX_FIELD_INITm_nDefaultType=snapshot;,记录集类型,创建连接,CStringCEX_ODBCSet:GetDefaultConnect()return_T(ODBC;DSN=STUDENT);CStringCEX_ODBCSet:GetDefaultSQL()return_T(student);,用于获得定义了数据源类型和数据源名的连接字符串,定义SQL语句的字符串,本例的SQL语句定义了查询一张表的完整记录,记录集与数据库的数据交换,voidCEX_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_FIELD_MAP,5.更新记录(记录集的编辑函数),AddNew()向记录集添加一条新记录Delete()删除当前记录Edit()允许编辑当前记录Update()将当前记录修改存入数据库CancelUpdate()Requery()重新执行SQL语句,以刷新记录集,a.进入添加模式,longCEX_ODBCSet:GetMaxID()MoveLast();returnm_ID;/返回当前记录ID号,向记录集类CEX_ODBCSet添加计算下一个ID号的成员函数,进入添加模式,向“记录”菜单添加新的菜单项,添加新记录,为视图类CEX_ODBCView添加一个关于该菜单的COMMAND事件消息的事件处理函数。,voidCEX_ODBCView:OnRecordNew()CRecordset*pSet=OnGetRecordset();/获得一个记录集指针if(pSet-CanUpdate()/刷新窗体,删除记录,voidCEX_ODBCView:OnRecordDelete()/TODO:Addyourcommandhandlercodehereif(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-SetFieldNull(NULL);UpdateData(false);/更新控件显示,为视图类CEX_ODBCView添加一个关于该菜单的COMMAND事件消息的事件处理函数。,排序和筛选,m_strFilter/CRecordSet类的数据成员,可作过滤器,指定SQL的WHILE子句。m_strSort/CRecordSet类的数据成员,用于控制记录的排序,指定SQL的ORDERBY子句。,排序,添加两个排序子菜单的COMMAND事件消息的消息处理函数。,voidCEX_ODBCView:OnSortStuid()/定义排序关键字按ID排序m_pSet-m_strSort=stuID;m_pSet-Requery();/重新查询UpdateData(false);/更新控件显示,排序,添加两个排序子菜单的COMMAND事件消息的消息处理函数。,voidCEX_ODBCView:OnSortAge()/定义排序关键字按ID排序m_pSet-m_strSort=age;m_pSet-Requery();/重新查询UpdateData(false);/更新控件显示,查询,添加一个新的对话框资源IDD_DlALOG1,并新建对话框类CDlgFilter,查询,voidCEX_ODBCView:OnFilterName()CDlgFilterdlg;dlg.m_field=姓名:;CStringstr=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);/更新控件显示,为“查找”两个子菜单进行消息映射,Name=张三,查询,voidCEX_ODBCView:OnFilterStuid()CDlgFilterdlg;dlg.m_field=学号;CStringstr=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();/重新查询记录集UpdateData(false);/更新控件显示,为“查找”两个子菜单进行消息映射,程序的进一步改进,只需将工具栏按钮与IDM_RECORD_NEW菜单ID相关联,通过工具栏按钮实现添加、编辑和删除记录,界面用按钮实现添加、编辑和删除记录,只需将命令按钮与IDM_RECORD_NEW菜单ID相关联,处理一个库中的多个表,增加一个CRecordSet派生类C*Set指定数据源ODBC选择表使用C*SetC*Setm_Set;M_Set.Open();M_Set.MoveNext();M_Set.m_strFilter,ADO技术综述及实践,DAO技术综述及实践,ADO技术介绍,ADO简介ADO技术特点ADO对象模型开发ADO应用程序的方法,ADO简介,ADO(ActiveXDataObject)是Microsoft的数据库应用程序开发的新接口,是建立在OLEDB之上的高级数据库访问技术。ADO技术基于COM(ComponentObjectModel),具有COM组件的诸多优点,可以用来构造可复用应用框架,被多种语言支持,能够访问关系数据库、非关系数据库以及所有的文件系统。另外,ADO还支持各种客户/服务器模式与基于Web的数据操作,具有远程数据服务RDS(RemoteDataService)的特性,是远程数据存取的发展方向。,应用程序,ADO,OLEDB,关系数据库,文本,目录数据,主机数据,非结构化数据,电子邮件,地理信息,图形信息,ADO技术特点,易于使用高速访问数据源可以访问不同的数据源可以用于MicrosoftActiveX页程序占用的内存少,ADO对象模型,连接对象Connection命令对象Command参数对象Parameter记录集对象Recordset字段对象Field属性对象PropertyErrors集合Parameters集合Fields集合Properties集合,ADO对象模型提供了7种对象、4种集合。分别为:,开发ADO应用程序的方法,使用ADOData控件这种方法简单,用户只需写相对较少的代码,甚至不写一行代码,可以实现对数据库的访问。其缺点是效率比较低,用户对程序的控制比较弱,不能充分发挥ADO的强大功能;直接使用ADO对象这种方法可以非常灵活地控制程序的细节,而且效率、性能很高,可以充分发挥ADO的特性。,使用ADO对象开发数据库应用程序,ADO对象编程模型ADO中的智能指针引入ADO动态链接库创建ADO与数据源的连接获得记录集遍历记录集访问记录集中的数据添加记录修改记录删除记录,ADO对象编程模型,初始化OLE/COM库环境引入ADO库文件用3个智能指针进行数据库操作,connection对象连接数据库利用建立好的连接,通过connection、Command对象执行SQL命令,并取得结果记录集记录集的遍历、更新断开连接,结束,ADO中的智能指针,_ConnectionPtr_CommandPtr_RecordsetPtr,ADO模型中常用的对象:Connection对象、Command对象、Recordset对象,在使用这3个对象的时候,需要定义与之对应的3个智能指针,分别为,#importc:programfilescommonfilessystemadomsado15.dllno_namespacerename(EOF,adoEOF)rename(BOF,adoBOF)#include“stdafx.h”,引入ADO库,初始化OLE/COM库环境,在能够使用ADO对象之前,必须为应用程序初始化COM环境。要完成这一任务,可以通过调用CoInitializeAPI函数,并传递NULL作为唯一的参数,代码如下::CoInitialize(NULL);如果应用程序中漏了这行代码,或是没有把它放在开始和对象交互之前,当运行应用程序时,将得到一个COM错误。当完成所有的ADO活动时,还必须通过调用函数CoUnitialize关闭COM环境,代码如下::CoUnitialize();这个函数可清除COM环境,并准备关闭应用程序。,创建ADO与数据源的连接,当初始化COM环境后,就可以创建与数据库的连接。建立数据库的连接需要使用连接对象Connection。首先定义一个_ConnectionPtr类型指针,然后调用CreateInstance方法实例化,代码如下:_ConnectionPtrm_pConnection;m_pConnection.CreateInstance(_uuidof(Connection);之后,调用Connection对象的Open方法创建数据库的连接try_bstr_tstrConnect=”Provider=OraOLEDB.Oracle.1;Password=db1;UserID=db1;DataSource=ORADB;PersistSecurityInfo=True”;m_pConnection-Open(strConnect,”,”,-1);/打开连接catch(_com_errore)/处理异常AfxMessageBox(e.ErrorMessage();,参考ACCESS数据库的设置,同“ADODB.Connection”,获得记录集,RecordsetPtrm_pRecordset;/定义记录集指针m_pRecordset.CreateInstance(_uuidof(Recordset);/实例化CStringstrSql=”select*fromSTUDENT”;BSTRbstrSQL=strSql.AllocSysString();m_pRecordset-Open(bstrSQL,(Idispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);/打开记录集,同“ADODB.Recordset”,遍历记录集,MoveFirst()MoveLast()MoveNext()MovePrevious(),访问记录集中的数据,GetCollect()GetItem(),_Variant_ttheValue;theValue=m_pRecordset-GetCollect(“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;,添加记录,使用连接对象的Execute方法使用命令对象的Execute方法使用记录集对象的AddNew方法,m_pRecordset-AddNew();m_pRecordset-Fields-GetItem(“AGE”)-Value=(short)22;m_pRecordset-Fields-GetItem(“NAME”)-Value=_bstr_t(“王晶晶”);m_pRecordset-Update();,使用命令对象的Execute方法添加记录,_CommandPtrm_pCommand;trym_pCommand.CreateInstance(ADODB.Command);_variant_tvNULL;vNULL.vt=VT_ERROR;vNULL.scode=DISP_E_PARAMNOTFOUND;m_pCommand-ActiveConnection=m_pConnection;m_pCommand-CommandText=insertintoscore(name,birthday,english)VALUES(zhang,1990-10-20,100);m_pCommand-Execute(,Namechar(10)BirthdaydateEnglishint,修改记录,m_pRecordset-Fields-GetItem(“AGE”)-Value=(short)20;m_pRecordset-Fields-GetItem(“NAME”)-Value=_bstr_t(“孙楠”);m_pRecordset-Update();,使用命令对象的Execute方法删除记录,_CommandPtrm_pCommand;trym_pCommand.CreateInstance(ADODB.Command);_variant_tvNULL;vNULL.vt=VT_ERROR;vNULL.scode=DISP_E_PARAMNOTFOUND;m_pCommand-ActiveConnection=m_pConnection;m_pCommand-CommandText=deletefromscorewherename=zhao;m_pCommand-Execute(,实例-一个简单的数据库系统,创建数据库(源)-Access创建一个使用ADOData控件的对话框应用程序创建一个使用ADO对象的应用程序,用ADOData控件开发数据库应用程序,该系统的主要功能包括:在DataGrid表格中显示学生的主要信息;可以添加、修改、删除学生数据,步骤,创建一个基于对话框的工程,工程名ADOData添加ADOData控件和DataGrid控件设置控件属性为ADOData控件添加成员变量m_adodc,类型为CAdodc;为DataGrid控件添加成员变量m_datagrid,类型为CDataGrid。为对话框类CADODataDlg添加OnInitDialog函数,用于设置ADOData控件的数据源和DataGrid控件的列宽度。并添加代码添加文件包含语句#include“column.h”#include“columns.h”#include“COMDEF.H”编译运行,BOOLCADODlg:OnInitDialog()/TODO:Addextrainitializationhere/设置ADOData控件的数据源,将列名用汉字显示m_adodc.SetRecordSource(SelectID,stuIDAS学号,nameAS姓名,sexAS性别,ageAS年龄,subjectAS专业FROMSTUDENT);m_adodc.Refresh();/刷新结果集的内容/设置列宽度_variant_tvIndex;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).SetWidth(60);vIndex=long(4);m_datagrid.GetColumns().GetItem(vIndex).SetWidth(60);vIndex=long(5);m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100);。,使用ADO对象开发数据库应用程序,步骤,创建基于对话框的工程,工程名ADO编辑对话框资源,并添加控件的关联变量,消息处理函数在文件Stdfx.h文件中增加引入ADO库的代码。在程序类CADOApp中声明连接对象,访问类型为public:初始化程序例程在对话框类CADODlg中声明记录集对象,访问类型为protected初始化对话框在对话框类中,添加显示记录函数DispRecord(),将数据库中的记录显示在对话框中。浏览记录集增加记录删除记录更新保存记录还原COM环境以及关闭连接对象和记录集对象。,在文件Stdfx.h文件中增加引入ADO库的代码#importc:programfilescommonfilessystemadomsado15.dllno_namespacerename(EOF,adoEOF)rename(BOF,adoBOF),引入ADO库,初始化COM环境,创建连接对象,public:_ConnectionPtrm_pConnection;BOOLCADObApp:InitInstance():CoInitialize(NULL);m_pConnection.CreateInstance(ADODB.Connection);m_pConnection-Open(Provider=Microsoft.Jet.OLEDB.4.0;DataSource=D:vc+ADObstudentDB.mdb,adModeUnknown);,返回,打开记录集(初始化对话框),protected:_RecordsetPtrm_pRecordset;m_pRecordset.CreateInstance(_uuidof(Recordset);m_pRecordset-Open(SELECT*FROMSTUDENT,theApp.m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);/显示记录到界面上DispRecord();,显示记录函数,voidCADODlg:DispRecord()_variant_ttheValue;/获取学号的值if(!m_pRecordset-adoEOF)theValue=m_pRecordset-GetCollect(stuID);if(theValue.vt!=VT_NULL)m_stuid=(char*)_bstr_t(theValue);/获取学生姓名theValue=m_pRecordset-GetCollect(name);if(theValue.vt!=VT_NULL)m_name=(char*)_bstr_t(theValue);/获取学生年龄theValue=m_pRecordset-GetCollect(age);if(theValue.vt!=VT_NULL)m_age=theValue.iVal;/获取学生性别theValue=m_pRecordset-GetCollect(sex);if(theValue.vt!=VT_NULL)m_sex=(char*)_bstr_t(theValue);/获取学生专业theValue=m_pRecordset-GetCollect(subject);if(theValue.vt!=VT_NULL)m_subject=(char*)_bstr_t(theValue);UpdateData(FALSE);,浏览记录,voidCADODlg:OnNextButton()/TODO:Addyourcontrolnotificationhandlercodeherem_pRecordset-MoveNext();if(m_pRecordset-adoEOF)m_pRecordset-MoveLast();DispRecord();voidCADObDlg:OnPreButton()/TODO:Addyourcontrolnotificationhandlercodeherem_pRecordset-MovePrevious();if(m_pRecordset-adoBOF)m_pRecordset-MoveFirst();DispRecord();,添加记录,voidCADObDlg:OnAddButton()/TODO:AddyourcontrolnotificationhandlercodehereRefreshData();try/写入各字段值m_pRecordset-AddNew();catch(_com_error*e)AfxMessageBox(e-ErrorMessage();,RefreshData(),voidCADObDlg:RefreshData()m_age=0;m_name=;m_sex=男;m_stuid=;m_subject=;UpdateData(FALSE);,删除记录,voidCADObDlg:OnDelButton()/TODO:AddyourcontrolnotificationhandlercodeheretryAfxMessageBox(删除当前记录);m_pRecordset-Delete(adAffectCurrent);m_pRecordset-Update();m_pRecordset-MoveNext();if(m_pRecordset-adoEOF)m_pRecordset-MoveLast();DispRecord();catch(_com_error*e)AfxMessageBox(e-ErrorMessage();,更新保存记录,voidCAD

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论