文档库 最新最全的文档下载
当前位置:文档库 › 温湿度测量系统设计(上位机软件设计)

温湿度测量系统设计(上位机软件设计)

温湿度测量系统设计(上位机软件设计)

摘要

本课题实现方法是上位机通过RS_485总线及规定的通信协议发出的命令发送给下位机,下位机再根据此命令解释成相应时序信号直接控制传感器。下位机不时读取设备状态数据,转换成数字信号反馈给上位机。上位机对接收到的数据经过处理,在上位机上显示和存储与数据库中等。同时上位机对用户进行管理,方便用户对采集到的数据进行查看及对历史数据的查询等。

介绍了温湿度测量系统上位机的软件构成。用Visual C++作为开发平台,采用MFC 类库,利用VC6.0基于对话框的模板,Microsoft Access作为后台开发数据库,并利用MSComm控件完成串口通信设计了一个实时监测上位机软件系统。本文从上位机软件出发,利用面向对象、数据库、串口通信等技术完成系统信息和数据存储、数据和曲线实时显示、历时查询、等功能,实现了上位机系统的监测任务。给出了软件的总体设计方案和各功能模块的设计,说明了该软件的主要功能,并给出了系统的运行界面和应用模式。

关键词:温湿度,数据采集,串口通信,MFC,上位机,MSComm

T emperature and humidity measurement system design

(PC software design)

ABSTRACT

Approach is PC through RS_485 bus and provisions of the communication protocol under orders to send out a machine, lower level computer according to this command to explain again into corresponding timing signal directly control sensor. From lower level computer equipment state data, converted into digital signal feedback to the PC. PC docking receive data processed, in upper machine display and storage and database medium. Meanwhile PC user management, the convenient user for the collected data in view of historical data and the query etc.

Introduced the temperature and humidity measurement system of software constitutes upper machine. Use Visual C + + as a development platform, using MFC libraries, using VC6.0 dialog-based templates, Microsoft Access as a background, and by using the development of database MSComm control design for a complete serial communication real-time monitoring PC software system. This paper, starting from the PC software by using object-oriented, database, serial communication technology complete system information and data storage, data and curve real-time display, lasted inquiry, and other functions, realized the PC system monitoring task. Given the general design of the software solutions and the function module design, shows the software's main function is presented, and the operation of the system interface and application mode.

KEY WORDS: Temperature and humidity,Serial communication,Data acquisition,MFC,PC,MSComm

目录

摘要.................................................................... I ABSTRACT ................................................................ II 1绪论.. (1)

1.1 课题意义及目的 (1)

1.2 课题主要研究的内容 (1)

2 面向过程与面向对象 (2)

2.1 面向过程与面向对象技术 (2)

2.2 面向对象的程序设计 (4)

2.3本章小结 (5)

3系统相关技术介绍 (6)

3.1 Visual C++开发平台 (6)

3.1.1 Windows编程模型 (6)

3.1.2 VC++应用程序创建过程 (7)

3.1.3 VC++集成开发环境介绍 (8)

3.2数据库技术 (9)

3.2.1 VC++6.0开发数据库技术的特点 (9)

3.2.2 SQL语言概述 (10)

3.2.3 ADO数据库访问技术 (12)

3.3 单片机与PC串口通信技术 (17)

3.3.1 数据通信的概念 (17)

3.3.3 串行通信的通信方式 (18)

3.3.4 串行通信的过程及通信协议 (19)

3.4 实时数据显示技术 (20)

3.5 VC++串口通信技术 (20)

3.3.1 事件驱动方式 (21)

3.3.2 查询方式 (21)

3.6 MSComm控件串口编程基本流程 (23)

3.6.1 在当前Project 中插入MSComm控件 (24)

3.6.2 初始化并打开串口 (24)

3.6.3 捕捉串口事项 (25)

3.6.4 串口读写 (25)

3.6.5 关闭串口 (26)

3.7本章小结 (26)

4系统总体设计 (27)

4.1系统功能描述 (27)

4.2系统总体设计 (27)

4.3系统的通信协议 (28)

4.3.1模块接口协议格式 (28)

4.3.2上位机命令帧数据格式 (29)

3.3.3下位机上传数据帧格式 (29)

4.4本章小结 (30)

5上位机软件设计与各模块的实现 (31)

5.1 系统功能模块划分 (31)

5.1.1 用户登录的设计 (31)

5.1.2系统软件程序设计 (34)

5.2 相关数据库的设计 (39)

5.2.1 数据库配置 (39)

5.2.2 使用https://www.wendangku.net/doc/c5962210.html,访问数据库 (39)

5.2.3 VC++到数据库的连接 (40)

5.3 数据库中表的设计 (43)

5.4 本章小结 (43)

6 结束语 (44)

致谢 (45)

参考文献 (46)

1绪论

1.1 课题意义及目的

在工农业生产、日常生活以及科学研究等诸多领域中,温度和湿度是两个很普遍而又非常重要的参数。因此,在这些领域中,对于这两个参数的测量与控制就显得尤为重要,特别是在纺织工业、冶金、化工、食品、温室种植,汽车制造以及气象预报和科研实验室等许多地方,都具有举足轻重的作用。

传感器技术、微控制器技术和计算机技术日渐成熟之后,现代的温湿度测量与控制系统克服了以往系统中存在的一些问题,比如对环境温湿度的控制与调节以及数据的记录都由微控制器或计算机自动完成,且测得的数据也更加的精确,对环境温湿度的调节更具有实时性。

1.2 课题主要研究的内容

木课题以Windows XP为开发平台,以C++为开发语言,以VisualC++6.0作为前台开发环境,Microsoft Access作为后台开发数据库。本文从上位机软件出发,利用面向对象、数据库、串口通信、多线程等技术,设计并实现温湿度测量系统的上位机应用软件。此软件具有温湿度的实时监测、历史记录查看及其数据库管理等功能,高度可视化、全中文界面、具有可扩展性,减少了人为的差错,它与通信模块和下位机等共同构成了温湿度测量系统。

本论文的主要研究内容如下:

(l)学习和掌握C++语言、VC开发平台、数据库技术、串口通信原理及

多线程技术。

(2)分析整个温湿度测量系统的总体框架及其功能特点。

(3)根据用户需求设计出温湿度测量系统的上位机软件,给操作人员提供可视化界面,实现对温湿度的实时监测、历史记录查看及其数据库管理等功能。

(4)对软件进行现场测试,以验证设计的可行性、准确性和优越性。

2 面向过程与面向对象

2.1 面向过程与面向对象技术

传统的软件设计方法是面向过程的,所谓面向过程的程序设计是用结构化编程语句来编写程序。它把一个复杂的程序分解成若干个较小的过程,每个过程都可以单独地设计、修改、调试。其程序流程完全由程序员控制,用户只能按照程序员设计好的程序处理问题。它是一种自顶向下逐步求精的设计方法和单入口单出口的程序结构。面向过程是先分析出解决问题所需要的步骤,然后用函数把这些步骤一一实现,使用的时候按照步骤依次调用。面向过程程序设计涉及到结构分析与结构设计技术,它们在现在的应用中表现出了许多明显的缺点,用这些技术开发出的软件,其稳定性、可修改性和重用性都比较差。

首先,结构分析与结构设计技术的本质是功能的分解,是围绕实现处理功能的过程来构造系统的。结构化方法强调过程抽象,将现实世界映射为数据流和加工,加工之间通过数据流进行通信,数据作为被动的实体被主动的操作所加工,这是以过程为中心来构造系统和设计程序的。然而用户需求的变化大部分是针对加工的,因此这种变化对基于过程的设计来说是不可能实现的,用这利,技术设计出的系统往往是不稳定的,即用户需求的变化往往造成系统的较大变化,从而需要花费很大代价才能实现这种变化。

其次,结构分析与结构设计技术清楚地定义了目标系统的接口。当系统对外界的接口发生变化时,结构分析与结构设计技术很难扩充新的接口,这样的系统较难修改和扩充。

另外,结构化方法从本质上仍是把数据和操作分离,以至在实现阶段,一些具有潜在可重用价值的软件部分和具体应用环境密不可分。这些原因都使得结构分析与结构设计技术开发出的软件可重用性较差。

为了克服传统的设计方法的缺点,逐渐创造出了新的软件开发技术,即面向对象技术。面向对象技术是一个非常实用而且强有力的软件开发方法,它具有许多特色,如符合人们通常的思维方式,高度连续性,重用性好,可维护性强等。面向对象的定义可以是:面向对象=对象+类+继承+通信。一个面向对象的程序的每一成分应是对象,计算都是通过新的对象的建立和对象之间的通信来执行的。

对象是面向对象开发模式的基本成分,是基本运行时的实体,每个对象可以用一组属性和它可以执行的一组操作来定义,就是封装了数据和操作的程序块,反映了面向对象的封装的特征。属性一般只能通过执行对象的操作来改变。操作就是成员函数,也叫方法,描述了对象执行的功能。若通过消息传递,还可以为其它对象使用。从用

户的角度看,对象提供了所需要的行为。

类是一组具有相同数据结构和相同操作的对象的集合,它可以被视为一个具有类似特性与共同行为的对象的模板,用来产生对象。对象就是类的实例,可以使用该类的成员函数,对象的状态包含在它的实例变量中。类的实现可使用能提供它所需要服务的其它类的实例,这些实例应该受到保护不被其它对象存取,包括了同一个类所生成的所有其它实例。把一组对象的共同特性加以抽象并存储在一个类中的能力,是面向对象技术最重要的一点;是否建立了一个丰富的类库是衡量一个面向对象程序语言成熟与否的重要标志。

继承是使用己经存在的定义作为基础建立起新定义的技术,类之间的继承关系是现实世界中遗传关系的直接模拟。封装使程序局部化,易修改、好维护,但许多对象有相同的功能时免不了重复,所以面向对象技术有继承的机制。新类的定义可以是现存类所声明的数据、定义与新类所增加的声明的组合,可以沿用现存类的某些特征。新类复用现存类的定义,而不要求修改现存类。现存类可以看成父类或者基类来引用,新类则相应得作为子类或者派生类引用,可以具有自己独立的属性和操作。使用继承设计一个新类,可以视为描述一个新对象的集合,它是现存类所描述对象集合的一个子集合。继承性是面向对象的最主要特点,是面向过程所不具备的。

对象之间进行通信的一种构造叫做消息。当一个消息发送给某个对象时,包含要求接收对象去执行某些活动的信息。消息在一个对象与另一个对象之间传送,发送给一个对象的消息定义了一个操作和一个参数表,并指定某一个对象。当一个对象接收到发送给自己的消息时,就会调用消息中指定的操作,并且将参数表中的值与形式参数结合起来。接收对象对消息的处理可能会改变对象的状态,即改变接收对象的属性,并发送消息给自己或者另外一个对象。因此,可以把这种消息的传递大致地看成传统的过程方法中的函数调用。接收到消息的对象经过解释,然后予以响应。这种通信机制叫做消息的传递。

对象、类、继承及消息代表了面向对象开发模式,同时面向对象还具有其它的特点,如多态性。多态性技术主要在结构方面提供了灵活性,多态性有静态多态性和动态多态性两种。静态多态性表现为成员函数的重载,发生在一个类的内部而动态多态性表现为函数的重写,则反映在父类和子类之间。

封装、继承、多态是面向对象程序的主要特征。正是这些特征使程序安全、可靠、可重用、易维护、易于修改,减少了复杂性,支持开发人员建立灵活的可扩充的系统。

面向对象相对于面向过程的方法有许多优点:(l)面向对象是把构成问题事物分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为。面向对象是以功能来划分问题,而不是步骤。功能上的统一保证了面向对象设计的可扩展性。(2)面向对象把问题域的概念直接映射到对象以及对象间的接口。而传统的方法忽略了数据和操作之间的内在联系,软件要解决的问题

其实都是相互之间存在一定联系的事物组成的,每个具体的事物都具有行为和属性两方面特征,所以把表示事物静态属性的数据结构和描述事物动态行为的操作放在一起构成的整体才可以完整而自然地表示客观世界中的实体。(3)面向对象技术从分析到设计再到编码用的是一致的模型表示,具有高度连续性。(4)面向对象技术具有的继承性和封装性支持软件复用,易于扩充,能较好地适应复杂的大系统不断发展和变化的要求,要复用类,可以直接创建该类的实例,实现复用,还可以从该类派生出满足新需要的子类。继承性使得派生类不仅可以重复父类的数据结构和方法,而且可以在父类基础上修改和扩充,并且不会影响父类的使用。(5)面向对象技术把属性和方法封装在“对象”中,当外部功能发生变化时,保持对象结构的相对稳定,使改动局限于对象内部。类是独立性很强的模块,向类的实例发送消息就可以运行,并且观察它是否可以正确地完成要求的工作,对类的测试比较容易实现,发现错误也通常集中在类的内部,容易调试和维护。所以,用面向对象技术开发的软件,易于扩展、调试和维护。

2.2 面向对象的程序设计

C++就是典型的面向对象的编程语言,Visual C++就是Windows环境下最主要的应用开发系统之一,它不仅是C++语言的集成开发环境,还与Win32紧密相连,因此,Visual C++可以完成各种应用程序开发,从底层的软件到顶层面向用户的软件。使用Visual C++环境开发应用程序缩短了开发时间,且界面友好,易于操作。

在用Visual C++开发面向对象应用程序时,可以使用Windows提供的Windows API(Application Programming Interface)函数,也可以直接使用Microsoft提供的MFC(Microsoft Foundation Classes)类库。API函数可以实现窗口创建、移动和修改,实现与设备无关的图形操作功能,实现与操作系统有关的多种功能,但是,利用API 函数编程时,大量的代码需要用户自己编写,编程工作量很大。MFC类库则集成了大量已经预先定义好的类,是C十+的类集,该类集以层次结构组织起来,其中封装了大部分Windows API函数和控件,包含的功能涉及到整个Windows操作系统。不仅为用户提供了Windows图形环境下应用程序的框架,而且还提供了创建应用程序的组件。使用MFC类库和Visual C++提供高度可视的应用程序开发工具,使得现在应用程序的开发更简单,并可提高代码的可靠性与可重用性。MFC提供的类库让程序员把精力更多的放在功能拓展上,而不用太在意细节的实现,还允许在编程过程中自定义和扩展应用程序中的类,同时也允许调用Windows API函数,使得应用程序以最小的规模实现最丰富的功能。MFC是C++语言中的一个安全子集,简化了C++开发基于Windows的应用程序的工作,MFC精心设计的类库结构以一种软件包的形式把进行Windows应用开发这一过程所需的各种程序模块有机地组织起来。MFC包含的类分层结构和功能具有可伸缩性,这使得MFC能跟上软件发展的潮流,并且保持了程序的向下兼容性,它还增强了对数据库应用程序的支持,可以使用ODBC类和高性能的

ODBC驱动程序来访问提供ODBC支持的数据库中的数据,还可以通过数据访问对象,通过编程语言来访问和操纵数据库中的数据并管理数据库。目前的MFC包含了一百多个类,不同的类实现不同的功能,它们之间既有区别又有联系,这些类按照层次关系可以分为根类、窗口和控件类、绘图和打印类、应用程序体系结构类、文件和数据库类、Internet和网络工作类、OLE类以及调试和异常类等等。用户可以根据编程的需要调用相应的类,或者自己定义有关的类。

Visual C++6.0为了减轻程序员的工作量,特别增强了应用程序向导的功能。应用程序向导为程序员提供了一个基于MFC的应用程序框架,只要在此基础上添加实现特定功能的代码即可。

2.3本章小结

本章主要介绍了面向过程与面向对象的技术,课题主要研究的内容及论文的整体框架,对论文的整体结构与内容有了一定的了解。

3系统相关技术介绍

3.1 Visual C++开发平台

二十世纪九十年代以来,伴随着计算机硬件技术的高速发展,Windows操作系统风靡全球,形成了操作系统市场的垄断地位。Windows应用软件也蓬勃发展,广泛应用于各个行业,包括教育领域。对于应用软件的开发,微软公司也提供了强大、复杂的开发工具Visual C++(以后简称VC++),借助其生成代码的向导,能快速生成可运行的Windows应用程序的外壳。VC++附带的基本类库,即MFC封装了大部分从前进行开发所用的API函数,己经成为许多C++编译器进行Windows开发的行业标准。

(1)Visual C++介绍

Visual C++有很多版本,本课题用的是VC++6.0。VC++6.0是Microsoft公司推出的一个基于Windows系统平台、可视化的集成开发环境,它的源程序按C++语言的要求编写,并加入了微软提供的功能强大的MFC(Microsoft Foundation Class)类库。MFC 中封装了大部分Windows API函数和Windows控件,它包含的功能涉及到整个Windows操作系统。MFC不仅给用户提供了Windows图形环境下应用程序的框架,而且还提供了创建应用程序的组件,这样,开发人员不必从头设计创建和管理一个标准Windows应用程序所需的程序,而是从一个比较高的起点编程,故节省了大量的时间。另外,它提供了大量的代码,指导用户编程时实现某些技术和功能。因此,使用VC++提供的高度可视化的应用程序开发工具和MFC类库,可使应用程序开发变得简单。

(2)Visual C++的优势

VC++6.0的最大优点就是提供了功能强大的MFC类库,MFC是一个很大的C++类层次结构,其中封装了大量的类及其函数,很多Windows程序所共有的标准内容可以由MFC的类来提供,MFC类为这些内容提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓,这将简化编程工作,大大的减少程序员编写的代码数量,使编程工作变得更加轻松容易。

3.1.1 Windows编程模型

Windows程序启动后,执行特定的任务,其中最重要的是创建应用程序的主窗口,这个主窗口需要自己的代码来处理Windows发送给它的信息,所以Windows程序是通过来自操作系统的消息来处理用户的输入。Windows中的大部分消息是严格定义的,而且适用于所有的程序。例如,当创建一个窗口时,发送一个WM_CREA T消息;当用户按下鼠标左键时,会发送一个WM_LBUTTONDWON消息。Windows还对选定的窗口发送WM_COMMAND消息,以响应用户菜单的选择、对话框按钮的单击等操

作,用户也可以定义自己的消息,并且能够由程序发送到桌面的任何窗口,接收响应。

Windows引入了一个名为图形设备接口(GDI)的抽象层。其中包含了一个重要的概念设备环境(DC),它其实是一个对窗口的绘图属性保持跟踪的数据结构。Windows 提供视频和打印机驱动程序。当应用程序进行显示或打印任务时,就把设备环境映射到具体物理设备上,所以自己的应用程序不必知道系统连接的显卡和打印机的类型,不必进行硬件寻址,而只是调用GDI函数,发出适当的输入/输出指令即可。

在进行Windows编程时,可以使用大量已经建立的格式在资源文件中存储数据。链接程序把二进制资源文件与C++编译程序的输出组合起来,生成一个可执行文件。资源文件可以包括位图、图标、菜单定义、对话框布局和字符串等等。一般情况下,使用所见即所得工具来编辑资源。例如,在布置一个对话框时,可以使用资源和可编辑框来选择需要在对话框中放置的元素(按钮、列表框等),并且用鼠标来确定元素的位置和大小。

3.1.2 VC++应用程序创建过程

VC++开发工具包含了两个完整的Windows应用程序开发系统。一个是只使用Win32API函数开发C++语言的Windows程序;另一个是在MFC类库应用程序框架范围内的C++编程。使用MFC类库编程接口也可以直接调用一些Win32函数。本课题采用了第二种方法进行应用程序的开发。如无特殊说明,一般指基于MFC类库的开发。图3-1概括了VC++应用程序创建过程。

图3-1

3.1.3 VC++集成开发环境介绍

VC十+被称为可视化集成开发环境是由于在VC++中能够执行如下的功能:

第一,生成不用编写代码的起始应用程序;

第二,通过许多不同方法查看项目文件;

第三,编辑源文件和包含文件;

第四,建立应用程序的可视界面(菜单和对话框);

第五,编译和链接;

第六,运行时调试应用程序。

下面介绍几个VC++中的常用组件:

(l)应用程序向导(Appwizard)。Appwizard是一个标准的C++源代码生成器。它通过一系列的对话框来提示用户输入所需创建的程序的信息。然后APPWizard生成一些文件,这些文件构成程序的框架。由APPwizard生成的程序是一个基本的Windows

程序,它生成的是基本代码,用户应在此基础上完善自己内容。

(2)类向导(Classwizard)。Classwizard是一个交互式工具,主要进行类代码的维护。用来建立新的类,定制类,把消息映射为类成员函数,或者把控制框映射为类变量成员。在开发程序时,可用Classwizard建立程序所需要的类,包括消息处理和消息映射例程(用于定位处理消息的代码)。

(3)资源视图(ResourceView)。ResourceView包含了项目中所有的层次列表,用于编辑和管理应用程序中用到的各种可视元素,包括快捷键、对话框、图标、菜单、字符串、工具栏等。

(4)类视图(ClassView)。ClassView用于显示项目中所有的类信息,主要是定制现有的类和建立新的类,并在每个类中,显示了成员函数和成员变量,还可以完成添加、删除、定位的功能。

(5)文件视图(FileView)。FileView视图同ClassView非常相似,将项目中的所有文件(C++源文件、头文件、资源文件、Help文件等)以视图的形式分类显示。在视图中可以显示和编辑源文件和头文件。

3.2数据库技术

系统开发平台选择VC++,它是目前比较流行的可视化开发环境之一,集成了一些实用的组件,方便了编程工作。利用ADO技术可以方便的连接数据库,并通过SQL语言完成对数据的相关操作。

3.2.1 VC++6.0开发数据库技术的特点

VC++作为一个功能非常强大的可视化应用程序开发工具,是计算机界公认的最优秀的应用开发工具之一。VC++作为一种程序设计语言,它同时也是一个集成开发工具,提供了软件代码自动生成和可视化的资源编辑功能。在使用VC++开发应用程序的过程中,系统生成了大量的各种类型的文件,为今后系统开发、调试奠定了基础。VC++的MFC类库实际上是Windows下编程的一套最为流行的类库。MFC的框架结构大大方便了编程工作,它合理的封装了Win32API函数,并设计了一套方便的消息映射机制,这套机制本身比较庞大和复杂。

VC++6.0提供了多种数据库访问技术——ODBC API、MFC ODBC、DAO、OLEDB、ADO等。

(l)简单性

VC++6.0中提供了MFC类库、ATL模板等一系列工具,用于帮助程序员快速的建立应用程序,大大简化了应用程序的设计过程。使用这些技术,只需要编写很少的代码就可以开发一个数据库应用程序。

(2)灵活性

VC++6.0提供的开发环境可以使程序员根据自己的需要设计应用程序的界面和功能,VC++6.0还提供了丰富的类库和方法。

(3)访问速度快

为了解决ODBC开发数据库应用程序访问数据库速度慢的问题,VC++6.0提供了新的访问技术——OLEDB和ADO,它们都是基于COM接口的技术,使用这种技术可以直接对数据库的驱动程序进行访问,这大大提高了对数据库的访问速度。本课题使用的就是ADO访问方法。

(4)可扩展性

VC++6.0提供了OLE技术和ActiveX技术,这种技术可以增强应用程序的能力。这两种技术可以使应用程序组件化,增强程序的可扩展性。

(5)访问不同种类数据源传统的ODBC技术只能访问关系型数据库,在VC++6.0中,提供了OLEDB访问技术,不仅可以访问关系型数据库,还可以访问非关系型数据库。

3.2.2 SQL语言概述

SQL(Structured Query Language)数据库结构化查询语言出现于20世纪70年代中期,是一种十分重要的标准化数据库语一言。目前,各种数据库管理系统几乎都支持SQL或提供SQL接口。SQL数据库结构化查询语一言集数据定义、数据查询、数据操纵和数据控制功能于一体,数据定义功能是指定义数据库的结构,包括定义基本表、定义视图和第一索引三部分,数据操纵是指对关系中的具体数据进行增、删、改等操作,数据控制是指对数据访问权限的授予或撤销。目前,绝大多数流行的关系型数据库管理系统都采用了SQL语一言标准,本文中用ADO访问Access数据库进行的相关操作就使用了SQL语言。下面介绍SQL语言的常用命令及特点。

(l)SQL语一言常用命令

1)SQL的查询功能,SQL查询语句也称为SELECT命令,其功能是从一个或多个表中检索数据。

基本格式为:

SELECT查询目标FROM表1,表2,……

[WHERE条件表达式]

[GROUP BY分组列名[HAVING[组选择条件表达式]]

ORDER BY排序项[序]……]

其中SELECT用来说明要查询的数据项;FROM说明要查询的数据来自哪个或哪些表;WHERE说明查询的条件;GROUPBY用于对查询结果进行分组;HAVING短语必须跟随GROUPBY使用,用于限定分组满足的条件;ORDERBY短语用来对查询的结果进行排序。

2)SQL的数据定义功能,SQL数据定义功能包含了表结构的定义、修改与删除以及视图的创建与删除。其中表结构的定义格式为:

CREATE TABLE<表名>(

<字段名1><字段类型>[(<数据宽度>[,<小数位数>])]

[NULL/NOT NULL]

[CHECK<条件表达式1>!ERROR<信息字符串1>]]

[DEFAULT<表达式1>]

[ PRIMARYKEY/UNIQUE]

[REFERENCES<表名2>[TAG<标识l>]],

<字段名2><字段类型>[(<数据宽度>[,<小数位数>])少……)

说明:NULL/NOT NULL表示定义该字段是否允许空值。CHECK<条件表达式l>[ERROR<信息字符串l>]表示定义字段规则及违反规则后的提示信息。DEFAULT<表达式1>表示指定该字段值默认值。PRIMARYKEY/UNIQUE表示主键或唯一索引。REFERENCES<表名 2>[TAG<标识1>]表示定义参考完整性。

3)表结构修改格式为:

ALTERTABLE<表名1>

ADD/ALTER[COLUMN]<字段名1

<字段类型>[(<数据宽度>[,<小数位数>])]

[NULL/NOT NULL]

[CHECK<条件表达式 1>[ERROR<信息字符串1>]]

[DEFULT<表达式1>]

[PRIMARYKEY/UNIQUE]

[REFERENCES<表名 2>[TAG<标识1]

[NOCPTRANS]

说明:ADD[COLUMN<字段名1>表示要添加一个字段,字段名1是给出要添加字段名字。ALTER[COLUMN]<字段名下表示要修改一个字段,字段名1是给出要修改字段名字。其它选项与上面的表结构定义相同。

4)表删除格式为:

DROP TABLE表名

说明:此命令是直接从磁盘上删除相应的表,如果该表是某数据库中的表,并且该数据库为当前数据库,则从数据库中删除了表中相应的信息,否则虽然从磁盘上删除了表文件,但是纪录在数据库中的信息却没有删除,此后会出现错误提示。所以要删除数据库中的表时,最好使数据库是在当前打开的数据库,在数据库中进行操作。

5)数据操作,数据库中数据操作包含了数据插入、数据更新和数据删除等命令。

其中数据插入的格式为:

INSERTINTO表名(字段名1,字段名2,……)V ALUES(表达式1,表达式2,……)功能是按给定的字段值在数据库的末尾追加一条新的纪录。

6)数据更新的格式为:

UPDATE表名SET字段名1=表达式l[,字段名2=表达式2……][WHERE条件] 说明:在更新命令中可以用WHERE字句限定条件,对满足条件的记录予与更新,若不写条件,则更新所有记录。

7)数据删除的格式为:

DELECTE FROM表名[WHE双条件]

说明:这里FROM指定从哪个表中删除数据,WHERE指定被删除的记录所满足的条件,如果不使用WHERE子句,则删除该表中全部纪录。这里的删除仍然是逻辑删除,如果想物理删除需要继续使用PACK命令。

以上介绍了SQL数据库结构化查询语言的几个简单的命令,其余的命令请查询参考文献[12,13]。

(2)SQL语言的特点

SQL语一言是非过程化语一言、是统一的语言、是所有关系数据库的公共语言。

l)非过程化语一言

SQL是非过程化语言,因为它一次处理一行(或记录)。SQL允许用户在高层的数据结构上工作,而不对单个记录进行操作,可操作记录集。所有SQL语句接受集合作为输入,返回集合作为输出。SQL的集合特性允许将一条SQL语句的结果作为另一条SQL语句的输入。SQL不需要用户指定对数据的存放方法,这种特性使用户更易集中精力于要得到的结果,而不需要知道具体如何实现;所有SQL语句使用查询优化器,它是RDBMS(关系数据库管理系统)的一部分,由它决定对指定数据存取的最快速度的手段,查询优化器知道存在什么索引,在哪儿使用索引适合,而用户则不需要知道表是否有索引、有什么类型的索引。

2)统一的语言

SQL可用于所有用户的数据库活动模型,包括系统管理员、数据库管理员、应用程序员、决策支持系统人员及许多其它类型的终端用户。SQL为许多任务提供了命令,其中包括:查询数据;在表中插入、修改和删除一记录;建立、修改和删除数据对象;控制对数据和数据对象的存取;保证数据库一致性和完整性。

SQL出现以前,各种数据库管理系统为上述各类操作提供单独的语言。而SQL将全部任务统一在一种语言中。

3)所有关系数据库的公共语台‘

由于所有主要的关系数据库管理系统都只持SQL语言,用户可将使用SQL的技能从一个RDMBS转到另一个,所有用SQL编写的程序都是可以移植的。

3.2.3 ADO数据库访问技术

(l)ADO 概述

ADO(ActiveX Data Objeet)是Microsoft 为最新和最强大的数据访问范例OLEDB 而设计的,是一个便于使用的应用程序层接口。能够使用ADO 编写应用程序以通过OLEDB 提供者访问和操作数据库服务器中的数据。ADO 最主要的优点是易于使用、速度快、内存支出少和磁盘遗迹小。ADO 在关键的应用方案中使用最少的网络流量,并且在前端和数据源之间使用最少的层数,所有这些都是为了提供轻量、高性能的接口。

OLEDB 是一组“组件对象模型”(COM)接口,是新的数据库低层接口,它封装了ODBC 的功能,并以统一的方式访问存储在不同信息源中的数据。OLEDB 是Microsoft UDA(Universal Data Aceess)策略的技术基础。OLEDB 为任何数据源提供了高性能的访问,这些数据源包括关系和非关系数据库、电子邮件和文件系统、文本和图形、自定义业务对象等等。

图3-2ADO 的结构

(2)ADO 结构

ADO 技术用对象封装了OLEDB 中所提供的接口,这些接口分别被OLEDB 数据提供程序、OLEDB 服务提供程序所使用。ADO 中所提供的对象只适用于数据应用程序,其结构如图3-2所示。

从ADO 的结构可以看出,ADO 模型包含了7种对象,4种集合。它们分别是:

连接对象(Connection):表示与数据源的连接,以及处理一些命令和事务。

命令对象(Command):用于处理传递给数据源的命令。

记录集对象(Recordset):用于处理数据的表格集,如获取和修改数据。

域对象(Field):用于表示记录集中的列信息,包括列值以及其它信息。

参数对象(Parameter):用于对传送给数据源的命令赋参数值。

属性对象(Property):用于在操作中使用的其它对象的详细属性。

错误对象(Error):用于获得连接对象所发生错误的详细信息。

错误集合(Errors):连接对象中包含了错误对象的集合。此错误集合中包含了在一次连接数据源时所产生的所有错误对象。

参数集合(Parameters):命令对象中包含了域对象的集合。域对象的集合中包含了应用于命令对象的所有的参数对象。

域集合(Fields):记录集对象中包含了域对象的集合。域对象的集合中包含了所有代表记录集中每列的域对象。

属性集合(Properties):在连接对象、命令对象、记录集对象和域对象中都包含了属性对象的集合。属性对象的集合中包含了这些对象的所有特性。

(3)在VC中使用ADO对象开发应用程序

l)引入ADO库文件

使用ADO前必须在工程的头文件stdafx.h里用直接引入符号# import引入ADO 库文件,以使编译器能正确编译。代码如下所示:

用# import引入ADO库文件:

# import “C:\Program Files\common files\system\ado\msado15.dll”

no_namespace rename(“EOF”,“adoEOF”)

这行语句声明在工程中使用ADO,但不使用ADO的名字空间,并且为了

避免常数冲突,将常数EOF改名为adoEOF。现在不需添加另外的头文件,就可以使用ADO接口了。值得注意的是msado15.dll不一定在c:\Program Files\common files\system\ado\这个目录下,请按照实际情况修改。

2)初始化OLE/COM库环境

ADO库是一组动态COM库,这意味着应用程序在调用ADO前,必须初始化OLE/COM库环境。在应用程序里,一个比较好的方法是在应用程序主类的InitInstance 成员函数里初始化OLE/COM库环境。如:

BOOL CNCLY2006APP ::InitInstance()

{

AfxEnableControlContainer();

::CoInitialize(NULL);//这就是初始化COM库

}

程序最后要调用::Couninitialize();//释放程序占用的COM资源。

3)ADO接口简介

ADO库包含三个基本接口: _ConnectionPtr接口、_CommandPt接口和_ReeordsetPtr接口。

_ConnectionPt接口返回一个记录集或一个空指针。通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。使用_ConnectionPt接口返回一个记录集不是一个好的使用方法。对于要返回记录的操作通常用_ReeordsetPt 来实现。用_ConneetionPtr操作时要想得到记录条数得遍历所有记录,而用_ReeordsetPt 时不需要。

_CommandPt:接口返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。在使用_CommandRr接口时,可以利用全局_CommandPt接口,也可以在_CommandPt接口里直接使用连接串。如果只执行一次或几次数据访问操作,后者是比较好的选择。但如果要频繁访问数据库,并要返回很多记录集,那么,应该使用全局 _ConnectionPt接口创建一个数据连接,然后使用_CommandPtr接口执行存储过程和SQL语句。

_RecordsetR:是一个记录集对象。与以上两种对象相比,它对一记录集提供了更多的控制功能,如记录锁定,游标控制等。同_CommanPtr接口一样,它不一定要使用一个己经创建的数据连接,可以用一个连接串代替连接指针赋给_ReeordsetPt的Connection成员变量,让它自己创建数据连接。如果要使用多个记录集,最好的方法是同Command对象一样使用己经创建了数据连接的全局_ConncetionPt接口,然后使用_ReeordsetPt执行存储过程和SQL语句。

4)创建ADO与数据源的连接

ADO与数据源的连接是通过连接智能指针来创建的。首先需要添加一个指向Connection对象的指针_ConnectionPtr mp_Connection,下面的代码演示了如何创建Connection对象实例及如何连接数据库并进行异常捕捉:

BOOLCADOTestlDlg ::OnInitDialog()

{

CDialog ::OnInitDialog();

HRESULT hr;

try

{//创建Connection对象

hr=mp_Connection.CreateInstanee(“ADODB.Connection“);

if (SUCCEEDED(hr))

{

hr=mp_Connection—>Open(“Provider=Mierosoft.Jet.OLEDB.4.0;Data

Source = test.mdb“,”“,”“,adModeUnknown)://连接数据库

//上面一句中连接字串中的Provide是针对ACCESS2000环境的,对于

ACCESS97,需要改为: provider=Mierosoft.Jet.OLEDB.3.5l;

}

}

Cateh(_com_error e)//捕捉异常

{

CString errormessage;

errormessage.F0rmat(“连接数据库失败!\r\n错误信息:%s”e.ErrorMessage()):

AfxMessageBox(errormessage);//显示错误信息

}

}

在这段代码中是通过Connection对象的Open方法来进行连接数据库的,下面是该方法的原型:

HRESULTConnection15 ::Open(_bstr_t ConnectionString,_bstr_t UserID,_bstr_t Password,long Options);

上述函数中参数ConnectionString为连接字串;参数UserID是用户名;参数Password是登陆密码;参数Options是连接选项,用于指定Connection对象对数据的更新许可权,一般情况下Options可以是如下几个常量:

adModeUnknown:缺省:当前的许可权未设置。

adModeRead:只读

adModeWrite:只写

adModeReadWrite:可以读写

adModeShareDenyRead:阻止其它Connection对象以读权限打开连接

adModeShareDenyWrite:阻止其它Connection对象以写权限打开连接

adModeShareExelusive:阻止其它Connection对象以读写权限打开连接

adModeShareDenyNone:阻止其它Connection对象以任何权限打开连接

下面给出一些常用的连接方式供大家参考:

第一种,通过JET数据库引擎对ACCESSZOOO数据库的连接:

M_pConneetion—>Open(“Provider=Microsojl.Jor.OLEDB.4.O;DataSouree=

C:\\test.mdb”,“”,“”,adModeUnknown);

第二种,通过DSN数据源对任何支持ODBC的数据库进行连接:

M_pConneetion—>Open(“DataSouree=adotest;UID=sa;PWD=;”,“”,“”,adModeUnknown);

第三种,不通过DSN对SQL SERVER数据库进行连接:

M_pConnection—>Open(“driver={SQLServer};Server=127.0.0.1;DA TABASE=

相关文档