数据库引擎的层次来访问数据库,用户可通过代码来创建和操纵数据库;OLE DB是一套COM接口,它为应用程序提供一个统一的接口以访问存储在不同信息资源中的数据。它是一种底层接口技术,仍需编制大量代码;ADO技术是一种基于OLE DB的访问接口,它是在OLEDB API基础上提供一种面向对象的与语言无关的接口,它属于高层接口。ODBC技术为用户提供了一个访问关系数据库的标准接口,它可以通过MFC或API使用应用程序独立于源数据库管理系统,它建立一组高层应用程序调用接口和一套基于动态链接库的运行环境,我们可以用这样一组接口规范开发应用程序,而使用标准函数和结构化查询语言(SQL)对数据库进行操作。目前,几乎所有关系数据库都提供了可用于ODBC的驱动程序。正是因为ODBC让应用程序的开发者避免了与数据源相连的复杂性,所以ODBC技术的应用非常广泛,基本上都可用于所有的关系型数据库。此外,还具有易于使用,功能强、高速、低内存开销的特点。
4.3.2 创建ODBC对象模型 (1)ODBC的体系结构原理。
ODBC的体系结构由应用程序、ODBC接口、驱动程序管理器、驱动程序和数据源组成,如图4-20所示。应用程序通过ODBC接口访问不同数据源中的数据。它负责执行并调用ODBC接口来提交SQL语句并接收SQL的执行结果,它完成以下任务:请求与数据源链接;发送SQL请求:定义存储区和数据格式;请求结果;终止与数据源的链接等。驱动程序管理器主要为应用程序装入驱动程序,另外还执行以下任务:映射数据源成特定驱动程序的动态链接库;处理初始化调用;提供入口指针;提供ODBC的参数确认和顺序确认。每个驱动程序是一个动态链接库,实现ODBC函数调用与数据源交互。数据源是由用户需要访问的数据以及与之相关的操作系统、DBMS和网络平台组成。每个不同的数据源类型由一个驱动程序支持。
- 26 -
图4-1 ODBC结构图
2)生成ODBC应用框架。
应用VC++的APPWIZARD自动生成一个ODBC应用框架(选定Database view with file support)。在生成的应用程序框架VIEW类中,包含一个指向VIEW类对象的指针m_pSet,目的是在视图表单和记录集之间建立联系,使得记录集中的查询结果可以在视表单中显示出来。使程序与数据源建立联系,使用CDatabase::Open()来进行初始化。具体介绍如下。
1)查询记录
查询记录使用CRecordSet::Open()和CRecordSet::Requery()成员函数。在调用CRecordSet::Open()时,将已经打开的CDatabase对象指针传给CRecordSet对象的m_pDatabase成员变量,使用该数据库对象建立ODBC连接;如果m_pDatabase为空指针,就新建一个CDatabase类对象,并使其与缺省的数据源(GetDefaultConnect()获得)相连,然后进行CRecordSet类对象的初始化。
在查询过程,利用CRecordSet的成员变量m_strfilter(为过滤字符串,存放着SQL语句的WHERE条件串)和m_strSort(为排序字符串,存放着SQL语句中的ORDERBY条件串)来执行条件查询和结果排序。使用参数化查询的步骤如下:
声明变量:CString Pl;float p2;
在结构函数中初始化参数变量:P1=_T(“”);P2=0.Of;m_nParms:=2; 将参变量与对应列绑定;
pFx一>SetFieldType(CFieldExchang::param)
- 27 -
RFX_Text~pfx._T(“Pl”J。Pl); RFX_Single(Pfx,-T(“P2”),P2); 完成以上便可以利用参变量进行条件查询:
m_Pset一>m_strfilter=“TYPE=?AND VOLTAGE”=?;rft_Pset一>Requery(); 参变量的值按绑定的替换查询字串的“?”适配符。如果查询的结果是多条记录,可以用CREcordSet类的函数Move()、MoverNext()、Moveprev()、MoveFirst()、MoveLast()来移动光标。
2)增加记录
增加记录使用ADDNWE()函数,要求数据库必须是允许增加的打开方式m_Pset—>ADDNEW();//在表的末尾增加新记录
rn_Pset一>SetFieldNull(&.(rn_Pset一>rn_type),FALSE); Pset一>m_type一“AAA”;//输入新的字段 m_Pset一>Update();//将新的记录存入数据库中 m_Pset一>Requery();//重建立数据集 3)删除记录
用Delete()函数来删除记录,并在调用 Delete()函数后不需要调用Update()。 m_Pset一>Delete()-if m_Pset一>IsEOF()) m_pset一>MoveNext(); else
m_pSet一>Move Iast(); 4)修改记录
m pSet一>Edit();//修改当前记录 m_pSet一>m_type—SSS;
m_pSet一>Updata();//将修改结果存入数据库中 rn_pSet一>Requery()
4.4 IC卡管理模块设计
4.4.1 模块功能
IC卡管理主要完成IC卡发行,IC卡延期,IC卡挂失,IC卡解挂,IC卡检测功能。操作人员可以通过“IC卡发行”,发行IC卡,将具体的卡和数据库中的用户关联起来。并能设置用户的开放时间,卡的类型,有效通道,以及有效地址等;可以在“IC卡延期”
- 28 -
修改IC卡的有效期;当用户卡丢失时,可以通过“IC卡挂失”把卡号写入黑名单库;也可以通过“IC卡解挂”使写入黑名单的卡在系统中恢复;通过“IC卡检测”检测IC卡的存储内容。
4.4.2 界面设计 (1)创建工程
根据需求和功能分析,为了方便加入其他的模块,我们采用基于对话框的MFC AppWizard[exe]程序。设计思路:主模块的界面和代码编写放在各个分模块之后[16]。
(2)IC卡发卡模块主要控件设置以及功能如表4-1所示。
控件类型 按钮 按钮 按钮 按钮 IDC_BUTTON_OK IDC_BUTTON_QUERY IDC_BUTTON_GOBACK IDC_BUTTON_CHNCEL Caption设为“确定” Caption设为“读卡” Caption设为“返回” Caption设为“取消” 执行操作 读卡 返回到主界面 撤消准备执行的操作 组框 静态文本 静态文本 静态文本 静态 文本 静态 文本 静态 文本 默认 Caption设为“时间段” 盛放说明文字 默认 Caption设为“有效日期” 盛放说明文字 默认 Caption设为“卡类型” 盛放说明文字 默认 Caption设为“卡号” 盛放说明文字 默认 Caption设为“用户姓名” 盛放说明文字 IDC_STATIC 默认 Caption设为空 Caption设为“用户编号” 组织控件 盛放说明文字 表4-1 IDD_DIALOG_ONOK对话框中的主要控件表
ID 属性设置 功能
- 29 -
控件类型 编辑框 编辑框 编辑框 编辑框 IDC_EDIT_PNUMBER IDC_EDIT_NAME IDC_EDIT_CNUMBER IDC_EDIT_DOORAUTHORITY Styles选中Number 默认 Styles选中Number 默认 显示员工编号 显示员工姓名 输入或显示员卡号 输入或显示卡的类型 组合框 IDC_DATETIMEPICKER_OPENTIME 默认 段 输入或显示时ID 属性设置 功能 (3)按表4-1所示添加控件后,双击对话框资源,打开Class Wizard,为IDD_DIALOG_ONOK添加类C Dialog ON OK,按表4-2添加成员变量。
表4-2 CDialogONOK类成员变量表
控件ID IDC_BUTTON_OK IDC_BUTTON_QUERY IDC_BUTTON_GOBACK IDC_BUTTON_CHNCEL IDC_EDIT_PNUMBER IDC_EDIT_PNUMBER IDC_EDIT_NAME IDC_EDIT_CNUMBER IDC_EDIT_DOORAUTHORITY IDC_DATETIMEPICKER_OPENTIME 变量名 m_btnOK m_btnQUERY m_btnGOBACK m_btnCHNCEL m_ctlPNUMBER m_Pnumber m_ctlNAME m_Cnumber m_Doorauthority m_Opentime 数据类型 CButton CButton CButton CButton CEdit int CString int CString COleDateTime 其他模块也可以根据这种思路做出来。
- 30 -
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库基于JAVA的门禁管理系统(含源文件)(8)在线全文阅读。
相关推荐: