资源描述
彩色电视机故障信息管理系统(客户端)
The MIS fo TV applying in failure information
学生:全俊林 指导教师:龚迪琛
摘 要
本文介绍了如何使用Visual C++6.0编程制作以彩色电视机故障信息管理系统(客户端部分)为例,实现信息管理的自动化。由此实现了信息的增长、删除、修改、查看等功能,并且进而实现信息的安全管理,使信息的管理更加人性化,规范化。集计算机技术、网络通信技术为一体的信息管理系统。采用先进有效的管理体制,可以改善公司的经营环境、减少经营生产成本,提高公司的竞争力;使得公司的运营数据更加准确、及时、全面、详实,同时对各种信息进一步加工,使公司领导层的决策依据充足,更具科学性,从而提高故障排除效率,提高信息运用率,有助于进一步提高了生产效率,使公司的管理水平跨上新台阶,为公司连续、健康、稳定的发展打下基础。
Abstract
The main work of this paper is introduce how to use Visual C++6.0 programming a Color TV Malfunction-Information In-Common System, achieve the auto-manage of the Malfunction-Information. According these, this system achieves the information’s 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 malfunction’s elimination, enhance the exploitation of the information, and also help improving the efficiency of the produce by a large step.
关键词: 数据库 信息管理 模块化管理 MIS信息管理系统
目录
摘 要 1
目录 2
1.绪论 3
1.1 前言 3
1.2 课题背景 目的 研究方法 4
1.3 重要完毕工作及规定 5
2.MIS系统设计及功能分析介绍 5
2.1 MIS系统介绍 5
2.2 系统设计及功能分析 6
2.3 功能模块设计 7
3. 数据库设计及ADO访问数据库 7
3.1 数据库设计过程 7
3.2 创建应用程序 9
3.3 数据库操作准备 11
3.4 ADO访问数据库 13
4.功能模块的创建 19
4.1 系统主体窗体的创建 19
4.1.1主菜单的创建 19
4.1.2右键菜单的创建 20
4.1.3工具栏的创建 21
4.1.4数据显示与表格控件的创建 22
4.2 系统用户权限管理模块的创建 23
4.2.1添加用户对话框的创建 24
4.2.2 更改密码对话框的创建 26
4.2.3 删除用户对话框的创建 26
4.2.4 用户登录对话框的创建 26
4.3 信息管理模块的创建 27
4.3.1 添加记录对话框的创建 27
4.3.2 查询记录对话框的创建 29
4.3.3 修改记录对话框的创建 30
4.3.4 查看记录对话框的创建 32
4.4 打印预览模块的创建 32
5. Windows Sockets 33
5.1 规范简介 33
5.2 Bekeley套接口 35
5.3 Microsoft Windows和针对Windows的扩展 35
5.4 接口网络编程原理 36
5.5 Windows Sockets编程原理 38
6. 远程数据的管理和系统的实现 40
6.1远程数据的管理 40
6.2 程序的编译和系统的实现 41
7. 问题扩展 42
8. 小 结 44
致 谢 45
参考文献 46
1.绪论
1.1 前言
信息化建设对公司来说无疑已经成为公司在现代竞争社会中立足的重要因素。而从中国大陆公司现状来看,大部分公司的信息化建设都是依靠专业化软件公司。毋庸置疑,对于大规模的管理系统,例如CRM(Client Relation Manager),ERP(Enterprise Resource Plan)等,使用专业软件公司开发的产品,功能相对齐全,安全级别也相对较高。但对于公司内部小范围内所需的一些小系统而言,如也依靠此种方式,势必会产生无谓的成本流失。鉴于这种形式,借助这次毕业设计的机会,在龚迪琛教师的指导下,通过一段时间的努力,开发出了这套彩色电视机故障信息管理系统(客户端部分)。本系统重要用于对已有故障信息进行更高效的管理,提高信息的运用率,改变了以往烦琐的查找,大大提高了故障的排除速度及对的率,对进一步提高生产及管理效率具有十分重要的意义。
1.2 课题背景 目的 研究方法
(1)背景
随着中国加入WTO,竞争也越来越惨烈,中国的制造业同样面临者巨大的挑战。科学技术的飞速发展,产品功能规定的日益增多,复杂性增长,寿命期缩短,更新换代速度加快。然而,产品的管理,特别是机械产品方案的远程管理手段,则显得力不从心,跟不上时代发展的需要。目前,机械产品远程管理已得到了比较广泛和进一步的研究,并初见成效,公司中庞大的剧烈变化的产品数据仅仅依靠手工方式来管理是很难做到准确性、完整性、及时性和可追溯性的规定的。因此,将公司产品块化的管理创新成果与信息系统的建设结合起来是很好的解决方案。模块化的产品远程管理可以在保持产品较高通用性的同时提供产品的多样化配置和服务,因此,机械产品远程管理方案应当得到进一步的研究和开发。在这里以彩色电视机故障信息管理系统(客户端部分)作为研究对象。
(2)目的设计(重要研究内容或创新点)
本着提高效率减少成本为出发点,以彩色电视机故障信息管理为具体范例,探讨对公司产品信息管理MIS系统的开发,并增长远程管理功能,使生产工程部的故障解决工作系统化,规范化。
(3) 研究方法与技术路线及预期结果
本课题为应用型管理系统的开发,尝试增长远程管理功能,采用小型DBMS(数据库管理系统)ACESS,通过TCP/IP协议运用winsockect结合,DAO或者ADO与关系数据的接口实现产品信息的管理,查询,整理等工作。 本部分为客户端部分。
1.3 重要完毕工作及规定
(1)尽量采用生产工程部现有的软硬件环境及齐全的故障信息,从而达成充足运用现有资源,提高系统开发水平和应用效果的目的。
(2)系统应符合生工部资料管理规范,符合普通员工操作的规范,达成操作过程中的直观、方便、实用、安全等规定。
(3)系统采用Visual C++6.0环境,用ADO(ActiveX Data Objects)数据访问方式,采用Microsoft Access 2023作为数据源,使整个系统易于使用及维护。
(4)系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员补充、维护。
(5)系统应具有数据维护功能,及时根据数据变化进行添加、删除、修改、查询等操作,并加入拥护权限功能,以及远程管理功能,使系统更加安全合用。
2.MIS系统设计及功能分析介绍
2.1 MIS系统介绍
所谓MIS(管理信息系统--Management Information System)系统 ,是一个由人、计算机及其他外围设备等组成的能进行信息的收集、传递、存贮、加工、维护和使用的系统。是一门新兴的科学,其重要任务是最大限度的运用现代计算机及网络通讯技术加强公司的信息管理,通过对公司拥有的人力、物力、财力、设备、技术等资源的调查了解,建立对的的数据,加工解决并编制成各种信息资料及时提供应管理人员,以便进行对的的决策,不断提高公司的管理水平和经济效益。目前,公司的计算机网络已成为公司进行技术改造及提高公司管理水平的重要手段。随着我国与世界信息高速公路的接轨,公司通过计算机网络获得信息必将为公司带来巨大的经济效益和社会效益,公司的办公及管理都将朝着高效、快速、无纸化的方向发展。MIS系统通常用于系统决策,例如,可以运用MIS系统找出目前迫切需要解决的问题,并将信息及时反馈给上层管理人员,使他们了解当前工作发展的进展或局限性。换句话说,MIS系统的最终目的是使管理人员及时了解公司现状,把握将来的发展途径。
一个完整的MIS应涉及:辅助决策系统(DSS)、工业控制系统(IPC)、办公自动化系统(OA)以及数据库、模型库、方法库、知识库和与上级机关及外界互换信息的接口。其中,特别是办公自动化系统(OA)、与上级机关及外界互换信息等都离不开Intranet的应用。可以这样说,现代公司MIS不能没有Intranet,但Intranet的建立又必须依赖于MIS的体系结构和软硬件环境。
传统的MIS系统的核心是CS(Client/Server——客户端/服务器)架构,而基于Internet的MIS系统的核心是BS(Browser/Server——浏览器/服务器)架构。BS架构比起CS架构有着很大的优越性,传统的MIS系统依赖于专门的操作环境,这意味着操作者的活动空间受到极大限制;而BS架构则不需要专门的操作环境,在任何地方,只要能上网,就可以操作MIS系统,这其中的优劣差别是不言而喻的。
基于Internet上的MIS系统是对传统MIS系统概念上的扩展,它不仅可以用于高层决策,并且可以用于进行普通的商务管理。通过用户的具名登录(或匿名登录),以及相应的权限控制,可以实现在远端对系统的浏览、查询、控制和审阅。随着Internet的扩展,现有的公司和学校不再局限于物理的有形的真实的地区,网络自身成为事实上发展的空间。基于Internet上的MIS系统,填补了传统MIS系统的局限性,充足体现了现代网络时代的特点。随着Internet技术的高速发展,因特网必将成为人类新社会的技术基石。基于Internet的MIS系统必将成为网络时代的新一代管理信息系统,前景极为乐观。
2.2 系统设计及功能分析
通过一个彩电故障信息管理系统,使生产工程部客户端部分的故障解决工作模块化,系统化,规范化,自动化,从而达成提高故障排除效率,提高信息运用率的目的。本系统功能分析是在系统开发总体任务的基础上完毕的,本系统需要完毕的功能如下:
l 故障信息的输入、查询、修改、删除
l 故障信息的打印
l 系统用户管理,权限管理
2.3 功能模块设计
在系统功能分析的基础上,考虑Visual C++程序编制的特点,得到图1所示的系统功能模块图。
增长新信息
信息数据
彩电故障信息共享系统
信息变动
管理员
信息管理
修改新信息
权限验证
打印管理
系统管理
删除新信息
查 询
信息查询
用户
权限
增长
删除
修改
图1 系统功能模块图 图2 数据流程
3. 数据库设计及ADO访问数据库
3.1 数据库设计过程
数据库技术是信息资源管理最有效的手段。数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,有效存储数据,满足用户信息规定和解决规定。数据库设计中需求分析阶段综合各个用户的应用需求(现实世界的需求),在概念设计阶段形成独立于机器特点、独立于各个DBMS产品的概念模式(信息世界模型),用E-R图来描述。在逻辑设计阶段将E-R图转换成具体的数据库产品支持的数据模型如关系模型,形成数据库逻辑模式。然后根据用户解决的规定,安全性的考虑,在基本表的基础上再建立必要的视图(VIEW)形成数据的外模式。在物理设计阶段根据DBMS特点和解决的需要,进行物理存储安排,设计索引,形成数据库内模式。数据结构的好坏将直接影响到系统的效率以及实现的效果。好的数据库结构会减少数据库的存储量、冗余度,数据的完整性和一致性比较高,系统具有较快的响应速度,简化基于数据库的应用程序的实现方法等,一般可将数据库结构设计分为四个阶段,即需求分析、概念结构设计、逻辑结构设计和物理设计。
(1)数据库需求分析
需求分析的任务是具体了解应用环境,了解与分析用户对数据和数据解决的需求,相应用系统的性能的规定,提出新系统的目的,为第二阶段、第三阶段的设计奠定基础。在仔细研究资料管理过程的基础上,归纳出系统的数据流程图如上图2所示,所有数据均由管理员输入管理。
根据图2的数据流程图,可得到所须设计的数据项和数据结构如下:
l 故障信息,涉及的数据项有显象管、机芯、机壳、器件、技术员、时间、其他、信息名、具体内容等。
l 权限验证,涉及的数据项有用户名、密码等。
由上分析,为此需要有2个数据表分别用来存放故障信息的用户信息。这两个数据表均用Access 2023实现。Access中的设计视图如图3、图4所示,其中数据类型根据具体的数据字段来设立。
图3 info1视图
图4 login视图
(2)数据库概念结构设计
概念模型用于信息世界的建模。概念模型不依赖于某一个DBMS支持的数据模型。概念模型可以转换为计算机上某一DBMS支持的特定数据模型。概念结构设计是在需求分析的基础上对所有数据规定按一定方法进行抽象与综合解决,设计出不依赖于某种具体DBMS的满足用户应用需求的信息结构。这种信息结构我们称为概念模型。通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型,可以用E-R图表达,概念模型特点:
(1) 具有较强的语义表达能力,可以方便、直接地表达应用中的各种语义知识。
(2) 应简朴、清楚、易于用户理解,是用户与数据库设计人员之间进行交流的语言。
最常用的概念结构设计方法有实体分析法、面向对象设计方法、属性综合法和规范化关系方法。我们此处重要讨论实体分析法。这是一种自上而下抽象的方法。这种方法规定根据前面数据的需求分析,拟定系统范围,拟定实体及其属性,画出系统的实体联系模型(E-R图)。在分析需求的基础上,我们得到整个系统的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”。由于为了能使数据更直观,我们采用列表形式,所以需要在本环节中,选择CCaidianGuzhangView类的Base Class(基类)为ClistView。然后单击“Finish”,最后将出现确认窗口,如图6所示,检查无误后,单击“拟定”,即可完毕工程创建。
图6 确认
(4) 为了使程序能支持ADO数据库对象,以使程序能对的的调用数据库,应当在头文献stdafx.h中加入
#import "c:\Program Files\Common Files\System\ado\msado15.dll"\
rename_namespace("AdoNS")\
rename("EOF","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、_CommandPtr和_RecordsetPtr。
_ConnectionPtr通常被用来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。
_CommandPtr返回一个记录集。它提供了一种简朴的方法来执行返回记录集的存储过程和SQL语句。在使用_CommandPtr接口时,可以运用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用连接串。
_RecordsetPtr是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定、游标控制等。
3.3 数据库操作准备
(1) 初始化接口: initialDbConnect(CString mdbname)
在本系统中通过建立一个数据库类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;
Data ource=%s"),mdbname);
bstrSQL = strConnect.AllocSysString();
……………
AfxMessageBox(e.ErrorMessage());
return false; }
return true; }
该接口的重要功能是连接我们在Access 2023中设计的数据源,CString mdbname变量作为数据库文献mdb的名称,由调用 DatabaseOperate 类的主程序给出。在本设计中是“info1.mdb”
(2)执行查询,修改,添加,删除等功能的接口函数的设计
BOOL DatabaseOperate::ExecuteSQLEx(CString 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语句
(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 "), tablename, Shijiansuoyin);
BSTR bstrSQL = strSql.AllocSysString();
try
{ tem_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();
}
return FALSE;
}
while(!tem_pRecordset->adoEOF)//遍历所有记录
{ _variant_t v_xxg,v_jx,v_jk, v_qj
v_ xxg = tem_pRecordset->GetCollect(_T("显象管"));
v_ jx = tem_pRecordset->GetCollect(_T("机芯"));
v_ jk = tem_pRecordset->GetCollect(_T("机壳"));
v_ qj = tem_pRecordset->GetCollect(_T("器件"));
…………………………..
//获取各个字段的信息
//将各字段信息赋值给result结构体,此处省略
tem_pRecordset->MoveNext();//转到下一条纪录
}
if (tem_pRecordset->State) {
tem_pRecordset->Close();
tem_pRecordset.Release();
}
return TRUE;
}
其中参数Recordstruct&result是对查询结果定义的结构体,与前面我们在数据库中建立的彩电信息的结构一致:
typedef struct _Recordstruct
{
CString xxg ;//显象管
CString 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)应用程序,然后在使用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前必须在工程的stdafx.h文献最后用直接引入符号#import引入ADO库文献,以使编译器能对的编译。ADO类的定义是作为一种资源存储在ADO DLL(msado15.dll)中,在其内部称为类型库。类型库描述了自治接口,以及C++使用的COM vtable接口。当使用#import指令时,在运营时Visual C++需要从ADO DLL中读取这个类型库,并以此创建一组C++头文献。这些头文献具有.tli 和.tlh扩展名,读者可以在项目的目录下找到这两个文献。在C++程序代码中调用的ADO类要在这些文献中定义。
程序的第三行指示ADO对象不使用名称空间。在有些应用程序中,由于应用程序中的对象与ADO中的对象之间也许会出现命名冲突,所以有必要使用名称空间。假如要使用名称空间,则可把第三行程序修改为: rename_namespace("AdoNS")。第四行代码将ADO中的EOF(文献结束)更名为adoEOF,以避免与定义了自己的EOF的其他库冲突。
(3) 运用智能指针进行数据库操作
在CaboutDlg头文献中定义两个ADO智能指针类实例,并在对话框中加入一个ListCtrl。
class CAdotestDlg : public CDialog
{ _ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;
ClistCtrl m_List;
......
}
ADO库包含三个智能指针:_ConnectionPtr、_CommandPtr和_RecordsetPtr。
_ConnectionPtr通常被用来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。
_CommandPtr返回一个记录集。它提供了一种简朴的方法来执行返回记录集的存储过程和SQL语句。在使用_CommandPtr接口时,可以运用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用连接串。 _RecordsetPtr是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定、游标控制等。
在使用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); //连接叫作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_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)
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,生日:%s\r\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();
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_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命令。
参数RecordsAffected是操作完毕后所影响的行数,
参数Options表达CommandText中内容的类型,Options可以取如下值之一:
adCmdText:表白CommandText是文本命令
adCmdTable:表白CommandText是一个表名
adCmdProc:表白CommandText是一个存储过程
adCmdUnknown:未知
Execute执行完后返回一个指向记录集的指针。
2.运用Command对象来执行SQL命令
_CommandPtr m_pCommand;
m_pCommand.CreateInstance("ADODB.Command");
_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);///执行命令,取得记录集。
在这段代码中我们只是用Command对象来执行了SELECT查询语句,Command对象在进行存储过程的调用中能真正体现它的作用。
3.直接用Recordset对象进行查询取得记录集
(5)记录集的遍历、更新
根据我们刚才通过执行SQL命令建立好的users表,它包含四个字段:ID,username,old,birthday
以下的代码实现:打开记录集,遍历所有记录,删除第一条记录,添加三条记录,移动光标到第二条记录,
更改其年龄,保存到数据库。
_variant_t vUsername,vBirthday,vID,vOld;
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance("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开始计数,
///你也可以直接给出列的名称,如下一行
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 && vOl
展开阅读全文