版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、VC+ + SQL Server 信息管理系统开发1.VC+ 基础为了开发出具有漂亮人机界面的信息管理系统推荐用MFC编程。MFC是Microsoft Foundation Class Library的缩写,即软基本类库。它是VC+的重要组成部分内。MFC 提供了大量的类,把Windows API函数封装在类中。使用MFC可以很方便的开发Windows应用程序,而不必为如何绘制Windows窗口、对话框和菜单等常见用户界面发愁,因为他们都包含在MFC中。1.1 开发基于对话框的应用程序基于对话框的应用程序是比较简单的一种Windows应用程序,它的主界面就是一个Windows对话框,实现起来比
2、较容易。(实例11.1.1创建工程VC+支持很多不同类型的工程,开发Windows应用程序,通常选用“MFC App Wizard(exe”,利用MFC应用程序向导生成一个可执行的应用程序。输入工程名并设置工程的路径,单击“ok”按钮,打开MFC应用程序向导。这里要求用户选择应用程序类型。在这里可以创建三种类型的应用程序:当文档应用程序、多文档应用程序和基于对话框的应用程序。选择“基于对话框的应用程序”,单击“下一步”按钮,打开设置应用程序属性窗口。在应用程序属性窗口可以设置应用程序是否包括关于对话框、帮助文档、和三维显示界面,以及是否包括ActiveX控件和网络编程支持等选项,并且可以修改对
3、话框标题。以后的界面一路“下一步”即可。1.1.2工作区窗口在工作界面中,左侧的窗口为工作区窗口,用来管理工程中的类、资源和文件等信息。“Class View”标签:可以查看工程中类的信息。“Resource View”标签:可以查看到对话框、图标、字符串表和版本信息等。“File View”标签:可以查看工程中的文件信息。1.1.3一个简单的工程(实例1 “确定”和“取消”按钮时系统的默认按钮,无需编写代码就可以实现相应的功能。2.VC+ 数据库编程我们使用VC+作为前台开发工具,用SQL Server 2000作为后台数据库,开发一个客户机/服务器(Client/Server,缩写为C/S
4、类型的应用程序。2.1 数据库访问控件使用控件访问数据库是一种比较简单的访问数据库的方法,因为控件中已经完成了访问数据库的功能,而且有比较好的用户界面,只要简单配置就可以使用。在使用VC+开发数据库应用程序的的时候,会经常使用数据库访问程序控件。常用的数据库访问控件包括:ADO Data 控件;Data List控件/Data Combo控件;Data Grid控件。2.1.1 ADO Data 控件ADO Data 控件是使用ADO技术访问数据库的具体实现,特点:可以使用ADO Data 控件快速地创建一个到数据库的连接;ADO Data 控件使用Recordset对象提供对存储在数据库访问
5、的数据的访问,并允许从一个记录移动到另一个记录,显示和操纵记录数据;ADO Data 控件可以执行大部分数据库访问操作,但是它并不能够显示骨据库中的内容。ADO Data 控件通常需要与其它控件组合使用。这些与ADO Data 控件结合使用的控件,可以称之为“数据觉察控件”。常用的数据觉察控件包括DataList 控件、DataCombo控件和DataGrid控件等。当ADO Data 控件中当前记录发生变化时,数据觉察控件的内容也会随之发生变化。在默认情况下,ADO Data 控件不出现在VC+的控件工具栏中,需要用户手动将其添加到工程中。可以使用下面的方法将ADO Data 控件添加到工程
6、中。实例2ADO Data 控件的常用属性:BOF:如果使用当前记录位于Recordset对象的前一个记录之前,则BOF等于true,否则BOF等于false。ConnectionString:制定连接数字符串,用于建立到数据库源的连接。ConnectionTimeout:制定连接数据库的等待时间,如果超出此时间还没有连接到数据库,则产生一个错误。EOF:如果当前记录位于Recordset对象的前一个记录之后,则EOF等于true,否则EOF等于false。MaxRecords:返回Recordset对象中记录的数量。Mode:指定对数据源的访问权限。AdModeUnknown是默认值,表明权
7、限尚未设置或无法确定;AdModeRead表明权限为只读;AdModeWrite表明权限为只写; AdModeReadWrite表明权限为读/写;AdModeShareDenyRead防止其他用户使用读权限打开连接;AdModeShareDenyWrite防止其他用户使用写权限打开连接; AdModeShareExclusive防止其他用户打开连接;AdModeShareDenyNone防止其他用户使用任何权限打开连接。Password:设置连接到数据源时指定用户的口令。RecordSource:设置一个数据记录源,可以使表、视图或SELECT语句等。查询结果保存在Recordset属性中。U
8、serName:设置连接到数据源的用户。命令类型:1-adCmdText表示形成记录集的是SQL命令2-adCmdTable表示记录集由表构成4-adCmdStoredProc由存储过程生成记录集8-adCmdUnknown未知命令类型2.1.2 DataGrid 控件DataGrid 控件以表格的形式显示结果集中的数据,它需要ADO Data控件提供数据源。在默认情况下,DataGrid 控件也没有出现在VC+的控件工具栏中。可以参照刚才添加ADO Data控件的方法把它添加到工程中。实例3可以看到,表Employees中的数据已经显示在Data Grid控件中。但是数据的显示并不完美,比如
9、没有设置表中各列的宽度,有些列(如Emp_id虽然是表中的主键,但是对于用户输出而言没有什么实际意义,可以考虑将其隐藏起来。下面我们探讨一下如何把控件输出的数据变得美观一些。实例4打开Ado Data控件的属性窗口,单击“记录源”选项卡,在“命令类型”组合框中选择“1-adCmdText”,在“命令文本(SQL”编辑框中输入:SELECT * FROM Employees打开ClassWizard窗口,将ADO Data和Data Grid控件连接到成员变量。设置在对话框IDD_ADODATA_DIALOG初始化时设置SELECT语句,约定表格中显示的内容。添加成员函数CADODataDlg:
10、OnInitDialog(,此函数在装载对话框时将被调用。函数代码如下: SELECT语句。Refresh( 函数的功能是刷新结果集的内容,每次设置数据源后,都需要调用此函数刷新显示。下面介绍如何在程序中设置Data Grid控件中各列的宽度。为了设置列宽,需要使用类CColumn和类CColumns,需要在ADODataDlg.cpp中添加如下代码: 使用CDataGrid:GetColumns(函数可以返回相应的CColumns对象;能够使CColumns:GetItem(const VARIANT&Index函数可以返回指定列(通过参数Index对应的CColumn对象。_var
11、iant_t类是在COMDEF.H中定义的,为了在程序中使用_variant_t类,需要调用该头文件。程序中使用long(n的方法将整数转换为_variant_t类型的,从而可以在CColumns:GetItem(函数中使用。整个设置列宽的工程就是: 使用CDataGrid对象的GetColumns(函数返回CColumns对象;再使用CColumns对象的GetItem(函数返回CColumn对象,此时已经确定了表格中具体的一列;再使用CColumn:SetWidth( 函数设置列的宽度。2.2使用ADO访问数据库在VC+中可以通过很多方式访问数据库,例如:ActiveX数据对象(ADO、远
12、程数据对象(RDO、数据访问对象(DAO、ODBC直接连接到数据库。其中我个人认为ADO是最新的数据库访问技术,我记得上课的时候贾老师也重点介绍的是这种方法。2.2.1 在VC+中使用ADO在默认情况下,VC+不支持ADO对象。要在程序中使用ADO对象,要使用#import命令将ADO库文件导入到工程中,代码如下: 支持ADO编程的库文件是msado15.dll,它默认保存在:"c:Program FilesCommon FilesSystemado"目录下。参数no_namespace表示不使用ADO 的名字空间。为了避免出现常量名冲突,将EOF改名为adoEOF,将BO
13、F改名为adoBOF。一般情况下工程比较小的时候可以将此代码添加到使用ADO的文件中,为了方便以后使用,专门设计了专门连接数据库类ADOConn,其中包含了连接数据库的代码。下面介绍一下如何创建类ADOConn。实例5新建一个类,类名为:ADOConn,默认的类文件为ADOConn.cpp。打开ADOConn.h文件,其中添加代码将ADO库文件导入到工程中。定义类ADOConn的成员变量和成员函数,代码如下: 在定义类ADOConn时,代码分为两个部分,即定义变量和定义方法。成员变量包括_ConnectionPtr对象和_RecordsetPtr对象,分别用于处理连接数据库和返回查询结果集。成
14、员函数包括:OnInitADOConn(初始化连接数据库;GetRecordSet(_bstr_t bstrSQL(执行SELECT语句,返回结果集,参数bstrSQL 表示要执行的SELECT语句;ExecuteSQL(_bstr_t bstrSQL(执行SELECT语句外其他SQL语句,如使用INSERT语句和UPDATA语句,这些语句不返回结果集;ExitConnect(断开到数据库的连接。打开ADOConn.cpp文件,加入这些成员方法的代码实现。OnInitADOConn(函数的代码如下: :CoInitialize(函数的功能是初始化OLE/COM环境,为访问ADO接口做准备。Cr
15、eateInstance(函数的功能是创建一个Connection对象的实例。Open(函数用于打开到数据源的连接。连接字符串strConnect是_bstr_t类型的,数据源提供者(Provider=SQLOLEDB、数据库服务器(Server=.,.表示本地服务器、数据库名(Database=HrMan、登陆用户名(uid=sa和登陆用户密码(pwd=sa。GetReCordSet( 函数的代码如下: 程序首先判断受否连接到数据库,如果没有连接数据库,则调用OnInitADOConn建立连接;然后调用CreateInstance(函数创建一个_RecordsetPtr对象的实例;最后调用O
16、pen(函数执行SELECT语句,返回结果集到m_pRecordset。ExecuteSQL(函数的代码如下: 如果SQL语句执行成功,则返回true,否则返回false。ExitConnect(函数的功能是关闭OLE/COM库,释放资源。代码如下: 2.2.2 为表创建类实例6基于面向对象的程序设计思想,在工程实现中可以为数据库的每个表创建一个类,类的成员变量对应表的列,类的成员函数时对成员变量和表的操作。下面以为表Employees添加类CEmployees。在Employees.h中添加如下代码: CEmployees的成员函数大致可以分成两类,类用于设置和读取成员变量,令一类用于进行数
17、据库操作。下面具体介绍在Employees.cpp中编辑个成员函数的代码。当创建CEmployees类时VC+自动生成了构造函数和析构函数。构造函数的作用是创建一个CEmployees对象时,对各个成员变量进行初始化,向构造函数中加入代码如下: 因为我们在前面定义的成员变量都是私有类型的,所以需要通过函数读取和设置他的值。这类函数的代码比较简单,不做介绍。函数CEmployees:sql_insert( 的功能是将CEmployees对象中的数据插入到表Employees中具体代码如下: 程序中使用倒ADOConn对象,用于连接数据库和执行INSERT语句。函数的执行过程为:连接到数据库;根据
18、类CEmployees的成员变量设置INSERT语句;调用ExecuteSQL(函数执行INSERT语句;断开与数据库的连接。这里因为成员变量Wage是float类型的,所以需要定义CString类型的变量strWage进行转换。函数 CEmployees:sql_updata( 和函数 CEmployees:sql_delete( 的代 码与函数 CEmployees:sql_insert( 的代码非常相近,不再继续解释. 函数 CEmployees:GetData( 的功能是根据员工编号读取员工的所有信息 到 CEmployees 对象中,代码如下: /根据员工编号读取所有字段值 void
19、 CEmployees:GetData(CString cEmpId /连接数据库 ADOConn m_AdoConn; m_AdoConn.OnInitADOConn(; /设置 SELECT 语句 _bstr_t vSQL; vSQL = "SELECT * FROM Employees WHERE Emp_id=" + cEmpId; /执行 SELETE 语句 _RecordsetPtr m_pRecordset; m_pRecordset = m_AdoConn.GetRecordSet(vSQL; /返回各列的值 if (m_pRecordset->ado
20、EOF = 1 CEmployees(; else Emp_id = atoi(cEmpId; Emp_name = (LPCTSTR(_bstr_tm_pRecordset->GetCollect("Emp_Name" Sex = (LPCTSTR(_bstr_tm_pRecordset->GetCollect("Sex" Title = (LPCTSTR(_bstr_tm_pRecordset->GetCollect("Title" Wage = atof(LPCTSTR(_bstr_tm_pRecordset-
21、>GetCollect("Wage" Dep_id = atoi(LPCTSTR(_bstr_tm_pRecordset->GetCollect("Dep_id" /断开与数据库的连接 m_AdoConn.ExitConnect(; 程序的执行过程于 CEmployees:sql_insert( 也比较相近,只是执行 SQL 语句的函数使用 GetRecordSet 此函数可以返回查询结果集到_RecordsetPtr ( , 对象到 m_pRecordset 中.使用 m_pRecordset->GetCollect( 函数可以从结果
22、 集中读取相应列的值,返回值为_variant_t 类型,使用(LPCTSTR(_bstr_t 可以将其转换为 CString 类型. 2.2.3 数据库工程开发比较完整的实例 实例 7 在前面介绍的基础上,改造了 AdoDlg.cpp 中的 OnInitDialog( ,添加了 一个成员函数 RefreshData(用来设置 ADO Data 控件的数据源和 Data Grid 控件的列宽. 因为在 CDataGrid:GetItem( 函数中需要访问 CColum 类,所以需要在 datagird.cpp 中调用它的头文件. 在这个例子中,增加了编辑员工信息对话框,并为对话框创建了一个类
23、CEditDlg.主要代码分析如下: 在 EditDlg.h 中添加两个成员变量 cEmpId 和 strSex,变量 cEmpId 用来记 录对话框中当前编辑的员工编号.如果是添加员工信息,则 cEmpId 为空.变量 strSex 用于保存当前员工的性别信息,根据它的值设置性别组合框的显示值. CEditDlg:OnInitDialog( 函数,代码如下: BOOL CEditDlg:OnInitDialog( CDialog:OnInitDialog(; / TODO: Add extra initialization here if (strSex = "男" m_
24、Sex.SetCurSel(0; else m_Sex.SetCurSel(1; return TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSE 当对话框 IDD_EDIT_DIALOG 启动时,根据成员变量 strSex 的值设置性别组 合框的显示内容. 当点击"确定"按钮时,程序会把用户输入的数据保存到数据库中,实现 代码如下: void CEditDlg:OnOK( / TODO: Add extra
25、 validation here CEmployees emp; UpdateData(true; /检查数据有效性 if (m_EmpName = "" MessageBox("请输入员工姓名" return; /对 CEmployees 对象赋值 m_Sex.GetLBText(m_Sex.GetCurSel(, strSex; emp.SetEmp_name(m_EmpName; emp.SetSex(strSex; emp.SetTitle(m_Title; emp.SetWage(m_Wage; emp.SetDep_id(1; /根据成员变量
26、 cEmpId 的值,决定是插入数据,还是修改数据 if (cEmpId = "" /插入数据 emp.sql_insert(; else emp.sql_update(cEmpId; CDialog:OnOK(; 当变量 cEmpId 为空时, 表示当前状态为插入记录, 程序将调用 sql_insert( 函数;否则表示修改记录,程序将调用 sql_update( 函数. 对话框 IDD_ADO_DIALOG 中的主要代码: 当单击"添加"按钮时,将执行相应的函数 CAdoDlg:OnAddButton( ,代 码如下: void CAdoDlg:On
27、AddButton( / TODO: Add your control notification handler code here CEditDlg dlg; dlg.cEmpId = "" dlg.strSex = "男" if (dlg.DoModal( = IDOK RefreshData(; 程序定义了一个 CEditDlg 对象 dlg, dlg.cEmpId=""(员工编号为空表示当 前状态为添加数据, 此时使用 dlg.strSex= "男" 如果在 dlg 对话框中单击 . "确 定"按钮,则需要调用 RefreshData(函数刷新表格中的内容. 当单击"修改"按钮时,将执行相应的函数 CAdoDlg:OnModiButton( , 代码如下: void CAdoDl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 混凝土结构内外墙面抹灰施工方案
- 基坑土方工程稳定性评估方案
- 混凝土浇筑前预处理技术方案
- 卷材防水屋面温度变化适应性技术方案
- 土方工程施工中的排水沟建设方案
- 排水管道穿越墙体施工方案
- 供暖管道安装施工现场管理方案
- 肾病降脂药物应用 (课件)
- 枣庄科技职业学院《建筑新能源照明技术》2024-2025学年第二学期期末试卷
- 沧州幼儿师范高等专科学校《量子力学纯英文》2024-2025学年第二学期期末试卷
- 2026春三年级下册第一单元1《古诗三首》 教学教学课件
- 新能源汽车充电桩运营合作合同协议
- 《应急预案编制与演练》全套教学课件
- 人间充质干细胞来源的小细胞外囊泡
- 销售润滑油合同范本
- 黄原胶的课件
- 城镇燃气经营安全重大隐患判定标准试题(有答案)
- 2026年苏州卫生职业技术学院单招职业技能测试必刷测试卷及答案1套
- 湖北省2025年普通高中学业水平合格性考试数学试题及答案
- 复杂山地道路施工方案
- 电脑安全培训资料课件
评论
0/150
提交评论