第7章数据库编程.pdf

上传人:asd****56 文档编号:70321089 上传时间:2023-01-19 格式:PDF 页数:110 大小:616.88KB
返回 下载 相关 举报
第7章数据库编程.pdf_第1页
第1页 / 共110页
第7章数据库编程.pdf_第2页
第2页 / 共110页
点击查看更多>>
资源描述

《第7章数据库编程.pdf》由会员分享,可在线阅读,更多相关《第7章数据库编程.pdf(110页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、VC+程序设计实用教程VC+程序设计实用教程第7 章数据库编程第7 章数据库编程河北经贸大学信息技术学院河北经贸大学信息技术学院2008年9月2008年9月教学目标教学目标了解ODBC的概念;掌握MFC ODBC中的CDatabase类、CRecordset类、CRecordView类的使用方法;CRecordset类、CRecordView类的使用方法;掌握常用的SQL语句;掌握MFC ODBC开发数据库应用程序的方法和掌握MFC ODBC开发数据库应用程序的方法和技巧;掌握编程模型掌握ADO编程模型。VC+程序设计实用教程铁道出版社2008.9本章主要内容本章主要内容连接数库的式连接数据库

2、的方式数据库的访问与ODBC数据库的访问与ODBCMFC ODBC使用ODBC数据库应用程序ADO数据库开发技术ADO数据库开发技术开发ADO应用程序的方法VC+程序设计实用教程铁道出版社2008.9连接数据库的四种方式连接数据库的四种方式ODBC(Open DataBase Connectivity)开放数据库连接开放数据库连接开放数据库连接开放数据库连接(py)提供了应用程序接口API。使得任何一个数据库都可以通过ODBC驱动器与指定的DBMS相联。用户的程序可以通过调用ODBC驱动管理器中相应的驱动程序达到管理数据库的目的。访问数据库时,是由中相应的驱动程序达到管理数据库的目的。访问数据

3、库时,是由ODBC管理器将应用程序的数据库访问请示传递给相应的数据库驱动程序,驱动程序再用SQL语句完成DBMS的访问任务。DAO(Data Access Objects)数据访问对象数据访问对象数据访问对象数据访问对象DAO(Data Access Objects)数据访问对象数据访问对象数据访问对象数据访问对象DAO使用Microsoft Jet提供的数据库访问对象集直接访问DBMS,速度比ODBC要快。OLE DB OLEOLE数据库数据库数据库数据库OLE DB OLE DB 是一种高性能的、基于是一种高性能的、基于 COMCOM(组件对象模型)(组件对象模型)的数据库技术的数据库技术

4、ActiveX Data Object(ADO)其中,最简单也最常用的是ODBC,而ADO则是目前最流行的一种数据库编程方法VC+程序设计实用教程铁道出版社2008.9其中,最简单也最常用的是ODBC,而ADO则是目前最流行的种数据库编程方法项目演示项目演示生绩管系统学生成绩管理系统(ODBC)一个简单学生信息管理系统(ADO data个简单学生信息管理系统(ADO data 控件)学生信息管理系统(ADO)学生信息管理系统(ADO)VC+程序设计实用教程铁道出版社2008.97.1数据库概述7.1数据库概述数库数据库和DBMS数据库是指以一定的组织形式存放在计算机上的相互关联的数据数据库是指

5、以定的组织形式存放在计算机上的相互关联的数据的集合。一般一个库中有多个表组成,一张表中由多条记录组成,一条记录由若干字段组成。例如:学生信息库-基本信息表、成绩表基本信息表-每个学生的基本信息记录基本信息记录姓名性别年龄专业等字段组成基本信息记录-姓名、性别、年龄、专业等字段组成DBMS数据库管理系统为用户提供对数据库操作的各种命令、工具及方法。例如:Access/Oracle/SQL Sever等等VC+程序设计实用教程铁道出版社2008.9ODBCODBCODBC开放数据库接口ODBC是一种标准的基于SQL的接口,提供了应用程序与数据库之间的接口,使得任何一个数据库都可以通过ODBC驱动器

6、与指定的DBMS相联。使用ODBC能使用户编写数据库应用程序变得容易简单避免了与数据库相连接的复杂性序变得容易简单,避免了与数据库相连接的复杂性。ODBC的组成见图ODBC管理器:位于控制面板控制面板驱动程序管理器:ODBC32.dll驱动程序 以文件形式出现ODBC驱动程序:以DLL文件形式出现MFC ODBCMFC类库中提供了两个有关ODBC对数据库操作的类:CDatabaseCRecordsetVC+程序设计实用教程铁道出版社2008.9图 ODBC的构成图 ODBC的构成ODBC32.dll以DLL文件形式出现位于控制面板控制面板VC+程序设计实用教程铁道出版社2008.9MFC OD

7、BC主要类介绍MFC ODBC主要类介绍 CDatabaseCDatabase 类:包含有数据库的连接信息包含有数据库的连接信息 可以在整可以在整 CDatabaseCDatabase 类:包含有数据库的连接信息包含有数据库的连接信息,可以在整可以在整个应用程序中共享这些信息,一个个应用程序中共享这些信息,一个Cdatabase对象代表了一个与数据源的连接,通过它可以对数据源对象代表了一个与数据源的连接,通过它可以对数据源进行操作进行操作要想建立与数据源的连接要想建立与数据源的连接必须创建必须创建进行操作进行操作。要想建立与数据源的连接要想建立与数据源的连接,必须创建必须创建Cdatabase

8、对象,然后用对象,然后用Open()函数或函数或OpenEx()函数函数初初始化始化此此对象对象。函数始化对象函数始化对象CDatabase m_db;m_db.OpenEx(“DSN=_p(STUDENT;UID=;PWD=”,CDatabase:noOdbcDialog);CRecordsetCRecordset类:针对数据源中的记录集针对数据源中的记录集,负责对记录的操作负责对记录的操作.一个一个CRecordset对象代表了一组从数据源查对象代表了一组从数据源查询出来的记录询出来的记录,称为记录集称为记录集。记录集从数据源中查记录集从数据源中查VC+程序设计实用教程铁道出版社2008.

9、9询出来的记录询出来的记录,称为记录集称为记录集。记录集从数据源中查记录集从数据源中查询出数据,然后再进行添加、排序等操作。询出数据,然后再进行添加、排序等操作。快照记录集(snapshot):数据集的一个静态视图快照记录集(snapshot):数据集的一个静态视图动态记录集(Dynaset):能保持与其它用户所作的更改保持同步使用记录集对象,首先应建立与数据源的连接,这时应当创建并初始化使用记录集对象,首先应建立与数据源的连接,这时应当创建并初始化CDatabaseCDatabase对象对象,然后将创建的然后将创建的CDatabaseCDatabase对象的指针传给对象的指针传给CRecor

10、dsetCRecordset对象对象CDatabaseCDatabase对象对象,然后将创建的然后将创建的CDatabaseCDatabase对象的指针传给对象的指针传给CRecordsetCRecordset对象对象的构造函数,这样记录对象创建成功,最后使用Open()函数对数据源进行数据查询。的构造函数,这样记录对象创建成功,最后使用Open()函数对数据源进行数据查询。CRdt(&db)CRecordset rs(&m_db);CString sql=“select*from student_tab”;rs.Open(CRecordset:dynaset,sql);rs GetField

11、Value(1 strname);rs.GetFieldValue(1,strname);CRecordView类:负责界面负责界面,以视图形式显示数据库记录以视图形式显示数据库记录CRecordView类对是在控件中显示数据库记录的视图对象是直接连接到CRecordView类对是在控件中显示数据库记录的视图对象,是直接连接到CRecordView对象上的表单视图。CDBException:负责处理负责处理MFC ODBC在操作数据库时发生的异常。在操作数据库时发生的异常。VC+程序设计实用教程铁道出版社2008.97.2 使用使用ODBC7.2 使用使用ODBC类的法CDatabase类的用

12、法CRecordset类的用法CRecordset类的用法CRecordView类CDBException类VC+程序设计实用教程铁道出版社2008.9CDatabase类的用法-建立与数据源的连接建立与数据源的连接CDatabase类的用法建立与数据源的连接建立与数据源的连接#include /ODBC类的定义在afxdb.h文件中CDatabase m db;CDatabase m_db;TRYm_db.OpenEx(_T(DSN=EMPLOYEEDB;UID=;PSW=),CDatabase:noOdbcDialog);CATCH(CDBEti)CATCH(CDBException,ex

13、)AfxMessageBox(ex-m_strError);AfxMessageBox(ex-m strStateNativeOrigin);AfxMessageBox(exm_strStateNativeOrigin);AND_CATCH(CMemoryException,pEx)ERtE()pEx-ReportError();AfxMessageBox(“Memorry Exception”);AND CATCH(CException,e)AND_CATCH(CException,e)TCHAR szError100;e-GetErrorMessage(szError,100);Af MB

14、(E)VC+程序设计实用教程铁道出版社2008.9AfxMessageBox(szError);END_CATCH用CDatabase类实现事务管理ExecuteSQL用CDatabase类实现事务管理ExecuteSQL插入记录插入记录插入记录插入记录CString sql=“insert into Employees VALUES(6,张晓 女 部门经理 2000 005)”/向表Employees插,女,部门经理,2000.00,5)/向表Employees插入一条新记录TRYm_db.ExecuteSQL(sql);_(q)CATCH(CDBException,ex)./同前AND_C

15、ATCH(CException,e)END_CATCHVC+程序设计实用教程铁道出版社2008.9删除记录删除记录CString sql=“delete from Employees where Dep_id=5”=5 /删除表Employees中部门代号为5的记录TRYTRYm db.ExecuteSQL(sql);_(q);CATCH(CDBException,ex)./同前AND_CATCH(CException,e)END_CATCHVC+程序设计实用教程铁道出版社2008.9修改记录修改记录CString sql=“update Employees SET Dep_id=4 WHER

16、E Dep id=5”=4 WHERE Dep_id=5/修改表Employees中部门代号为5的记录的部门代号为4门代号为4TRYm db.ExecuteSQL(sql);m_db.ExecuteSQL(sql);CATCH(CDBException,ex)./同前AND CATCH(CException,e)AND_CATCH(CException,e)END_CATCHVC+程序设计实用教程铁道出版社2008.9查询记录查询记录CSt il“lt*fElCString sql=“select*from Employees where Dep_id=4”/查询表Employees中部门代号

17、为4的记录TRYTRY m_db.ExecuteSQL(sql);CC(C)/同前CATCH(CDBException,ex)./同前AND CATCH(CException,e)_(p)END_CATCHVC+程序设计实用教程铁道出版社2008.9CRecordset类的用法CRecordset类的用法类的CRecordset类的成员打开和关闭记录集打开和关闭记录集增加一条新记录删除记录修改记录修改记录查询记录记录排序VC+程序设计实用教程铁道出版社2008.9CRecordset类的数据成员CRecordset类的数据成员VC+程序设计实用教程铁道出版社2008.9CRecordset类的

18、成员函数CRecordset类的成员函数VC+程序设计实用教程铁道出版社2008.9CRecordset类的成员函数CRecordset类的成员函数VC+程序设计实用教程铁道出版社2008.9打开和关闭记录集open/close打开和关闭记录集open/close CRecordset rs(&m db);/定义CRecordset对象并将其连接到数据库对象m dbCRecordset rs(&m_db);/定义CRecordset对象并将其连接到数据库对象m_dbTRYCString sql=“select*from Employees”;rs.Open(CRecordset:snapsho

19、t,sql)/打开记录集int nId;/职工代号CString strname,strtitle;/职工姓名,职务double wage;/工资double wage;/工资int i=0;/记录号CString StrInfo=记录号 职代号姓 名职 称工资n;while(!rs.IsEOF()i+;CDBVariant var;/定义变体对象rs GetFieldValue(short)0 var SQL C SLONG);/获取第一个字段的值整型rs.GetFieldValue(short)0,var,SQL_C_SLONG);/获取第个字段的值,整型if(var.m_dwType!=

20、DBVT_NULL)nId=var.m_lVal;var.Clear();VC+程序设计实用教程铁道出版社2008.9rs.GetFieldValue(1,strname);/获取第二个字段的值,文本型.增加一条新记录AddNew/Update增加条新记录AddNew/Update增加条m_pSet.AddNew();/增加一条新记录m pSet m ID=m ID;/为新记录的字段m_pSet.m_ID m_ID;/为新记录的字段赋值m pSet.Update();/保存记录m_pSet.Update();/保存记录m_pSet.Requery();/刷新记录集移动到新记录m_pSet.Mo

21、veLast();/移动到新记录VC+程序设计实用教程铁道出版社2008.9删除当前记录Delete删除当前记录Delete删除前m_pSet.Delete();/删除当前记录m pSet Requery();/刷新记录集m_pSet.Requery();/刷新记录集m_pSet.MovePrev();/移动到前一条记录录VC+程序设计实用教程铁道出版社2008.9修改当前记录Edit/Update修改当前记录Edit/Update允许户编辑前m_pSet.Edit();/允许用户编辑当前记录/完成所有的数据交换,更新记录中的字段段:m pSet Update()m_pSet.Update()

22、;VC+程序设计实用教程铁道出版社2008.9排序和查找m strSort/m strFilter排序和查找m_strSort/m_strFilter S t t St/按照字段排m_pSet-m_strSort=age;/按照字段age排序,升序m pSet-Open();/打开记录集m_pSet-Open();/打开记录集 /其他操作m pSet-Close();/关闭m_pSet-Close();/关闭CString str;Str=”name=张三”;Str=name=张三;m_pSet-m_strFilter=str;/查找name为张三的记录的记录m_pSet-Open();/打开

23、记录集VC+程序设计实用教程铁道出版社2008.9了解SQL 语句了解SQL 语句SQL(Structured Query Language)即结构化查询语言,SQL(Structured Query Language)即结构化查询语言,是关系数据库存储的工业标准。在数据库系统开发中常用的是SELECT语句。SELECT 命令用于对数据源的查询。它具有许多功能强大的语句,用它可以实现许多关系操作,以实现查询的目的。SELECT语句的基本结构如下:SELECT语句的基本结构如下:SELECT 子句INTO 子句 FROM 子句WHERE 子句 GROUP BY 子句 除了以上子句,SELECT语

24、句中经常GROUP BY子句HAVING 子句 ORDER BY 子句除了以上子句,SELECT语句中经常出现的关键字还包括UNION运算符、COMPUTE子句、FOR子句和OPTION子VC+程序设计实用教程铁道出版社2008.9COMPUTE子句、FOR子句和OPTION子句。SQL语句举例SQL语句举例排序 降序SELECT*FROM EmployeesSELECT*FROM Employees ORDER BY wage DESC排序 降序SELECT SUM(Wage)FROM Employees SELECT Dep_id AS 部门代号,AVG(Wage)AS 工资总额 FROM

25、 Emplo ees GROUP BY Dep id HAVING AVG(Wage)3000Employees GROUP BY Dep_id HAVING AVG(Wage)3000SELECT d.Dep_name,e.Emp_name,e.Title FROM Dtt AS d ElASFROM Department AS d,Employees AS e WHERE d.Dep_id=e.Dep_id 分组,求和联合查询VC+程序设计实用教程铁道出版社2008.9联合查询INSERT子句INSERT子句INSERT INTO dbf(f1 INSERT INTO dbf_name(f

26、name1,fname2,.)VALUES(eExpression1,eExpression2,.)/ACCESSInsert into 表名 VALUES(6,SE,表名HighSchool,2007-01-01)/Oracle数据库中Insert into 表名 VALUES(6,SE,HighSchool,to_date(01/01/2007))VC+程序设计实用教程铁道出版社2008.9Update子句Update子句UPDATE DatabaseName1!TableName1SET Column_Name1=eExpression1 Column Name2=eExpression

27、2,Column_Name2 eExpression2.WHERE FilterCondition1 AND|OR FilterCondition2FilterCondition2.Update 表名 Set 字段名1=表达式,字段p名2=表达式Where 条件VC+程序设计实用教程铁道出版社2008.9Delete子句Delete子句表名条件Delete from 表名 where 条件条件语句Where age=5Where name=zhangsanVC+程序设计实用教程铁道出版社2008.9Drop子句Drop子句表名drop table 表名删除表中的所有记录 但表结构保留删除表中的

28、所有记录,但表结构保留VC+程序设计实用教程铁道出版社2008.9Oracle SQL语句中的类型转换Oracle SQL语句中的类型转换TO_CHARTO_CHAR(10)TO_CHAR(sysdate)TO_CHAR(SYSDATE,MM/DD/YYYY)OTO_DATETO_DATE(01/01/90,MM/DD/YY)TO_DATE(04-JUL-97)TO_DATE(July 4,1998,Month dd,yyyy)VC+程序设计实用教程铁道出版社2008.97.3 使用ODBC创建数据库应用程序一个简单的学生成绩管理系统,用来管理某门课程的成绩单。当教师登录以后,可以对学生成绩进

29、行添加、删除、修改、查询操作,还可以将成绩表导出到E cel文件而当学生登录以后只能对成绩进行查Excel文件。而当学生登录以后,只能对成绩进行查询、显示操作。系统简介系统简介登录对话框操作主界面VC+程序设计实用教程铁道出版社2008.9查询对话框开发步骤开发步骤创建数据库(2张表用户表和学生成绩表)创建数据库(2张表,用户表和学生成绩表),配置数据源创建对话框应用程序框架创建对话框应用程序框架添加2个CRecordset的派生类,映射数据库的2张表张表主对话框的设计及代码实现成绩查询模块的设计与实现登录模块的设计与实现编译运行VC+程序设计实用教程铁道出版社2008.91.创建数据库1.创

30、建数据库设计数据库设计数据库用Microsoft Access创建数据库StudentDB mdb 其中包含一个成绩表成绩表SCOREStudentDB.mdb,其中包含一个成绩表成绩表SCORE序号字段名字段类型字段大小字段含义序号字段名字段类型字段大小字段含义1StuID文本12学生学号2StuName文本10学生姓名3StuClass文本10班级3StuClass文本10班级4UsualScore数字整形平时成绩字整5TestScore数字整形考试成绩6TotalScore数字整形总评成绩VC+程序设计实用教程铁道出版社2008.9用户表用户表 USER序号字段名字段类型字段大小字段含义

31、序号字段名字段类型字段大小字段含义用户表用户表 USER1UserName文本10用户名2UserPswd文本10口令3UserType数字整型用户类型0 教师 13UserType数字整型用户类型,0-教师 1-学生VC+程序设计实用教程铁道出版社2008.92.创建并注册数据源2.创建并注册数据源ODBC管理器的使用ODBC管理器的使用用户用户DSN用户数据源只对当前用户可见,而且只能用于当前机器上用户数据源只对当前用户可见,而且只能用于当前机器上系统系统DSN系统系统DSN系统数据源对当前机器上的所有用户可见系统数据源对当前机器上的所有用户可见文件文件文件文件DSN文件数据源可以由安装了

32、相同驱动程序的用户共文件数据源可以由安装了相同驱动程序的用户共享享享享数据源创建示例数据源创建示例VC+程序设计实用教程铁道出版社2008.9创建并注册数据源创建并注册数据源数创建数创建数数据源据源创建创建示例示例winXP:“控制面控制面板”板”“性能与维“性能与维护护”“管管理工理工护护管管具”具”双击“双击“ODBC数据数据源源数据数据(32位)”“用户位)”“用户DSN”“添添加”加”选择数据库驱动程序选择数据库驱动程序“完成”“完成”VC+程序设计实用教程铁道出版社2008.9创建并注册数据源创建并注册数据源给数命名给数命名给数给数据源据源命名命名选择数据库选择数据库选择数据库选择数

33、据库VC+程序设计实用教程铁道出版社2008.93.创建数据库应用框架3.创建数据库应用框架创建个用MFC AppWizard(exe)创建一个对话框应用程序ScoreODBC 框程在头文件stdafx.h中加入#include 用ClassWizard为数据库中的每一个表映射一用ClassWizard为数据库中的每一个表映射一个记录集类USER表CLi S t类USER表:CLoginSet类SCORE表:CScoreSet类VC+程序设计实用教程铁道出版社2008.9定义记录集类定义记录集类CloginSet为为CloginSet类选择类选择ODBC数据源数据源VC+程序设计实用教程铁道出

34、版社2008.9图图7.10 为为CloginSet类选择数据表类选择数据表VC+程序设计实用教程铁道出版社2008.9CLoginSet类CLoginSet类class CLoginSet:public CRdtpublic:CRecordsetpublic:public:virtual CString GetDefaultConnect();virtual CString GetDefaultSQL();virtual voidCLoginSet(CDatabase*pDatabase=NULL);DECLARE_DYNAMIC(CLoginSet)virtual void DoField

35、Exchange(CFieldExchange*pFX);/RFX support/AFX VIRTUAL/Field/Param Data/AFX_FIELD(CLoginSet,CRecordset)/AFX_VIRTUAL/Implementation#ifdef _DEBUGCStringm_UserName;CStringm_UserPswd;intm UserType;virtual void AssertValid()const;virtual void Dump(CDumpContext&dc)const;_yp;/AFX_FIELD/Overrides/ClassWizard

36、 generated;#endif;VC+程序设计实用教程铁道出版社2008.9/ClassWizard generated virtual function overrides/AFX_VIRTUAL(CLoginSet)构造函数构造函数CLi S t CLi S t(CD t b*db)CLoginSet:CLoginSet(CDatabase*pdb):CRecordset(pdb)/AFX_FIELD_INIT(CLoginSet)m UserName=T();m_UserName _T();m_UserPswd=_T();m_UserType=0;记录集_yp;m_nFields=3

37、;/AFX_FIELD_INIT记录集类型m_nDefaultType=dynaset;VC+程序设计实用教程铁道出版社2008.9记录集与数据库的数据交换记录集与数据库的数据交换CS(C*)void CLoginSet:DoFieldExchange(CFieldExchange*pFX)/AFX FIELD MAP(CLi S t)/AFX_FIELD_MAP(CLoginSet)pFX-SetFieldType(CFieldExchange:outputColumn);RFX Text(pFXT(UserName)m UserName);RFX_Text(pFX,_T(UserName)

38、,m_UserName);RFX_Text(pFX,_T(UserPswd),m_UserPswd);RFX Int(pFXT(UserType)m UserType);RFX_Int(pFX,_T(UserType),m_UserType);/AFX_FIELD_MAP VC+程序设计实用教程铁道出版社2008.9创建连接创建连接CSt iCLi S t G tD fltCt()CString CLoginSet:GetDefaultConnect()用于获得定义了数据源类型和数据源名的连接字符串return _T(ODBC;DSN=StudentDB);和数据源名的连接字符串CString

39、 CLoginSet:GetDefaultSQL()returnT(USER);return _T(USER);定义SQL语句的字符串,本例的SQL语句定义了查询一VC+程序设计实用教程铁道出版社2008.9例的 Q 语句定义了查询张表的完整记录4.创建主界面4.创建主界面主窗体主窗体IDD SCOREODBC DIALOG设计设计VC+程序设计实用教程铁道出版社2008.9主窗体主窗体IDD_SCOREODBC_DIALOG设计设计创建主窗体(详见表7-13)创建主窗体(详见表7 13)关联控件变量,进行消息映射关联控件变量,进行消息映射编写代码BOOL CScoreODBCDlg:OnIn

40、itDialog()gg()CScoreSet m_scoreset;/定义记录集对象m scoreset.Open();m_scoreset.Open();m_scoreset.MoveFirst();m stuid=m scoreset.m StuID;m_stuid m_scoreset.m_StuID;m_stuname=m_scoreset.m_StuName;/将记录集的第1条记录显示在控件中UpdateData(false);VC+程序设计实用教程铁道出版社2008.9UpdateData(false);/将记录集的所有记录显示在列表视图中续前对话框初始化续前对话框初始化/设置列

41、表框控件的扩展风格/设置列表框控件的扩展风格DWORD dwExStyle=LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE;_|_m_ListScore.ModifyStyle(0,LVS_REPORT|LVS_SINGLESEL|LVS_SHOWSELALWAYS);/设置列表框控件的颜色/设置列表框控件的颜色m_ListScore.SetExtendedStyle(dwExStyle);/初始化列表,插入6列,加标题,设置宽度m ListScore InsertColum

42、n(0 学号 LVCFMT CENTER 80 0);m_ListScore.InsertColumn(0,学号,LVCFMT_CENTER,80,0);m_ListScore.InsertColumn(1,姓名,LVCFMT_CENTER,65,0);m_ListScore.InsertColumn(2,班级,LVCFMT_CENTER,65,0);m ListScore.InsertColumn(3,平时成绩,LVCFMT CENTER,65,0);m_ListScore.InsertColumn(3,平时成绩,LVCFMT_CENTER,65,0);m_ListScore.InsertC

43、olumn(4,期末成绩,LVCFMT_CENTER,65,0);m_ListScore.InsertColumn(5,总评成绩,LVCFMT_CENTER,65,0);VC+程序设计实用教程铁道出版社2008.9初始化对话框初始化对话框CString strSQL;strSQL.Format(select*from SCORE order by StuID);ListAll(strSQL);/打开成绩单表,按照学号的排序将所有记录显示在列表中m radio=0;/查询条件初始为按学号m_radio=0;/查询条件初始为按学号UpdateData(false);if(m_UserType=1)

44、/如果用户类型为学生则增加删除修改保存导出按钮不可用 /如果用户类型为学生,则增加、删除、修改、保存、导出按钮不可用m_btnAdd.EnableWindow(FALSE);m_btnEdit.EnableWindow(FALSE);m btnUpdate EnableWindow(FALSE);m_btnUpdate.EnableWindow(FALSE);m_btnDel.EnableWindow(FALSE);m_ToExcel.EnableWindow(FALSE);return TRUE;VC+程序设计实用教程铁道出版社2008.9ListAll(CString strSQL)Lis

45、tAll(CString strSQL)void CScoreODBCDlg:ListAll(CString strSQL)void CScoreODBCDlg:ListAll(CString strSQL)m_ListScore.DeleteAllItems();/清空列表视图CScoreSet m_scoreset;/定义成绩单记录集try if(m_scoreset.IsOpen()/如果记录集是打开的,关闭之m scoreset Close();m_scoreset.Close();if(!m_scoreset.Open(CRecordset:snapshot,strSQL)/以sna

46、pshot的方式打开成绩表,如果不能打开,报错处理MessageBox(打开数据库失败!,数据库错误,MB_OK);return;catch(CDBException*e)/异常捕获e-ReportError();VC+程序设计实用教程铁道出版社2008.9int nIndex=0;/列表视图指向第1行strScore1 Format(%3d m scoreset m Usualm_scoreset.MoveFirst();/记录指针指向第1条记录CString strScore1,strScore2,strScore3;/用于将3个int成绩转换为字符串strScore1.Format(%3

47、d,m_scoreset.m_UsualScore);strScore2.Format(%3d,m_scoreset.m_TestScore);/用于将3个int成绩转换为字符串while(!m_scoreset.IsEOF()LV_ITEM lvItem;core);strScore3.Format(%3d,m_scoreset.m_TotalScore);m ListScore.SetItemText(nIndex,3,strScore1);lvItem.mask=LVIF_TEXT;lvItem.iItem=nIndex;/行lvItem.iSubItem=0;/列lvItem pszT

48、ext=;_(,);m_ListScore.SetItemText(nIndex,4,strScore2);m_ListScore.SetItemText(nIndex,5,strScore3);lvItem.pszText=;m_ListScore.InsertItem(&lvItem);/在列表视图中插入一行,每行6列m_ListScore.SetItemText(nIndex,0,m_scoSID)m_scoreset.MoveNext();/后移记录nIndex+;行数加1关闭记录集reset.m_StuID);m_ListScore.SetItemText(nIndex,1,m_sc

49、oreset.m_StuName);m_scoreset.Close();/关闭记录集VC+程序设计实用教程铁道出版社2008.9m_ListScore.SetItemText(nIndex,2,m_scoreset.m_StuClass);“添加”按钮的消息处理函数代码添加按钮的消息处理函数代码void CScoreODBCDlg:OnButtonAdd()RefreshData();/各字符串编辑框置空,数字编辑框置为0VC+程序设计实用教程铁道出版社2008.9RefreshData()RefreshData()id CSODBCDlR fhD t()void CScoreODBCDlg

50、:RefreshData()m st id m_stuid=;m_stuname=;m stuclass;m_stuclass=;m_usualscore=0;m testscore 0;m_testscore=0;m_totalscore=0;UpdateData(FALSE);UpdateData(FALSE);VC+程序设计实用教程铁道出版社2008.9“保存”按钮的消息处理函数保存按钮的消息处理函数void CScoreODBCDlg:OnButtonUpdate()void CScoreODBCDlg:OnButtonUpdate()/将编辑框中的数据传送给关联变量/定义成绩单记录集

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁