




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 彩色电视机故障信息管理系统(客户端)The MIS fo TV applying in failure information学生:全俊林 指导教师:龚迪琛摘 要本文介绍了如何使用Visual C+.0编程制作以彩色电视机故障信息管理系统(客户端部分)为例,实现信息管理的自动化。由此实现了信息的增加、删除、修改、查看等功能,并且进而实现信息的安全管理,使信息的管理更加人性化,规范化。集计算机技术、网络通信技术为一体的信息管理系统。采用先进有效的管理体制,可以改善企业的经营环境、降低经营生产成本,提高企业的竞争力;使得企业的运行数据更加准确、及时、全面、详实,同时对各种信息进一步加工,使企业领
2、导层的决策依据充分,更具科学性,从而提高故障排除效率,提高信息利用率,有助于进一步提高了生产效率,使企业的管理水平跨上新台阶,为企业持续、健康、稳定的发展打下基础。AbstractThe main work of this paper is introduce how to use Visual C+.0programming a Color TV Malfunction-Information In-Common System, achieve the auto-manage of the Malfunction-Information. According these, this syst
3、em achieves the informations function of add、delete、edit and view., it also get the information managed safety, so the management of the information will be more humanity & normalize.Thereby, it can improve the efficiency of the malfunctions elimination, enhance the exploitation of the informati
4、on, and also help improving the efficiency of the produce by a large step. 关键词: 数据库 信息管理 模块化管理 MIS信息管理系统 目录摘 要1目录21.绪论31.1 前言31.2 课题背景 目标 研究方法41.3 主要完成工作及要求52MIS系统设计及功能分析介绍52.1 MIS系统介绍52.2 系统设计及功能分析62.3 功能模块设计73. 数据库设计及ADO访问数据库73.1 数据库设计过程73.2 创建应用程序93.3 数据库操作准备113.4 ADO访问数据库134.功能模块的创建194.1 系统主体窗体的
5、创建194.1.1主菜单的创建194.1.2右键菜单的创建204.1.3工具栏的创建214.1.4数据显示与表格控件的创建224.2 系统用户权限管理模块的创建234.2.1添加用户对话框的创建244.2.2 更改密码对话框的创建264.2.3 删除用户对话框的创建264.2.4 用户登录对话框的创建264.3 信息管理模块的创建274.3.1 添加记录对话框的创建274.3.2 查询记录对话框的创建294.3.3 修改记录对话框的创建304.3.4 查看记录对话框的创建324.4 打印预览模块的创建325. Windows Sockets335.1 规范简介335.2 Bekeley套接口3
6、55.3 Microsoft Windows和针对Windows的扩展355.4 接口网络编程原理365.5 Windows Sockets编程原理386. 远程数据的管理和系统的实现406.1远程数据的管理406.2 程序的编译和系统的实现417. 问题扩展428. 小 结44致 谢45参考文献461.绪论1.1 前言信息化建设对企业来说无疑已经成为企业在现代竞争社会中立足的重要因素。而从中国大陆企业现状来看,大部分企业的信息化建设都是依靠专业化软件公司。毋庸置疑,对于大规模的管理系统,例如CRM(Client Relation Manager),ERP(Enterprise Resourc
7、e Plan)等,使用专业软件公司开发的产品,功能相对齐全,安全级别也相对较高。但对于企业内部小范围内所需的一些小系统而言,如也依靠此种方式,势必会产生无谓的成本流失。鉴于这种形式,借助这次毕业设计的机会,在龚迪琛教师的指导下,经过一段时间的努力,开发出了这套彩色电视机故障信息管理系统(客户端部分)。本系统主要用于对已有故障信息进行更高效的管理,提高信息的利用率,改变了以往烦琐的查找,大大提高了故障的排除速度及正确率,对进一步提高生产及管理效率具有十分重要的意义。1.2 课题背景 目标 研究方法 (1)背景随着中国加入WTO,竞争也越来越惨烈,中国的制造业同样面临者巨大的挑战。科学技术的飞速发
8、展,产品功能要求的日益增多,复杂性增加,寿命期缩短,更新换代速度加快。然而,产品的管理,尤其是机械产品方案的远程管理手段,则显得力不从心,跟不上时代发展的需要。目前,机械产品远程管理已得到了比较广泛和深入的研究,并初见成效,企业中庞大的激烈变化的产品数据仅仅依靠手工方式来管理是很难做到准确性、完整性、及时性和可追溯性的要求的。因此,将企业产品块化的管理创新成果与信息系统的建设结合起来是很好的解决方案。模块化的产品远程管理可以在保持产品较高通用性的同时提供产品的多样化配置和服务,因此,机械产品远程管理方案应该得到进一步的研究和开发。在这里以彩色电视机故障信息管理系统(客户端部分)作为研究对象。(
9、2)目标设计(主要研究内容或创新点)本着提高效率降低成本为出发点,以彩色电视机故障信息管理为具体范例,探讨对企业产品信息管理MIS系统的开发,并增加远程管理功能,使生产工程部的故障处理工作系统化,规范化。(3) 研究方法与技术路线及预期结果本课题为应用型管理系统的开发,尝试增加远程管理功能,采用小型DBMS(数据库管理系统)ACESS,通过TCP/IP协议利用winsockect结合,DAO或者ADO与关系数据的接口实现产品信息的管理,查询,整理等工作。 本部分为客户端部分。1.3 主要完成工作及要求(1)尽量采用生产工程部现有的软硬件环境及齐全的故障信息,从而达到充分利用现有资源,提高系统开
10、发水平和应用效果的目的。(2)系统应符合生工部资料管理规范,符合普通员工操作的规范,达到操作过程中的直观、方便、实用、安全等要求。(3)系统采用Visual C+6.0环境,用ADO(ActiveX Data Objects)数据访问方式,采用Microsoft Access 2003作为数据源,使整个系统易于使用及维护。(4)系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员补充、维护。(5)系统应具备数据维护功能,及时根据数据变化进行添加、删除、修改、查询等操作,并加入拥护权限功能,以及远程管理功能,使系统更加安全适用。2MIS系统设计及功能分析介绍
11、2.1 MIS系统介绍所谓MIS(管理信息系统-Management Information System)系统 ,是一个由人、计算机及其他外围设备等组成的能进行信息的收集、传递、存贮、加工、维护和使用的系统。是一门新兴的科学,其主要任务是最大限度的利用现代计算机及网络通讯技术加强企业的信息管理,通过对企业拥有的人力、物力、财力、设备、技术等资源的调查了解,建立正确的数据,加工处理并编制成各种信息资料及时提供给管理人员,以便进行正确的决策,不断提高企业的管理水平和经济效益。目前,企业的计算机网络已成为企业进行技术改造及提高企业管理水平的重要手段。随着我国与世界信息高速公路的接轨,企业通过计算机
12、网络获得信息必将为企业带来巨大的经济效益和社会效益,企业的办公及管理都将朝着高效、快速、无纸化的方向发展。MIS系统通常用于系统决策,例如,可以利用MIS系统找出目前迫切需要解决的问题,并将信息及时反馈给上层管理人员,使他们了解当前工作发展的进展或不足。换句话说,MIS系统的最终目的是使管理人员及时了解公司现状,把握将来的发展路径。 一个完整的MIS应包括:辅助决策系统(DSS)、工业控制系统(IPC)、办公自动化系统(OA)以及数据库、模型库、方法库、知识库和与上级机关及外界交换信息的接口。其中,特别是办公自动化系统(OA)、与上级机关及外界交换信息等都离不开Intranet的应用。可以这样
13、说,现代企业MIS不能没有Intranet,但Intranet的建立又必须依赖于MIS的体系结构和软硬件环境。传统的MIS系统的核心是CS(Client/Server客户端/服务器)架构,而基于Internet的MIS系统的核心是BS(Browser/Server浏览器/服务器)架构。BS架构比起CS架构有着很大的优越性,传统的MIS系统依赖于专门的操作环境,这意味着操作者的活动空间受到极大限制;而BS架构则不需要专门的操作环境,在任何地方,只要能上网,就能够操作MIS系统,这其中的优劣差别是不言而喻的。基于Internet上的MIS系统是对传统MIS系统概念上的扩展,它不仅可以用于高层决策,
14、而且可以用于进行普通的商务管理。通过用户的具名登录(或匿名登录),以及相应的权限控制,可以实现在远端对系统的浏览、查询、控制和审阅。随着Internet的扩展,现有的公司和学校不再局限于物理的有形的真实的地域,网络本身成为事实上发展的空间。基于Internet上的MIS系统,弥补了传统MIS系统的不足,充分体现了现代网络时代的特点。随着Internet技术的高速发展,因特网必将成为人类新社会的技术基石。基于Internet的MIS系统必将成为网络时代的新一代管理信息系统,前景极为乐观。2.2 系统设计及功能分析通过一个彩电故障信息管理系统,使生产工程部客户端部分的故障处理工作模块化,系统化,规
15、范化,自动化,从而达到提高故障排除效率,提高信息利用率的目的。本系统功能分析是在系统开发总体任务的基础上完成的,本系统需要完成的功能如下:l 故障信息的输入、查询、修改、删除l 故障信息的打印l 系统用户管理,权限管理2.3 功能模块设计在系统功能分析的基础上,考虑Visual C+程序编制的特点,得到图1所示的系统功能模块图。增加新信息信息数据彩电故障信息共享系统 信息变动管理员信息管理修改新信息权限验证打印管理系统管理 删除新信息 查 询信息查询用户权限增加删除修改 图1系统功能模块图 图2数据流程3. 数据库设计及ADO访问数据库3.1 数据库设计过程数据库技术是信息资源管理最有效的手段
16、。数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,有效存储数据,满足用户信息要求和处理要求。数据库设计中需求分析阶段综合各个用户的应用需求(现实世界的需求),在概念设计阶段形成独立于机器特点、独立于各个DBMS产品的概念模式(信息世界模型),用E-R图来描述。在逻辑设计阶段将E-R图转换成具体的数据库产品支持的数据模型如关系模型,形成数据库逻辑模式。然后根据用户处理的要求,安全性的考虑,在基本表的基础上再建立必要的视图(VIEW)形成数据的外模式。在物理设计阶段根据DBMS特点和处理的需要,进行物理存储安排,设计索引,形成数据库内模式。数据结构的好坏将直接影
17、响到系统的效率以及实现的效果。好的数据库结构会减少数据库的存储量、冗余度,数据的完整性和一致性比较高,系统具有较快的响应速度,简化基于数据库的应用程序的实现方法等,一般可将数据库结构设计分为四个阶段,即需求分析、概念结构设计、逻辑结构设计和物理设计。(1)数据库需求分析需求分析的任务是具体了解应用环境,了解与分析用户对数据和数据处理的需求,对应用系统的性能的要求,提出新系统的目标,为第二阶段、第三阶段的设计奠定基础。在仔细研究资料管理过程的基础上,归纳出系统的数据流程图如上图2所示,所有数据均由管理员输入管理。根据图2的数据流程图,可得到所须设计的数据项和数据结构如下:l 故障信息,包括的数据
18、项有显象管、机芯、机壳、器件、技术员、时间、其他、信息名、具体内容等。l 权限验证,包括的数据项有用户名、密码等。由上分析,为此需要有2个数据表分别用来存放故障信息的用户信息。这两个数据表均用Access 2000实现。Access中的设计视图如图3、图4所示,其中数据类型根据具体的数据字段来设置。图3 info1视图图4 login视图(2)数据库概念结构设计概念模型用于信息世界的建模。概念模型不依赖于某一个DBMS支持的数据模型。概念模型可以转换为计算机上某一DBMS支持的特定数据模型。概念结构设计是在需求分析的基础上对所有数据要求按一定方法进行抽象与综合处理,设计出不依赖于某种具体DBM
19、S的满足用户应用需求的信息结构。这种信息结构我们称为概念模型。通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型,可以用E-R图表示,概念模型特点: (1) 具有较强的语义表达能力,能够方便、直接地表达应用中的各种语义知识。 (2) 应简单、清晰、易于用户理解,是用户与数据库设计人员之间进行交流的语言。 最常用的概念结构设计方法有实体分析法、面向对象设计方法、属性综合法和规范化关系方法。我们此处主要讨论实体分析法。这是一种自上而下抽象的方法。这种方法要求根据前面数据的需求分析,确定系统范围,确定实体及其属性,画出系统的实体联系模型(ER图)
20、。在分析需求的基础上,我们得到整个系统的E-R图。3.2 创建应用程序本彩电故障信息共享系统采用Visual C+ 6.0的ADO方法开发。工程创建具体步骤如下:(1) 打开Visual C+后,选择菜单“File/New”中的“Project”选项卡中的“MFC AppWizard exe”,设置工程名字为“CaidianGuzhang”,选择存储位置,单击“OK”。(2) 创建一个单文档应用程序,在Step1中,选择“Single Document”,然后单击“Next”按扭,进入“Step 2 of 6”。(3) 一直单击“Next”按扭,直到进入“Step 6 of 6”。因为为了能使
21、数据更直观,我们采用列表形式,所以需要在本步骤中,选择CCaidianGuzhangView类的Base Class(基类)为ClistView。然后单击“Finish”,最后将出现确认窗口,如图6所示,检查无误后,单击“确定”,即可完成工程创建。图6 确认(4) 为了使程序能支持ADO数据库对象,以使程序能正确的调用数据库,应该在头文件stdafx.h中加入 #import "c:Program FilesCommon FilesSystemadomsado15.dll" rename_namespace("AdoNS") rename("E
22、OF","adoEOF")using namespace AdoNS; 导入ADO库并在主程序入口:BOOL CCaidianGuzhangApp:InitInstance()中加入AfxOleInit();初始化COM环境。ADO类的定义是作为一种资源存储在ADO DLL(msado15.dll)中,在其内部称为类型库。类型库描述了自治接口,以及C使用的COM vtable接口。当使用import指令时,在运行时Visual C需要从ADO DLL中读取这个类型库,并以此创建一组C头文件。ADO库包含三个智能指针:_ConnectionPtr、_CommandP
23、tr和_RecordsetPtr。_ConnectionPtr通常被用来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。_CommandPtr返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。在使用_CommandPtr接口时,可以利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用连接串。 _RecordsetPtr是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定、游标控制等。3.3 数据库操作准备(1) 初始化接口: initialDbConnect(CString mdbn
24、ame)在本系统中通过建立一个数据库类class DatabaseOperate 来实现整个信息系统对数据的操作,下面是对其提供的主要接口的设计:该接口函数的作用是初始化连接数据源。BOOL DatabaseOperate:InitialDbConnect(CString mdbname) m_pConnection.CreateInstance(_uuidof(Connection);/先连接数据库CString strConnect;BSTR bstrSQL;strConnect.Format(_T("Provider = Microsoft.JET.OLEDB.4.0; Dat
25、a ource=%s"),mdbname);bstrSQL = strConnect.AllocSysString();AfxMessageBox(e.ErrorMessage();return false; return true; 该接口的主要功能是连接我们在Access 2003中设计的数据源,CString mdbname变量作为数据库文件mdb的名称,由调用 DatabaseOperate 类的主程序给出。在本设计中是“info1.mdb”(2)执行查询,修改,添加,删除等功能的接口函数的设计BOOL DatabaseOperate:ExecuteSQLEx(CString
26、 strSQL)_variant_t RecordsAffected;/_bstr_t bstrSql(strSQL);try m_pConnection->Execute(bstrSql,&RecordsAffected,adCmdText);catch (_com_error e)AfxMessageBox(e.ErrorMessage();return FALSE; return TRUE; 通过执行一条SQL语句来实现数据库的读写操作,其中m_pConnection是我们在调用InitialDbConnect初始化接口时候创建的连接型智能指针,我们可以通过它来执行SQL语
27、句(3) 获取数据信息接口函数的设计BOOL DatabaseOperate: GetCurrentRecordSet(Recordstruct&result,long Shijiansuoyin,CString tablename)_RecordsetPtr tem_pRecordset;tem_pRecordset.CreateInstance(_uuidof(Recordset);/初始化Recordset指针CString strSql;strSql.Format( _T("select * from %s where sjsy=%d "), tablena
28、me, Shijiansuoyin);BSTR bstrSQL = strSql.AllocSysString(); trytem_pRecordset->Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); catch (_com_error e)/异常处理AfxMessageBox(e.ErrorMessage();if (tem_pRecordset->State) tem_pRecordset->Close();tem_pRecordset.Release()
29、;return FALSE;while(!tem_pRecordset->adoEOF)/遍历所有记录 _variant_t v_xxg,v_jx,v_jk, v_qjv_ xxg = tem_pRecordset->GetCollect(_T("显象管");v_ jx = tem_pRecordset->GetCollect(_T("机芯");v_ jk = tem_pRecordset->GetCollect(_T("机壳");v_ qj = tem_pRecordset->GetCollect(_T
30、("器件");./获取各个字段的信息/将各字段信息赋值给result结构体,此处省略tem_pRecordset->MoveNext();/转到下一条纪录if (tem_pRecordset->State) tem_pRecordset->Close();tem_pRecordset.Release();return TRUE;其中参数Recordstruct&result是对查询结果定义的结构体,与前面我们在数据库中建立的彩电信息的结构一致:typedef struct _Recordstruct CString xxg ;/显象管CString
31、 jx;/机芯CString qj;/器件CString jsy;/技术员CString sj;/时间CString qita;/其他信息CString sj;/信息名CString qita;/具体内容long sjsy;/时间索引Recordstruct,* pRecordstruct;3.4 ADO访问数据库(1) 生成应用程序框架并初始化OLE/COM库环境 创建一个标准的MFC AppWizard(exe)应用程序,然后在使用ADO数据库InitInstance函数中初始化OLE/COM库(因为ADO库是一个COM DLL库)。创建一个标准的MFC AppWizard(exe)应用程
32、序,然后在使用ADO数据库的InitInstance函数中初始化OLE/COM库(因为ADO库是一个COM DLL库)。本例为: BOOL CAdotestDlg:OnInitDialog() :CoInitialize(NULL); /初始化OLE/COM库环境 程序最后要调用 :CoUninitialize();/释放程序占用的COM 资源。另外:m_pRecordset->Close(); 注意!不要多次关闭!m_pConnection->Close();m_pRecordset = NULL;m_pConnection = NULL; (2) 引入ADO库文件 使用ADO前
33、必须在工程的stdafx.h文件最后用直接引入符号import引入ADO库文件,以使编译器能正确编译。ADO类的定义是作为一种资源存储在ADO DLL(msado15.dll)中,在其内部称为类型库。类型库描述了自治接口,以及C使用的COM vtable接口。当使用import指令时,在运行时Visual C需要从ADO DLL中读取这个类型库,并以此创建一组C头文件。这些头文件具有.tli 和.tlh扩展名,读者可以在项目的目录下找到这两个文件。在C程序代码中调用的ADO类要在这些文件中定义。 程序的第三行指示ADO对象不使用名称空间。在有些应用程序中,由于应用程序中的对象与A
34、DO中的对象之间可能会出现命名冲突,所以有必要使用名称空间。如果要使用名称空间,则可把第三行程序修改为: rename_namespace("AdoNS")。第四行代码将ADO中的EOF(文件结束)更名为adoEOF,以避免与定义了自己的EOF的其他库冲突。 (3) 利用智能指针进行数据库操作 在CaboutDlg头文件中定义两个ADO智能指针类实例,并在对话框中加入一个ListCtrl。 class CAdotestDlg : public CDialog _ConnectionPtr m_pConnection; _RecordsetPtr m_pRecordset;
35、ClistCtrl m_List; . ADO库包含三个智能指针:_ConnectionPtr、_CommandPtr和_RecordsetPtr。_ConnectionPtr通常被用来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。_CommandPtr返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。在使用_CommandPtr接口时,可以利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用连接串。_RecordsetPtr是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定、游
36、标控制等。 在使用ADO程序的事件响应中OnButton1加入以下代码: void CAdotestDlg:OnButton1() m_List.ResetContent(); m_pConnection.CreateInstance(_uuidof(Connection); /初始化Connection指针 m_pRecordset.CreateInstance(_uuidof(Recordset);/初始化Recordset指针 try m_pConnection->Open("DSN=ADOTest","","",0);
37、/连接叫作ADOTest的ODBC数据源 /注意:这是连接不需要用户ID或密码的open 函数 / 否则形式为 ->Open("DSN=test;uid=sa;pwd=123;","","",0); / 执行SQL语句得到一个记录集把其指针赋值给m_pRecordset CString strSql="select * from middle" BSTR bstrSQL = strSql.AllocSysString(); m_pRecordset->Open(bstrSQL,(IDispatch*)m
38、_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); /adOpenDynamic:动态 adLockOptimistic乐观封锁法 adCmdText:文本查询语句 while(!m_pRecordset->adoEOF)/遍历所有记录 /取纪录字段值方式之一 _variant_t TheValue; /VARIANT数据类型 TheValue = m_pRecordset->GetCollect("BIG_NAME");/得到字段BIG_NAME的值 if(TheValue.vt!=VT_NULL)
39、m_List.AddString(char*)_bstr_t(TheValue); /将该值加入到列表控件中 /取纪录字段值方式之二 / _bstr_t TheValue1=m_pRecordset->Fields->GetItem("BIG_NAME")->Value; / CString temp=TheValue1.copy(); / m_List.AddString(temp); /数据类型转换 _variant_t vUsername,vBirthday,vID,vOld; TRACE("id:%d,姓名:%s,年龄:%d,生日:%sr
40、n", vID.lVal,(LPCTSTR)(_bstr_t)vUsername,vOld.lVal,(LPCTSTR)(_bstr_t)vBirthday); m_pRecordset->MoveNext();/转到下一条纪录 m_pRecordset->Close(); m_pConnection->Close(); catch (_com_error e)/异常处理 AfxMessageBox(e.ErrorMessage(); m_pRecordset->Close(); /注意!不要多次关闭!否则会出错 m_pConnection->Close
41、(); m_pRecordset = NULL; m_pConnection = NULL; 程序中通过_variant_t和_bstr_t转换COM对象和C类型的数据, _variant_t类封装了OLE自治VARIANT数据类型。在C+中使用_variant_t类要比直接使用VARIANT数据类型容易得多。好,编译后该程序就能运行了,但记住运行前要创建一个叫ADOTest的ODBC数据源。该程序将把表middle中的BIG_NAME字段值显示在列表控件中。(4) 执行SQL命令并取得结果记录集为了取得结果记录集,我们定义一个指向Recordset对象的指针:_RecordsetPtr m_
42、pRecordset;并为其创建Recordset对象的实例: m_pRecordset.CreateInstance("ADODB.Recordset");SQL命令的执行可以采用多种形式,下面我们一进行简单介绍。 1.利用Connection对象的Execute方法执行SQL命令Execute方法的原型如下所示: _RecordsetPtr Connection15:Execute ( _bstr_t CommandText, VARIANT * RecordsAffected,long Options ) 其中CommandText是命令字串,通常是SQL命令。 参数
43、RecordsAffected是操作完成后所影响的行数, 参数Options表示CommandText中内容的类型,Options可以取如下值之一: adCmdText:表明CommandText是文本命令 adCmdTable:表明CommandText是一个表名 adCmdProc:表明CommandText是一个存储过程 adCmdUnknown:未知 Execute执行完后返回一个指向记录集的指针。2.利用Command对象来执行SQL命令 _CommandPtr m_pCommand;m_pCommand.CreateInstance("ADODB.Command"
44、;);_variant_t vNULL;vNULL.vt = VT_ERROR;vNULL.scode = DISP_E_PARAMNOTFOUND;/定义为无参数m_pCommand->ActiveConnection = m_pConnection;/非常关键的一句,将建立的连接赋值给它m_pCommand->CommandText = "SELECT * FROM users"/命令字串m_pRecordset = m_pCommand->Execute(&vNULL,&vNULL,adCmdText);/执行命令,取得记录集。在这段
45、代码中我们只是用Command对象来执行了SELECT查询语句,Command对象在进行存储过程的调用中能真正体现它的作用。3.直接用Recordset对象进行查询取得记录集(5)记录集的遍历、更新 根据我们刚才通过执行SQL命令建立好的users表,它包含四个字段:ID,username,old,birthday以下的代码实现:打开记录集,遍历所有记录,删除第一条记录,添加三条记录,移动光标到第二条记录,更改其年龄,保存到数据库。 _variant_t vUsername,vBirthday,vID,vOld;_RecordsetPtr m_pRecordset;m_pRecordset.C
46、reateInstance("ADODB.Recordset");m_pRecordset->Open("SELECT * FROM users", _variant_t(IDispatch*)m_pConnection,true), adOpenStatic, adLockOptimistic, adCmdText);while(!m_pRecordset->adoEOF) vID = m_pRecordset->GetCollect(_variant_t(long)0);/取得第1列的值,从0开始计数, /你也可以直接给出列的名称,
47、如下一行 vUsername = m_pRecordset->GetCollect("username");/取得username字段的值 vOld = m_pRecordset->GetCollect("old"); vBirthday = m_pRecordset->GetCollect("birthday"); /在DEBUG方式下的OUTPUT窗口输出记录集中的记录 if(vID.vt != VT_NULL && vUsername.vt != VT_NULL && vOld.
48、vt != VT_NULL && vBirthday.vt != VT_NULL) TRACE("id:%d,姓名:%s,年龄:%d,生日:%srn", vID.lVal, (LPCTSTR)(_bstr_t)vUsername, vOld.lVal, (LPCTSTR)(_bstr_t)vBirthday); m_pRecordset->MoveNext();/移到下一条记录m_pRecordset->MoveFirst();/移到首条记录m_pRecordset->Delete(adAffectCurrent);/删除当前记录/添加三条
49、新记录并赋值for(int i=0;i<3;i+) m_pRecordset->AddNew();/添加新记录 m_pRecordset->PutCollect("ID",_variant_t(long)(i+10); m_pRecordset->PutCollect("username",_variant_t("叶利钦"); m_pRecordset->PutCollect("old",_variant_t(long)71); m_pRecordset->PutCollect(
50、"birthday",_variant_t("1930-3-15");m_pRecordset->Move(1,_variant_t(long)adBookmarkFirst);/从第一条记录往下移动一条记录,即移动到第二条记录处m_pRecordset->PutCollect(_variant_t("old"),_variant_t(long)45);/修改其年龄m_pRecordset->Update();/保存到库中 备注:多次查询可把查询过程做成一个函数ExecuteSQL让m_pRecordset获得连接指
51、针m_pConnection查询结果 void ExecuteSQL(_ConnectionPtr m_pConnection, _RecordsetPtr m_pRecordset,CString strSql) /执行Select 语句 BSTR bstrSQL = strSql.AllocSysString(); try m_pRecordset->Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); /adOpenDynamic:动态 adLockOptimistic乐观
52、封锁法 adCmdText:文本查询语句 catch(_com_error error) CString errorMessage; errorMessage.Format("%s",(LPTSTR)error.Description(); AfxMessageBox(errorMessage); /出错处理:3127没有找到目标表3092目标表已经存在例如:catch(const _com_error e) AfxMessageBox(e.Description(); long errorCode=e.WCode(); if(3127=errorCode) AfxMess
53、ageBox("表不存在"); if(3092=errorCode) AfxMessageBox("表已经存在"); return FALSE; 4.功能模块的创建在建立了数据库操作类后,接下来我们就可以开始进行各功能模块的创建。4.1 系统主体窗体的创建在我们按照VC+的AppWizard创建完工程后,为了使主窗口框架更适合整个系统的操作,我们有必要进行修改,重新创建。4.1.1主菜单的创建在WorkSpase中选择ResourseView,然后双击Menu文件夹,再双击IDR_MAINFRAME选项,单击右边窗口中“帮助”旁边的虚线框,在双击或按回车
54、键,就会出现“Menu Item Properties”对话框,在这个对话框中输入菜单项的内容,如图8所示。图8设置一级菜单二级菜单的设置基本上都和图8相同,只是必须设置ID。按照这种方法,最终创建出如表2所示的菜单结构。菜单名称ID文件.打印ID_FILE_PRINT.打印预览ID_FILE_PRINT_PREVIEW.打印设置ID_FILE_PRINT_SETUP.最近文件ID_FILE_MRU_FILE1.退出ID_APP_EXIT查看.工具栏ID_VIEW_TOOLBAR.状态栏ID_VIEW_STATUS_BAR信息管理.查询记录ID_RECORD_SEARCH.添加记录ID_REC
55、ORD_ADD.查看记录ID_RECORD_VIEW.删除记录ID_RECORD_DEL.更改记录ID_RECORD_EDIT权限管理.添加用户ID_USER_ADD.更改密码ID_PASSWARD_EDIT.删除用户ID_USER_DEL帮助表2 菜单结构4.1.2右键菜单的创建为了实现操作的方便、快捷,我们在程序中加入了右键菜单。在VC的主菜单中,按“Project”>“Add to Project”>“Components and Controls Gallery”即可进入“Components and Controls Gallery”对话框,然后再打开Visual C+
56、Components文件,再选择“Pop-up Menu”,单击“insert”,随后在跳出的对话框中选择“CCaidianGuzhangView”,最后单击“OK”。完成后,需要对其进行编辑。单击WorkSpase中的ResourseView,在Menu文件夹中选择CG_IDR_POPUP_MAIN_FRAME,之后边可在右边窗口对其进行编辑。编辑方法与主菜单相同,其中各项的ID分别对应相应的菜单项,对应关系如表3所示。菜单名称ID查看记录ID_RECORD_VIEW添加记录ID_RECORD_ADD删除记录ID_RECORD_DEL更改记录ID_RECORD_EDIT 表3右键菜单对应的菜单项ID4.1.3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 纺织工程师证书考试适应性培训试题及答案
- 药用拉丁语试题及答案
- 高空作业试题及答案解析
- 纺织品设计师证书考试基础材料试题及答案
- 纺织品设计的文化传播与市场反响试题及答案
- 纺织品的设计伦理与可持续性考量试题及答案
- 伐木合同协议书
- 合作协议书和合同协议书
- 长期委托加工合同协议书
- 二手房合同协议书
- 2021年广东深圳中考满分作文《这创意让我激动不已》
- 安装窗户高空作业合同安全责任书
- 小学低年级游戏化学习对数学兴趣激发的研究
- 甲状腺手术甲状旁腺保护
- 2024年初三数学竞赛考试试题
- 2024年医院依法执业培训课件
- DL∕T 1009-2016 水电厂计算机监控系统运行及维护规程
- 阿里巴巴员工纪律制度
- 人教部编版七(下)语文《爱莲说》练习
- 关于菜鸟驿站转让合同范本
- DL-T1342-2014电气接地工程用材料及连接件
评论
0/150
提交评论