毕业设计(论文)-手机话费查询系统.doc_第1页
毕业设计(论文)-手机话费查询系统.doc_第2页
毕业设计(论文)-手机话费查询系统.doc_第3页
毕业设计(论文)-手机话费查询系统.doc_第4页
毕业设计(论文)-手机话费查询系统.doc_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

手机话费查询系统 手机话费查询系统摘要:介绍了手机话费查询系统,针对系统的文本数据文件导入数据库模块和基于用户名的话费查询统计模块的关键技术作了详细的分析。同时着重介绍了采用Delphi开发软件用ADO组件将话单文本文件导入数据库和对其进行查询统计的方法,实验结果表明此方法易于用户的操作,也使得系统具有较高的灵活性和可靠性。关键词:Delphi 7;Access数据库;ADO组件Abstract:This paper introduces the structure of the query system of mobile phone and analyses two primary modules of this system in detail. At the same time ,this paper brings forward an efficiency method for the conversion of the text file to Access database file based on Delphi for using an ADO with Parameters. The result indicates that the method is easy for system manager to operate data and also make system more flexible and more reliable.Key words: Delphi 7;Access database; ADO引言自从手机在国内出现之后,中国手机用户的数量一直在高速增长,用户对话费的查询也很多方式。本人通过调查发现有以下几种方式:一、营业厅查询、打印现在稍微大一些的移动营业厅都设有自助查询终端,这种终端分为两种,一种有触摸屏没有打印机的终端,另一种可打印的按键式终端。两种终端都可以查询当前或指定月份的账务信息,触摸屏终端可以查询当月、往月的详单,打印终端只能查询往月详单,当然查询之前需要输入手机号和相应的密码。自助终端的缺点是随着使用的次数的增加,终端的故障率比较高,尤其是打印自助终端,纸张出口处是最容易出问题的地方,经常造成话单纸很难撕下来的情况,其最后结果就是现在很多自助打印终端只能查询不能打印。二、1861电话查询自从移动从电信分离出来后,就有了单独的话费查询方式1861。1861主要提供查询手机的余额、传真详单和手机充值等服务。但说起1861的服务水平真是不敢让人恭维。也许是访问的人太多而提供的中继线太少,也许是因为拨打1861免费,也许是 ,反正拨打1861十次有五次不会成功。按的快了是不行的,说你“您的限拨次数已到,请挂机”;赶的时间不好不行,要么是长时间没有回应,要么就是说系统正忙。说到传真详单就更甭提了。如果你是晚上十点以后传真话单,成功率会比较高,要是其他时候的话,“传真系统正忙”会一直等着你。也许是移动发现了这个问题,最近升级后将原来的在线传真功能去掉了,代之以让你输入带有区号的传真机号码,至少五分钟以后,1860会给你传送话单。三、短信查询和WAP查询2003年6月,江苏移动推出了短信查询本机话费的服务。短信查询的意义在于节省手机漫游时查询话费的成本。据其业务介绍讲,这项服务是免费的,可是从话单上看,其除了发送短信的0.10元外,查询结果短信也要收0.10元的梦网费,看来上帝又一次被骗了。江苏移动又在其网站上开通了话费查询功能,可以查询指定月份的话费情况(非详单)。总的来说还算不错,但通过连接网站时,很多时候都会提示:“服务器忙”。四、网站查询随着互联网在中国的飞速发展,越来越多的人成为网民,互联网已成为人们生活中不可或缺的一部分。同样,手机用户也有着在互联网上查询话费的需求。如今用户可以在网上查询自己的上月帐单、清单和本月话单,用户可以得到文本文件方式的话单,并可以将这些文本文件发送到指定的信箱中。但是庞大的话单数据信息给用户的话费管理带来了不便,由此手机话费查询系统应运而生。目录摘 要 引言 I第一章 绪 论 31.1 数据库应用系统开发简介 31.2 话费查询系统简介 61.3 系统所作工作 71.4 本文所做的主要工作 7第二章 数据库理论基础 82.1 数据库系统设计及范式分析 82.2 SQL语言介绍 102.2.1 SQL基础 112.2.2 SQL语句 11第三章 应用系统开发工具 123.1 Delphi6.0VCL组件的体系结构 123.2 数据库组件介绍 133.3 SQL语言在Delphi中的应用 14第四章 话费查询系统设计分析和程序设计 174.1 应用需求分析 174.2 系统功能模块划分 174.3 话费查询系统应用程序设计 184.3.1文本数据文件导入数据库的实现 184.3.2 数据库查询的实现 244.3.3系统演示结果 27第五章结束语 28致 谢 28参考书目 28附录:程序清单 30第一章 绪 论1.1 数据库应用系统开发简介在数据库应用系统开发之前,对开发数据库的基本概念应当了解,对数据库的结构、开发数据库应用程序的步骤、开发体系及方法都应当有相当清晰的了解和认识。数据库应用系统开发的目标是建立一个满足用户长期需求的产品。开发的主要过程为:理解用户的需求,然后,把它们转变为有效的数据库设计。把设计转变为实际的数据库,并且这些数据库带有功能完备、高效能的应用。数据库技术在计算机软件邻域研究中一直是非常重要的主题,产生于60年代,30多年来数据库技术得到了迅速发展,并已形成较为完整的理论体系和一大批实用系统。并且,近年来,随着World Wide Web(WWW)的猛增及Internet技术的迅速发展,使得数据库技术之时成为最热门技术之一。1.1.1 数据库 数据库是数据库系统的主要组件。数据库由DBMS(数据库管理系统)处理,DBMS则由开发人员和用户通过应用程序直接或间接地使用。它主要包括四个要素:用户数据、元数据、索引和应用元数据。用户数据目前,大多数主流数据库管理系统把用户数据表示为关系。现在把关系看作数据表。表的列包含域或属性,表的行包含对应业务环境中的实体的记录。并非所有的关系都同样符合要求,有些关系比其它关系更结构化一些。第二章描述了一个用以产生良好结构关系的过程,称作规范化。为了对比结构差的关系和结构好的关系之间的差别,将关系分别存储,在生成报表的时候将它们结合起来,比把它们存储在一个合成的表中更好。 元数据数据库是自描述的,这就意味着它自身包含了它的结构的描述,这种结构的描述称作元数据。因为DBMS产品是用来存储和操纵表的,所以大多数产品把元数据以表的形式存储,有时称作系统表。这些系统表存储了数据库中表的情况,指出每一个表中有多少列,那一列是主关键字,每一列的数据类型的描述,它也存储索引、关键字、规则和数据库结构的其他部分。在表中存储元数据不仅对DBMS是有效的,对用户也是方便的,因为他们可以使用与查询用户数据同样的查询工具来查询元数据。本文第二章所介绍的SQL语言可以同时用于元数据和用户数据。 索引 第三种类型的数据改进了数据库的性能和可访问性,这种数据经常称作开销数据,尽管有时也采用其他类型的数据结构,如链表,但它主要还是索引。索引可以用来排序和快速访问数据。索引对排序和查找是有帮助的,但要付出代价。表中的行每次改变时,索引也必须改变,这意味着索引并非随意的,应该在真正需要时保存。 应用元数据 存储在数据库中的第四种数据是应用元数据,它用来存储用户窗体、报表、查询和其他形式的查询组件。并非所有的DBMS都支持应用组件,支持组件的DBMS也不一定把全部组件的结构作为应用元数据存储在数据库中。然而,大多数现代的DBMS产品存储这种数据作为数据库的一部分。一般来说,数据库开发人员和用户都不直接访问应用元数据,想反,他们通过DBMS中的工具来处理这些数据。MS SQL Server2000中就支持窗体、存储过程等应用元数据。1.1.2 数据库管理系统 数据库管理系统(DBMS)是指数据库系统中管理数据的软件系统。DBMS是数据库系统的核心组成部分。对数据库的一切操作,包括定义、更新及各种控制,都是通过DBMS进行的。DBMS总是基于某种数据模型,可以把DBMS看成是某种数据模型在计算机系统上的具体实现。根据数据模型的不同,DBMS可以分成层次型、网状型、关系型、面向对象型等。MS SQL Server2000就是一种关系型数据库管理系统。关系模型。关系模型主要是用二维表格结构表达实体集,用外键表示实体间联系。关系模型是由若干个关系模式组成的集合。关系模式相当于前面提到的记录类型,它的实例称为关系,每个关系实际上是一张二维表格。关系模型和层次、网状模型的最大判别是用关键码而不是用指针导航数据,表格简单用户易懂,编程时并不涉及存储结构,访问技术等细节。关系模型是数学化模型。SQL语言是关系数据库的标准化语言,已得到了广泛的应用。 设计子系统有一个方便数据库及其应用创建的工具集。它典型地包含产生表、窗体、查询和报表的工具。DBMS产品还提供编程语言和对编程语言的接口。运行子系统处理用设计子系统开发的应用组件。它所包含的运行处理器用来处理窗体和数据库的数据交互,以及回答查询和打印报表等。1.1.3 创建数据库 数据库模式 数据库模式定义了数据库的结构、表、关系、域和业务规则。数据库模式是一种设计,数据库和应用正是建立在此基础上的。 域是一列可能拥有的值的集合。必须为每一个表的每一列确定域。除了数据的物理格式外,还需要确定是否有些域对表来说是唯一的。 数据库模式的最后一个要素是业务规则,它是对需要反映在数据库和数据库应用程序中的业务活动的约束。业务规则是模式的一个重要部分,因为他们指定了无论什么数据变化到达DBMS引擎,允许的数据值必须满足的约束。不管无效的数据变化请求是来自窗体的用户、查询/修改请求还是应用程序,DBMS都应该拒绝。 遗憾的是,不同的DBMS产品用不同的方法实施业务规则。在某些情况下,DBMS产品不具备实施必要业务规则的能力,必须以代码形式把它们编入应用程序。 创建表 定义联系1.1.4 应用组件数据库应用包括窗体、查询、报表、菜单和应用程序。1.2 话费查询系统简介手机话费查询系统提供了对各用户的每月话费查询功能。利用现有的数据库管理软件可以开发出功能强大的话费查询系统,但目前移动网站上提供的话单是文本形式的数据文件,无疑给数据的后继处理带来了不便。本文就是在这个基础上提出了一种简单有效的把话单文件自动导入数据库的方法,然后利用Delphi强大的数据库管理功能实现手机话费查询系统。因此本人对MS Access 2000数据库系统、SQL语言原理、Delphi应用程序设计,Delphi数据库技术进行了较深入的学习和应用,主要完成对手机话费查询系统的需求分析、功能模块划分、数据库模式分析,并由此设计了数据库结构和应用程序。系统运行结果证明,本文所设计的手机话费查询系统可以满足用户对话单进行查询统计的基本要求。手机话费查询系统是处理以纯文本文件形式存储的手机话单,并从中统计出用户在某段时期内的话费具体情况的系统。该系统是对用户的话单文本文件的处理和查询,系统分为两个主要模块:文本数据文件的处理并转入数据库;用户对话单数据库文件查询统计。1.3 系统所做工作1)了解应用开发工具的现状2)DelPHi6.0编程基础3)MS SQL Server基础4)设计数据库;设计界面5)开发数据库。1.4 本文所作工作绪论部分对数据库应用系统的结构、开发进行了简要介绍,分析了话费查询系统设计的特点和任务。第二章介绍了数据库的设计和范式分析,并系统介绍了SQL语言,为设计和理解应用程序做了铺垫。第三章对系统介绍了Delphi 6.0的数据库编程技术、SQL语言在Delphi 6.0中的应用、MS Access 数据库基础。第四章分析了话费查询系统的应用需求,设计了系统的数据库结构,并根据需求对系统功能进行了划分和细化。第五章根据第四章的设计结果利用MS Access数据库和Delphi 6.0进行了具体的应用程序设计。总结部分介绍了设计体会和编程体会,并指出了系统设计中的不足和改进的方向。第二章 数据库理论基础一个成功的数据库信息系统,是建立在许多条件之上的,而数据库是其中一个非常重要的条件和关键技术。系统所涉及的数据库设计分五个步骤:数据库需求分析、概念设计、逻辑设计、物理设计与加载测试。(1)数据库需求分析的任务是将业务管理单证流化为数据流,划分主题之间的边界,绘制出DFD图,并完成相应的数据字典。(2)概念设计的任务是从DFD出发,绘制出本主题的实体关系图,并列出各个实体与关系的纲要表。(3)逻辑设计的任务是从E-R图与对应的纲要表出发,确定各个实体及关系的表名属性。(4)物理设计的任务是确定所有属性的类型、宽度与取值范围,设计出基本表的主键,将所有的表名与字段名英文化,实现物理建库,完成数据库物理设计字典。(5)加载测试工作贯穿于程序测试工作的全过程,整个录入、修改、查询、处理工作均可视为对数据库的加载测试工作。要设计出一个好的信息管理系统数据库,除满足系统所要求的功能外,还必须遵守下列原则: 基本表的个数越少越好。 主键的个数越少越好。键是表间连接的工具,主键越少,表间的连接就越简单。 字段的个数越少越好。 有基本表的设计均应尽量符合第三范式。 数据库设计中,如何处理多对多的关系和如何设计主键,是两个有着较大难度、需要重点考虑的问题。下面我们着重从SQL应用、数据库设计范式和查询优化等方面来分析本课题的系统关键技术和实现难点并加以解决。2.1 数据库系统设计及范式分析信息系统的主要任务是通过大量的数据获得管理所需要的信息,这就必须存储和管理大量的数据。因此建立一个良好的数据组织结构和数据库,使整个系统都可以迅速、方便、准确地调用和管理所需的数据,是衡量信息系统开发工作好坏的主要指标之一。2.1.1 数据库系统设计数据库设计主要是进行数据库的逻辑设计,即将数据按一定的分类、分组系统和逻辑层次组织起来,是面向用户的。数据库设计时需要综合企业各个部门的存档数据和数据需求,分析各个数据之间的关系,按照DBMS提供的功能和描述工具,设计出规模适当、正确反映数据关系、数据冗余少、存取效率高、能满足多种查询要求的数据模型。数据库设计的步骤是:(1)数据库结构定义:目前的数据库管理系统(DBMS)有的是支持联机事务处理CLTP(负责对事务数据进行采集、处理、存储)的操作型DBMS,有的可支持数据仓库、有联机分析处理CLAP(指为支持决策的制定对数据的一种加工操作)功能的大型DBMS,有的数据库是关系型的、有的可支持面向对象数据库。针对选择的DBMS,进行数据库结构定义。(2)数据表定义:数据表定义指定义数据库中数据表的结构,数据表的逻辑结构包括:属性名称、类型、表示形式、缺省值、校验规则、是否关键字、可否为空等。关系型数据库要尽量按关系规范化要求进行数据库设计,但为使效率高,规范化程度应根据应用环境和条件来决定。数据表设计不仅要满足数据存储的要求,还要增加一些如反映有关信息、操作责任、中间数据的字段或临时数据表。(3)存储设备和存储空间组织:确定数据的存放地点、存储路径、存储设备等,备份方案,对多版本如何保证一致性和数据的完整性。(4)数据使用权限设置:针对用户的不同使用要求,确定数据的用户使用权限,确保数据安全。(5)数据字典设计:用数据字典描述数据库的设计,便于维护和修改。 为了更好地组织数据和设计出实际应用数据库,应该注意如下问题:规范化地重组数据结构:对数据进行规范化表达,这在后面将会具体讨论。 关系数据结构的建立:在进行了数据基本结构的规范化重组后,还必须建立整体数据的关系结构。这一步设计完成后数据库和数据结构设计工作基本完成,只待系统实现时将数据分析和数据字典的内容代入到所设计的数据整体关系结构中,一个规范化数据库系统结构就建立起来了。 建立关系数据结构涉及三方面内容:确定关联的关键指标项并建立关联表;确定单一的父系记录结构;建立整个数据库的关系结构。 2.1.2 数据库设计范式分析 建立起一个良好的数据指标体系,是建立数据结构和数据库的最重要的一环。一个良好的数据指标体系是建立DB的必要条件,但不是充分条件。我们完全可以认为所建指标体系中的一个指标类就是关系数据库中的一个基本表,而这个指标类下面的一个个具体指标就是这个基本表中的一个字段。但如果直接按照这种方式建库显然还不能算最佳。对于指标体系中数据的结构在建库前还必须进行规范化的重新组织。 a. 数据组织的规范化形式 在数据的规范化表达中,一般将一组相互关联的数据称为一个关系(relation),而在这个关系下的每个数据指标项则被称为数据元素(data element),这种关系落实到具体数据库上就是基本表,而数据元素就是基本表中的一个字段(field)。规范化表达还规定在每一个基本表中必须定义一个数据元素为关键字(key),它可以唯一地标识出该表中其它相关的数据元素。在规范化理论中表是二维的,它有如下四个性质:在表中的任意一列上,数据项应属于同一个属性(如图中每一列都存放着不同合同记录的同一属性数据);表中所有行都是不相同的,不允许有重复组项出现(如图中每一行都是一个不同的合同记录);在表中,行的顺序无关紧要;在表中,列的顺序无关紧要,但不能重复。 在对表的形式进行了规范化定义后,数据结构还有五种规范化定义,定名为规范化模式,称为范式。在这五种范式中,一般只用前三种,对于常用系统就足够了。而且这五种范式是“向上兼容”的,即满足第五范式的数据结构自动满足一、二、三、四范式,满足第四范式的数据结构自动满足第一、二、三范式,依此类推。 第一范式(first normal form,简称1st NF)就是指在同一表中没有重复项出现,如果有则应将重复项去掉。这个去掉重复项的过程就称之为规范化处理。在本文所讨论的开发方法里,1st NF实际上是没有什么意义的。因为我们按规范化建立的指标体系和表的过程都自动保证了所有表都满足1st NF。 第二范式(second normal form,简称 2nd NF)是指每个表必须有一个(而且仅一个)数据元素为主关键字(primary key),其它数据元素与主关键字一一对应。例如,在图l9.7中如果我们将合同号定义为主关键字(其它数据元素中的记录数据都有可能重名,故不能作为主关键字),故只要知道了一个合同记录的合同号,就可以唯一地在同一行中找到该合同的任何一项具体信息。通常我们称这种关系为函数依赖(functional depEndence)关系。即表中其它数据元素都依赖于主关键字,或称该数据元素唯一地被主关键字所标识。 第三范式(third normal form,简称 3rd NF)就是指表中的所有数据元素不但要能够唯一地被主关键字所标识,而且它们之间还必须相互独立,不存在其它的函数关系。也就是说对于一个满足了 2nd NF的数据结构来说,表中有可能存在某些数据元素依赖于其它非关键宇数据元素的现象,必须加以消除。为防止数据库出现更新异常、插入异常、删除异常、数据冗余太大等现象,关系型数据库要尽量按关系规范化要求进行数据库设计。2.2 SQL语言介绍2.2.1 SQL基础 SQL(Structured Query Language,结构查询语言)是一个功能强大的数据库语言。SQL通常使用于数据库的通讯。ANSI(美国国家标准学会)声称,SQL是关系数据库管理系统的标准语言。SQL语句通常用于完成一些数据库的操作任务,比如在数据库中更新数据,或者从数据库中检索数据。使用SQL的常见关系数据库管理系统有:Oracle、 Sybase、 Microsoft SQL Server、 Access、 Ingres等等。虽然绝大多数的数据库系统使用SQL,但是它们同样有它们自立另外的专有扩展功能用于它们的系统。但是,标准的SQL命令,比如Select、 Insert、 Update、 Delete、 Create和 Drop常常被用于完成绝大多数数据库的操作。 2.2.2 SQL语句SQL功能强大,是一种完备的数据处理语言,不仅用于数据库查询,而且用于数据库中的数据修改和更新,概括起来,它可以分成以下几组:DML(Data Manipulation Language,数据操作语言):用于检索或者修改数据; DDL(Data Definition Language,数据定义语言): 用于定义数据的结构,比如 创建、修改或者删除数据库对象; DCL(Data Control Language,数据控制语言):用于定义数据库用户的权限。DML组可以细分为以下的几个语句:SELECT:用于检索数据;INSERT:用于增加数据到数据库;UPDATE:用于从数据库中修改现存的数据;DELETE:用于从数据库中删除数据。DDL语句可以用于创建用户和重建数据库对象。下面是DDL命令:CREATE TABLE,ALTER TABLE,DROP TABLE,CREATE INDEX,DROP INDEX DDL与DML 数据定义语言DDL:它是用来创建和修改数据库结构的一种语句,包括 Create、Alter和Drop 语句。数据操作语言DML:包括数据查询与数据更新。数据查询主要是由Select语句完成,而数据更新所造成的风险大大超过数据查询。数据库管理系统必须在更改期内保护所存储的数据的一致性,确保有效的数据进入数据库,数据库必须保持一致性,DBMS还必须协调多用户的并行更新,以确保用户和它们的更改不至于影响其它用户的作业。用于修改数据库内容的 SQL 语句主要有以下三个: (1) Insert,向一个表中加入新的数据行 (2) Delete,从一个表中删除数据行 (3) Update,更改数据库中已经存在的数据第三章 应用系统开发工具3.1 Delphi6.0VCL组件的体系结构 Delphi类可以粗略地分成两部分:一部分是组件类,这些组件类通常以某种方式出现在组件面板上,当用户从组件面板上点取一个类的图标后,在程序中就自动生成了该类的对象(非可视组件除外);另一部分是功能类,这此功能类的对象通常出现在程序代码中,起着不可代替的作用,但是这些功能类在组件面板上是找不到的。在Delphi中,每一个类的祖先都是Tobject类,整个类的层次结构就像一棵倒挂的树,在最顶层的树根即为Tobject类。这样,按照面向对象编程的基本思想,就使得用户可用Tobject类这个类型代替任何其它类的数据类型。实际上在Delphi的类库中,Tobject类派生出了为数相当众多的子类,它们形成了一个庞大的体系,通常情况下,如果不自行开发组件,就不必了解整个类的体系结构,只用到类层次树的叶结点就足够了。 这简略介绍一下Delphi 6.0中VCL(可视化组件库)组件的体系结构。凡是做过程序开发的人都知道从来没有单纯的数据应用程序,也就是说,数据库应用程序必须和用户界面(可以是图形界面,也可以是命令接口)元素相结合,只讲界面或只讲数据库本身都构不成数据库应用程序,因而用Delphi 6.0开发数据库应用程序就隐含着界面开发。组件在Delphi程序的开发中是最显眼的角色。大家知道,在编写程序时一般都开始于在组件面板上选择组件并定义组件间的相互作用。但也有一些组件不在组件面板上,例如Tform和Tapplication(典型的非可视组件)。组件是Tcomponents派生出来的子类,可以流的形式存放在DFM文件中,具有事件和Publish属性。窗口组件类是窗口化的可视化组件类,在Delphi的类库中占有最大的份额。在实际编程中,窗口组件类的对象都有句柄,可以接受输入焦点和包含其它组件。图形组件与窗口组件并列,是另一大类组件。图形组件不是基于窗口的,因而不能有窗口句柄,不能接受输入焦点和包含其它组件。图形组件的基类是TgraphicControl,在实际编程中,它们必须寄生于它们的宿主窗口组件类的对象,由它们的拥有者负责其显示,而且还能触发一些和鼠标活动相关的事件。图形控件最典型的例子是Tlabel和TspeedButton。由此可以看出图形组件的功能很弱,图形组件的用处何在呢?其实使用图形组件的最大好处在于节省资源,正是因为它们的功能较弱,所以使用的系统资源就要少。在一个应用程序中,如果能在不影响其功能的前提下合理大量地使用图形组件,将会大减少程序对系统资源的消耗。 非可视组件是与可视组件相并列的另一类组件,非可视组件在程序运行中是不可见的(除各种对话框组件之外,事实上有人认为对话框组件不能归入非可视组件,应该是另一种介于可视与非可视之间的组件)。 最后要说明一下,常说的控件实际上是一种组件。也就是说组件这个概念要大于控件,控件在内涵上包含于组件中。控件由Windows系列操作系统提出并使用,而组件是Borland和其它厂商在对Windows控件做了必要的扩展之后提出来的概念,它们是在不同时期由不同的厂商提出的概念。3.2 数据库组件介绍用Delphi6开发数据库应用,重点是和各种数据库组件打交道,能和数据库挂钩的组件对象有5种,它们是:Session(数据库会话)、Database(数据库)、Dataset(数据集)、DataSource(数据源)、Data control(数据控制组件,也叫data-controls即数据感知组件)。其中前面4种统称为数据访问(Data Access)组件。这些组件的相互关系如图3-2所示。 ADO组件 Delphi6.0包含了可以用来访问Microsoft公司的ActiveX Data Objects(ADO)格式数据库的组件。ADO是Micrsoft公司关于各种类型数据的高等界面,后来逐渐演变成满足所有数据访问需要的完整解决办法。ADO的对象模型是所有数据访问接口对象模型中最简单的一种。Microsoft公司用来访问ADO数据的应用程序界面技术是OLE DB。OLE DB是一种底层编程接口,用来访问许多不同类型的数据源,其中包括消息、文件系统以及其他一些非传统的数据源。OLE DB是一个由Component Object Model(COM)接口组成的集合,用来隐藏创建数据访问服务过程中的细节。OLEDB提供了访问任何数据资源的方法,包括相互关联的数据库和相互不关联的数据库、Email和文件系统、文本和图形以及用户定义的数据对象。 Delphi的ADO组件无需依靠BDE而是使用ADO技术,提供了可以通过数据控制组件访问数据的新方法。唯一的要求是在使用ADO组件时必须运行ADO/OLEDB。ADO组件的使用使得DELPHI在访问数据的类型和采用的技术方面都有了很大的突破。数据模块设计窗口 数据模块设计窗口是用来设计和维护数据模块的。数据模块设计窗口中包含了所有以.DTI作为文件扩展名的Data Diagram文件的信息。DTI文件在编译时不起任何作用。3.3 SQL语言在Delphi中的应用在Delphi中使用SQL语言非常方便,一般来说,都是通过Tquery或TADOquery组件来使用SQL语言的。可以在Tquery或TADOquery组件的SQL属性中设置SQL语句。设计程序时,在该组件的属性对话框中选择SQL属性,单击带省略号的按钮,就可以打开String List Editor对话框,然后我们就可以在对话框中添加SQL语句。还可以使用Delphi的SQL Builder来自动生成SQL语句,这样可以避免手工编写SQL而可能造成的语法错误。静态SQL语句在程序设计时便已固定下来,它不包含任何参数和变量。动态SQL语句,也被称作参数化的语句,在其中间包含着表示字段名或表名的参数,在程序运行过程中,必须要为该参数赋值,该条SQL语句才能正确执行,每次运行应用程序时可以为该参数变量赋予不同的值。为参数赋值有三种方法:根据参数在SQL语句中出现的顺序,设置TADOQuery组件的parameters属性值为参数赋值。直接根据SQL语句中各参数的名字,调用ParamByName方法来为各参数赋值。将TADOQuery组件的DataSource属性设置为另一个数据源,这样将另一个数据源中与当前TADOQuery组件的SQL语句中的参数名相匹配的字段值赋给其对应的参数。利用这种方法也能实现所谓的连接查询,创建主要明细型数据库应用。在使用动态SQL语句编程时,常常用到一个很重要的方法Prepare,调用Prepare 方法之后,Delphi会将带参数的SQL语句传送给与其对应的数据库引擎,对动态SQL语句进行语法分析和优化。虽然在用动态SQL语句编程时,调用Prepare方法并不是必须的,但是调用Prepare方法后,会极大地提高动态SQL 语句的执行性能,特别是当要反复多次执行同一条动态SQL语句时,其优越性会更加明显。 如果在应用程序中执行一条SQL语句之前并没有显式地调用Prepare方法,每次在执行SQL 语句时,Delphi会隐含地调用Prepare方法以准备这个查询。 TadoQuery部件还有一个Prepare属性,这是一个布尔型属性,当其属性值为True时, 表明该查询已被准备好了( SQL 语句已被传送到数据库引擎中 ) , 当我们使用参数编辑器Parameters Editor来为动态SQL语句中的参数赋值时,当设置完相应的参数值并退出参数编辑器时,Delphi会隐含地调用Prepare方法以准备好查询。当SQL语句执行完之后,要想准备下一个查询,首先必须调用Close方法,然后才能调用Prepare方法准备下一个查询。一般来说,在一个应用程序中应该调用一次Prepare方法,常常在窗体的OnCreate事件处理过程中调用Prepare方法, 然后用上述介绍的方法为参数赋值,最后调用Open方法或ExecSQL方法执行SQL语句,以完成查询。当然在调用Prepare方法准备好一个查询时,会消耗一些数据库资源, 因而每当一个查询执行完毕之后,要养成调用UnPrepare方法以撤消查询的好习惯。在运行程序过程中,通过程序改变TQuery或TADOquery部件的SQL属性值时,Delphi会自动地调用Close方法和UnPrepare 方法,以撤消查询。 在程序运行过程中,要想设置Tquery或TADOquery部件的SQL属性,必须首先调用Close方法,关闭TQuery或TADOquery部件,然后再调用Clear方法清除SQL属性中现存的SQL命令语句, 最后再调用Add方法为SQL属性设置新的SQL命令语句。在为TQuery或TADOquery部件设置SQL属性时调用Close方法总是很安全的,如果TQuery或TADOquery部件已经被关闭了,调用Close方法时不会产生任何影响。在应用程序中为SQL属性设置新的SQL 命令语句时,必须要调用Clear方法以清除SQL属性中现存的SQL命令语句,如果不调用Clear方法,便调用Add方法向SQL属性中设置SQL命令语句,那么新设置的SQL命令语句会追加在现存SQL命令语句后面, 在程序运行时常常会出现出乎意料的查询结果甚至程序无法运行下去。 在这里要特别注意的,一般情况下TQuery或TADOquery部件的SQL属性只能包含一条完整的SQL语句,它不允许被设置成多条SQL语句。当然有些数据库服务器也支持在TQuery或TADOquery部件的SQL属性中设置多条SQL语句,只要数据库服务器允许这样,我们在编程时可以为 SQL 属性设置多条SQL语句。 在为TQuery或TADOquery部件设置完SQL属性的属性值之后,也即编写好适当的SQL程序之后,可以有多种方式来执行SQL程序。在设计过程中,设置完TQuery或TADOquery部件的SQL属性之后将其Active属性的值置为True, 这样便可以执行SQL属性中的SQL程序,如果应用中有与TQuery或TADOquery部件相连的数据浏览部件( 如TDDGrid TDBEdit等)那么在这些数据浏览部件中会显示SQL程序的执行结果。在应用程序运行过程中,通过程序调用TQuery或TADOquery组件的Open方法或ExecSQL 方法可以执行其SQL属性中的SQL程序。Open方法和ExecSQL方法是不一样的。Open方法只能用来执行SQL语言的查询语句(Select命令), 并返回一个查询结果集,而ExecSQL方法还可以用来执行其它常用的SQL语句(如INSERT, UPDATE, DELETE等命令),例如:Query1.Open (这样会返回一个查询结果集) 如果调用Open方法,而没有查询结果时,会出错。此时应该调用ExecSQL 方法来代替Open方法。如:Query1.ExecSQL (没有返回结果) 当然在设计应用程序时,程序设计人员是无法确定TQuery或TADOquery组件中的SQL 语句是否会返回一个查询结果的。对于这种情况应当用TryExcept模块来设计程序。在 Try 部分调用Open方法,而在Except部分调用ExceSQL方法,这样才能保证程序的正确运行。例如:TryQuery1.OpenExceptQuery1.ExecSQLEnd通过Tquery或TADOquery组件可以获得两种类型的数据:(1)“活动”的数据这种数据就跟通过TTable部件获得的数据一样,用户可以通过数据浏览部件来编辑修改这些数据,并且当调用Post方法或当焦点离开当前的数据浏览部件时,用户对数据的修改自动地被写回到数据库中。(2)非活动的数据(只读数据)用户通过数据浏览部件是不能修改其中的数据。在缺省情况下,通过TQuery部件获得的查询结果数据是只读数据,要想获得“活动”的数据,在应用程序中必须要设置Tquery或TADOquery组件的RequestLive属性值为True,然而并不是在任何情况下(通过设置RequestLive的属值True)都可以获得“活动”的数据的,要想获得“活动”的数据,除了将TQuery部件的RequestLive属性设置为True外,相应的SQL命令还要满足以下条件。本地SQL语句查询情况下,要得到可更新的数据集,SQL语句的限制为:a.查询只能涉及到一个单独的表b.SQL语句中不能包含ORDER BY命令c.SQL语句中不能含聚集运算符SUM或AVGd.在Select后的字段列表中不能有计算字段e.在Select语句WHERE部分只能包含字段值与常量的比较运算,这些比较运算符是:Like, , =, =。各比较运算之间可以有并和交运算:AND和OR当通过SQL语句查询数据库服务器中的数据库表:查询只能涉及到一个单独的表;SQL语句中不能包含ORDER BY命令;SQL语句中不能含聚集运算符SUM或AVG运算.另外,如果是查询Sybase数据库中的表,那么被查询的表中只能有一个索引。 如果在应用程序中要求TQuery或TADOquery组件返回一个“活动”的查询结果数据集,但是SQL 命令语句不满足上述约束条件时,对于本地数据库的SQL查询,BDE只能返回只读的数据集。对于数据库服务器中的SQL查询,只能返回错误的代码。当Tquery或TADOquery组件返回一个“活动”的查询结果数据集时,它的CanModIfy属性的值会被设置成True。第四章 话费查询系统设计分析和程序设计4.1 应用需求分析话费查询系统需要满足手机用户需求,首先要能将话单文本文件导入数据库,然后要能对数据库文件进行统计和查询。(并略掉一些细节,如不考虑用户的登录)4.2 系统功能模块划分根据以上所做的需求分析,得出以下系统功能模块框图:话费查询系统连接数据库数据库查询话单文件处理话单文件转入数据库4.3 话费查询系统应用程序设计4.3.1 数据文件导入数据库的实现系统中首先要解决文件格式问题,即怎样将交换机输出的话单文本文件转到系统的数据库以实现数据的动态更新,查询管理。对于此问题,一些专用软件工具能够直接实现文本文件与数据库文件格式或其它文件格式的转换,但效果不是很好,而且与系统的接口也难于设计。另一种方案是将这些数据输入到相应的Access 数据库中,然后进行统计计算,分类和查询。Access 本身提供了导入纯文本文件的能力。例如现在要导入文本文件“话费清单.txt”,先单击“文件”菜单上的“新建”命令,建好数据库,在数据库界面,选择“新建表”类型,找到“导入表”,选择打开相应的“话费清单.txt”,再根据向导设置数据表字段名等工作,完成后就实现了目的。这种方案对于少量信息处理比较有效,但考虑到本系统数据量非常庞大,如果采用此方法,管理人员每次在进行系统更新时就必须手动的重复许多工作,效率较低,也加大了数据出错的机会。本人分析了Delphi中所提供的功能强大的文件操作组件及丰富的字符处理函数和过程,常用的有:(1)function Copy(S:String;Index,Count:Integer):String给出一个字符串中串的拷贝(2)function Pos(Substr:String;S:String);Integer查找子串在字符串中的位置(3)function Length(S:String):Integer返回串的长度(4)Procedure Delete(Var S:String;Index,Count:Integer);从一个字符串中去除子串利用Delphi 提供的这些函数和过程编制出程序,实现纯文本格式资料转入数据库功能。具体思想:将原文本文件中每行数据视为一个字符串,字符串中每个被分割的数据为一个独立的字段,分割每个字段的字符为分割符,本文本数据文件中的分割符是空格符;实现字符串中各字断分割后再一一存放到字符表中,最后把字符表中的数据以记录的形式添加到数据库表中,最终完成了文本数据文件转入数据库。具体方法及实现:首先运行MS Access,创建一个新的命名为data.mdb的空数据库。在设计窗口中创建表:Mobliefee(话费清单)。表的结构如下:Mobliefee表(话费清单表)包含与话费清单描述要求相匹配的字段:CallType(呼叫类型)、PhoneNumber(电话号码)、Seconds(秒数)、CallData(通话日期)、MobileToll(移动费)、LongDistanceToll,(长话费)、RoveType(漫游类型)。字段包含文本(Text)数据,默认为20个字符。Seconds(秒数)字段、MobileToll(移动费)、LongDistanceToll,(长话费)为数字字段(Number(Single)类型。然后通过Delphi里的ADO组件将话单文件导入数据库:为了能通过ADO和Delphi访问Access数据库的数据,需要增加三个数据可视(data aware)组件。首先是数据控制(DataControls)组件页的DBGrid用于浏览从

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论