Delphi2010

2024-06-07

Delphi2010(共7篇)

Delphi2010 篇1

目前,大部分高职院校的医疗门诊的诊断、治疗和药品发放,各类传染病的防疫防治,组织师生定期体检,对医务所药品库进行管理,审核教师需报销的医药费。日常工作基本以手工完成为主,在这种工作方式中,计算机只起到辅助办公的作用,没有实现对数据有效管理和减轻医务所工作人员的工作量的目的。因此,建立一个相对功能完善的药品管理系统有助于减轻工作人员劳动强度,提供对药品的有效管理、杜绝浪费,提高为师生卫生服务的水平。系统分析通过对医务所日常工作的充分调查研究,建立校医务所药品管理系统,实现医务所工作的计算机管理。通过建立一个功能相对完善的医务所管理系统减轻卫生所工作人员的劳动强度、提高劳动效率。

开发的药品系统,是一个用于药品管理系统,可适用于高职院校和大中型药店。用软件操作解决了人工操作中存在的速度慢、效率低的缺点。从采购到售出的整个过程,药品信息都保存在数据库中,确保了数据的安全,又有强大的数据统计功能,让使用者能及时了解市场需求。

1 药品管理系统分析

1.1 需求状况

开发的药品管理系统,是一个用于高职院校医务所的药品管理系统,具备了药品管理方面的功能,也具备了数据分析功能,后期还会加上联网功能,实现校园数字化系统之一。开发的目标是方便药品管理、简化工作流程、提高工作效率的应用型软件,同时也能监控到我校的医疗卫生状况,为我校师生提供更好的医疗服务做保障。为了更好的开发该系统,到医务所详尽的了解的各个环节,从进货、库存、销售、药品统计等。

1.2 药品管理系统流程

药品管理系统的数据流程图如图1所示。

1.3 药品管理系统结构

药品管理系统的结构图如图2所示。

该软件主要具有四大功能:信息录入、业务处理、统计分析及系统维护。

1.3.1 信息录入

主要功能是由四个模块组成的,药品信息、操作用户信息、生产商资料及供应商资料组成的。

药品信息:编号、药品名称、名称拼音简码、简称、性状、规格、包装、剂型、产品批号、生产日期、有效期、条形码、生产厂家、厂家信息等,还可以自主添加各个选项,这些信息可以从其它资料库导入。

操作用户信息:姓名、登录名、密码。

生产商资料:编号、生产商名称、地址、联系电话等。

供应商资料:编号、供应商名称、地址、联系人、联系电话等。

各项中都有详细参数,也可自定义项目上去,更加方便信息的管理。操作用户信息中,设置了不同的权限,对不同人员实行不同的权限,方便对药品的跟踪。

1.3.2 业务处理

主要有入库记录和销售记录两个模块。在药品管理系统中,采购记录中含有入库数量、时间、有效期、采购人、价格、录入员等。出库记录有,购买人、数量、价格、报销额度、时间、录入员和数据统计等。

进销功能是该系统的主要功能之一,它可以使用户清楚的看到每次入库和出库明细,药品的情况,并仔细的记录了各项参数,包括购买数量、时间、批号,有效期,药品信息、操作人等,使各项药品信息直观明了。

1.3.3 查询统计

查询统计中有,库存查询、信息统计、销售汇总、缺货提示和过期报警五大类。在对医务所进行了实地调研中发现,清点库存是一件劳时又劳力的工作,又不能及时掌握药品的有效期,不能有效的对药品进行管理。药品数据统计也是一项繁锁而枯燥的工作,但对了解我校师生的健康状况统计是一件必要的工作。在设计该系统时,库存查询和数据统计功能是主要的组成部分。

销售汇总中有最热销药品品、最近热销药品、销售金额、报销金额等,全面的介绍了医务所现在的药品情况。缺货提示可以自定义一条警戒线,当超过时就会自动提示,避免了药品出现缺货的情况发生。过期警报同样可以自定义警戒线,当药品的有效期超过这条警戒线时就会自动报警提醒,使医务人员能及时对这批药品进行处理。这样就能更好的对药品的情况进行掌握,避免不必的浪费和滥用。

1.3.4 系统维护

主要是由参数设置、用户管理、数据处理三个模块组成。参数设置可以设置系统的一些参数,如单位维护、剂型维护、包装维护等。用户管理中有,添加新用户、删除用户、用户权限设置、用户资料设置等。数据处理中有,数据恢复、数据备份等,可帮助用户完成某个时间段内数据的恢复和备份;所有的参数设置都尽量的详细,也有自定义项,让用户能根据自己的需要更好的进行选择。

1.4 系统性能分析

该系统有以下特点:1)运行稳定,软件支持win98以上系统运行环境;2)操作简便,故有人性化的设计,让用户轻易的找到所需;3)功能强大,不仅可以药品进行进销存管理,还有强大的数据分析功能;具备药品字典管理、药品拼音简码查询、药品基本信息管理功能,可完成药品的采购、入库、出库、销售、核算、查询、多种报表输出等各种事务,以达到更好的为用户服务的目的。

2 系统数据库设计

2.1 数据库

药品管理系统,是为了提高高职院校医务所药品管理质量、弥补人工管理中存在的不足而开发的。需要存放大量的药品信息,人员信息,历史记录,信息的操作频度相对较高。对存放大量的个人信息,故对安全性要求也比较高,Access数据库虽安全性不是最高的,但其性能已经足够满足系统的需求,故选择了Access数据库,Access的优点有:1)存储方式简单,易于维护管理;2)面向对象;3)界面友好、易操作;4)集成环境、处理多种数据信息;5)Access支持ODBC;6)支持广泛,易于扩展,弹性较大。

总之,Access是一个既可以只用来存放数据的数据库,也可以作为一个客户端开发工具来进行数据库应用系统开发;即可以开发方便易用的小型软件,也可以用来开发大型的应用系统。Access还可以将程序应用于网络,并与网络上的动态数据相联接。利用数据库访问页对象生成HTML文件,轻松构建Internet/Intranet的应用。

2.2 数据库的逻辑设计

数据库中存放的是需要及时更新的信息,设计软件时分别建立了不同的表,在这里只将部分数据库表的逻辑结构列举如图3。

3 结束语

使用基Delphi 2010为开发平台开发的药品管理系统,大大提高了我校医务所的运行效率和管理水平,本系统成功解决了医务所中存在的采购、库存和销售中存在的问题,也为我校医疗信息统计奠定了基础,为建设数字化校园迈出了重要的一步。该系统经测试和医务人员使用后,一致认为使用该系统比起以前的手工操作不仅提高了工作效率、减少了强度,极大方便了学校的医疗卫生统计工作,使医务所为更好的服务于广大师生。

摘要:该系统是实现高职院校药品销售管理系统,该系统以Delphi 2010为开发平台,支持Access数据库,功能有:药品维护、销售管理、库存管理、数据统计/报表、系统初始化、系统维护六大模块。该系统特色有:操作简单,界面整洁,功能强大,人性化设计,故有广泛的应用前景,解决了高职院校医务所中目前存在的药品管理和医疗卫生数据统计难题。

关键词:高职院校药品管理,Delphi2010

参考文献

[1]郭庚麒.软件工程基础教程[M].北京:科学出版社,2004.

[2]杨学全.Delphi7.0程序设计[M].北京:科学出版社,2004.

[3]毕安利.医院药品管理系统软件的应用[J].吉林医学,2008,29(2).

扩展Delphi组件的方法 篇2

因为Delphi兼有Visual Basic的简单性、易学性、易用性和Visula C++的功能强大性、运行高效性, 并且还有访问关系数据库的丰富组件, 使得访问关系数据库相当容易和简单, 所以, Delphi经常作为企业级应用的开发工具, 并且Delphi也开发出很多优秀的软件。应用Delphi开发平台, 必须要用到其中的VCL, VCL也是Delphi的核心部分, 作为Delphi的开发者, 也必须要掌握其中的VCL, 一般情况下, 应用Delphi提供的VCL, 能够满足应用的开发所需要的功能。但是, 作为企业级应用的开发, 一般要扩展Delphi所提供的VCL的功能来实现特定的业务功能或满足软件细粒度的复用。扩展VCL的功能有几种方法, 一般常用的方法就是根据VCL的继承关系, 找个合适的VCL组件对象进行继承, 然后根据自身开发需要扩展相应的功能。还有方法是通过OCX组件的封装, 这种组件可以提供的给别开发工具用, 如Visual C++等, 或直接嵌入IE浏览器客户端调用, 这些复用方式开发难度和复杂度相对大些。

2 应用组合技术

在面向对象程序开发中, 经常应用继承和组合的技术来进行代码的复用, 而组合技术一般是推荐的方法, 这样能减少软件的复杂度。在这里, 介绍应用这种技术来扩展Delphi组件的技术, 并且这种技术在实际的开发中得到较好的应用。下面举个简单的例子来说明这种方法的优点。

首先, 新建一个Delphi工程, 然后再在这个工程里新创建一个Frame对象, 在Frame的窗体上, 从Delphi的VCL组件中选择一个要扩展的组件放在上面。在这里, 举个扩展Combo Box组件的功能, 所以选择Combo Box放在Frame窗体上, 这样可以比较直观地设置Combo Box的一些属性, 然后在Frame窗体对应的pas源文件里编写代码增加更多的功能;因为用Combo Box组件时, 经常需要用到显示在组件上的数据不是程序中要处理的, 而是与其对应的一个值, Delphi自带的功能对这个处理不是很方便, 所以在这里做了扩展和封装, 这里列出比较重要的代码并进行说明。

代码写好并编译通过后, 按F12切换到窗体并在上面点击右键, 选择Add To Palette右键菜单功能, 把做好的组件放到一个组件面板上, 供程序复用。使用这个组件是件很简单的事, 在窗体对象上把刚才加到组件面板上的组件放到这个窗体就可以了, 然后在代码中进行相应的调用, 简单实例如下:

3 结语

Delphi自定义控件设计 篇3

关键词:控件,自定义控件,Delphi控件

Delphi语言受众多程序员追捧,主要原因之一就是它有很多第三方的控件可供使用。很多资深的Delphi程序员都把自己积累的函数、过程等设计成控件,以方便使用,提高开发效率。

本文通过一个只允许输入数字、并且可以设置输入值范围和小数点位数的编辑框控件的设计,详细介绍了控件的实现方法。该控件继承自edit控件,控件单元名称为NumEdit,控件类名称为TNumEdit。控件的实现主要分为4个阶段:

(1)建立控件原型。

(2)设计控件功能代码。

(3)设计控件图标。

(4)安装发布控件。

下面对这四个阶段进行详细讲解。

1 建立控件原型

可以通过Delphi向导建立控件原型。通过Delphi菜单“File-New-Other”打开“New Items”对话框,然后在New属性页中选择“Component”,点击“OK”,弹出“New Component”对话框,在该对话框中设置控件的基本信息,如图1。

Ancestor type:选择控件要继承的类,选择“TEdit(StdC-trls)”。

Class Name:要创建的控件的类名称,我们设置为“TNumEdit”。

Palette Page:该自定义控件发布后将要停靠的控件面板。

Unit file name:该控件代码存放路径。

设置好上面信息后,点“OK”按钮,向导自动生成最原始的控件代码,如下:

到目前为止,控件TNumEdit已经具备了Tedit编辑框的所有功能,下面就可以在这个基础上设计需求的功能了。

2 设计控件功能

(1)只允许输入数字。

(2)可以设置输入范围,即可以设置输入数字的最小、最大值。

(3)可以设置输入数字的小数点位数。

基于上面需求,控件需要做如下几个方面处理:

(1)继承控件接收的按键事件,如果按的不是数字键直接返回。

(2)增加控件可以接收的最大值Max、最小值属性Min。

(3)增加控件小数点设置的属性dotnum。

(4)响应控件焦点离开消息(cm_exit),在这里处理控件中录入的内容,使其大于Min、小于Max且小数点位数等于dotnum。

下面结合该控件代码,通过代码的注释详细地讲解处理过程。

3 设计控件图标

Delphi控件要使用一个图标显示在Delphi的控件面板上供开发者使用(由上面设计可知,该控件要显示在Delphi控件面板的samples面板上),控件的图标有如下要求(注意图标文件名和图标名称的区别,下面有讲述):

(1)图标文件名称为dcr(后缀名为dcr)格式,该类文件可认为是图标的容器,其中可以包含多个图标。

(2)图标文件名要与控件单元的文件名一致,如该控件的图标文件名应该为NumEdit.dcr。

(3)图标名称要与控件类名称一致。如本控件的图标名称应该为TNumEdit。

(4)图标文件要与控件单元文件位于同一目录下,这样发布控件时候才能关联到一块。

下面通过用Delphi自带的工具image editor设计本控件的图标来介绍控件图标的设计,步骤如下:

(1)通过Delphi的菜单“tools-image editor”打开图标编辑工具。

(2)通过file-new-component resource file(.dcr)建立一个图标文件。把它保存在NumEdit.pas相同目录下,名称为:NumEdit.dcr。此时image-editor如图2所示。

(3)在图2中,鼠标右键点“Contents”,然后在弹出的菜单中选择“new-Bitmap”打开“Bitmap Properties”框,设置属性后点“OK”即可创建一个默认名称为“bitmap1”的位图,把其名称修改为“TNumEdit”,并双击打开,然后通过画笔等工具设计该位图,示意如图3所示。

设计位图根据自己的喜好,这里做简单的设计,设计好后保存即可。至此,该控件对应的图标已经设计好。

4 安装发布控件

目前已经完成了控件的设计,该控件包含两个文件,代码文件NumEdit.pas和图标文件NumEdit.dcr。下面介绍如何把该控件安装到Delphi的控件面板上供开发者使用,步骤如下:

(1)把这两个文件拷贝到指定目录下,对于自定义控件,作为一种好的开发习惯,一般在Delphi安装目录下建立custom目录并把自定义控件拷贝过去。这里也建立customnumedit目录,然后把该控件的文件拷贝到该目录下,如下:

(2)在Delphi库中增加该控件的路径。通过菜单:

“tools-environment-options”打开“environment-options”对话框,选择“library”属性页,然后单击“library path”后的选项按钮打开“Directories”对话框,在该对话框中手工录入或者通过选项按钮把控件路径填写进去,如图4所示。

点击“Add”按钮,点击“OK”,回到“environment-options”对话框,再点击“OK”完成库文件路径添加。

(3)控件安装。通过前两步的处理,就可以安装控件了,通过菜单“Component-Install Component”打开控件安装对话框,点击“into existing package”属性页中的“unit file name”后的“Browse”按钮,选中要安装的控件文件NumEdit.pas,然后点“OK”按钮即可。系统提示是否编译,选择编译后便可以把该控件安装到Delphi的控件面板,如图5所示。

至此已经完成了一个控件从最开始的需求分析到最终发布使用的全部过程。

Delphi2010 篇4

高性能是Microsoft Fox Pro数据库管理系统特别是数据库引擎的最大特点。Visual Fox Pro (VFP) 关系型数据库引进了对象模型, 加强了引擎的存取速度, 增强了客户/服务器特性, 使整个管理系统的功能变得更加强大。然而, 这些强大功能的代价是管理系统变得更加复杂, 一方面很容易开发出性能稳定、面向对象、使用远程数据的应用程序;另一方面也很难避免低性能应用程序的出现。Delphi是由Borland公司研制的、面向对象的应用程序开发软件, 其良好的开发环境和卓越的性能使得开发人员愿意用它来开发应用软件系统, 但是, 对于性能要求较高、数据库管理复杂的大型信息管理系统, 使用其开发显得有些力不从心。为此, 将使用Delphi开发的应用软件中的数据转换到Visual Foxpro中, 利用Visual Foxpro的强大功能完成数据的管理、查询等对性能要求较高的操作, 同时可以利用Delphi强大运算功能弥补Foxpro的不足, 使Foxpro和Delphi各自发挥其强大的性能, 有机的将这两种开发软件结合在一起, 完成相应的软件编程任务。

(二) 环境要求

在Visual Foxpro读取Delphi的paradox数据库时, 需要使用ODBC进行链接, 使用手工“ODBC Paradox设置”对话框如下表。

如果在Foxpro中设置ODBC链接, 其代码如下:

(三) Delphi中的设定

在Foxpro中调用Delphi的Paradox数据库之前, 必须首先安装Delphi的数据库引擎BDE, 将该数据库引擎装入到计算机硬盘的相应目录中, 这样调用才能被正常的进行, 下面列出了BDE的关键文件及其作用, 可以以此作为依据来尝试精简BDE驱动程序。1.不可缺少的文件。Blw32.dll:语言驱动函数库。Idapi32.dll:BDE基本函数库。Fareast.bll、Usa.bll:远东语言及美国语言驱动程序, 对中文软件不可缺少。Idr20009.dll:错误信息库。2.数据库驱动程序 (根据需要选择一个或多个) 。Idasci32.dll:Ascii文本数据库驱动程序函数库, 如果不用Ascii文本数据库, 可以不要。Iddao32.dll:Access数据库驱动程序函数库, 如果不用Access数据库, 可以不要。Iddbas32.dll:d Base数据库驱动程序函数库, 如果不用d Base数据库, 可以不要。Idodbc32.dll:ODBC数据库驱动程序函数库, 如果不用ODBC数据库, 可以不要。Idpdx32.dll:Paradox数据库驱动程序函数库, 如果不用Paradox数据库, 可以不要。

3. 其它驱动程序和配置文件 (根据需要选择一个或多个) 。

Idbat32.dll:批操作驱动程序函数库, 如果不用TBatch Move控件或Dbi Batch Move类函数, 可以不要。Iddr32.dll:Data Repository驱动程序函数库, 如果不用Data Repository功能, 可以不要。Idprov32.dll:BDE Data Set provide驱动程序函数库, 如果不用TProvider控件, 可以不要。Idqbe32.dll:QBE驱动程序函数库, 如果不用Query By Example, 可以不要。Idsql32.dll:SQL查询驱动程序函数库, 如果不用TQuery进行查询, 可以不要。Idapi32.cfg:BDE配置文件, 如果程序中没有特殊要求, 可以不要。也可以在BDE管理器中设置正确后再分发。4.其它文件 (一般不用) 。BDE32.HLP、BDE32.CNT:BDE帮助文件, 可以不要。Bde Admin.exe、Bde Admin.HLP、Bde Admin.CNT:BDE管理器及帮助文件, 如果不会发生要求软件用户自己配置BDE的情况时, 可以不要。其它*.BLL:其它国家和地区的语言驱动程序, 可以不要。Data Bump.EXE、Data Bump.HLP、Data Bump.CNT:数据库数据转移工具及帮助文件, 可以不要。Localsql.HLP、Localsql.CNT:SQL查询语句帮助文件, 可以不要。Sqllnk32.HLP、Sqllnk32.CNT:SQL连接帮助文件, 可以不要。在根据需要选择文件后, 还要写注册表文件。可以手工设置, 但最好在程序中设置, 在发现注册表中没有相应键值时写入, 用TReg File对象用不了几行代码的。需要设置的注册表键值有 (在调用数据库操作前需要有正确的键值存在) :数据驱动程序所在目录的设置:

BorlandBLW32LOCALE_LIB1="usa.bll"。按此办法即可有效减少BDE驱动程序的大小, 例如只用TTable控件操作Paradox数据库, 则只要Idapi32.dll、Blw32.dll、Idr20009.dll、Fareast.bll、Usa.bll、Idpdx32.dll六个文件即可。这些文件可放在任何一个目录, 只要在注册表指明即可, BDE由9M最多可减到少于2M。

(四) Foxpro中的调用关系

从Visual Foxpro8.0版本以后, 提供了一个CA对象, 该对象可在编程时直接调用打开任意类型的数据库。Cursor Adapter为多种数据连接方式提供了一种统一的访问接口, 这使得在ODBC、ADO和XML连接方式之间进行转换变得非常轻松。下面给出使用该对象打开Paradox数据的代码:

(五) 结束语

结合实际工作中Visual Foxpro调用Delephi的Paradox数据库过程, 阐述了调用时的环境、设置和程序代码等等, 希望给在实践中碰到这类问题的编程人员提供一些有用的借鉴之处。

摘要:文章介绍了在实际工作中Visual Foxpro调用Delphi的环境、设置及程序代码等。

关键词:程序设计,Visual Foxpro,Delphi,调用

参考文献

[1]张洪举.Visual Foxpro程序设计参考手册[M].人民邮电出版社, 2004.

用Delphi开发奖金发放系统 篇5

随着计算机及其网络技术的飞速发展和社会信息化水平的不断提高,利用计算机技术逐步取代传统的手工操作方式,信息技术已成为衡量一个国家、企事业单位发展水平的重要标准。我校实际情况是各个部门、各位教师都配备了微型计算机,在一定程度上提高了办公效率,但有限的技术能力使我们的硬件资源利用率较低。例如:我校的奖金统计工作一直采用传统手工作业方式,操作人员的工作量大,为了保证数据的准确性,通常要进行多次计算,从而导致工作效率低下。

2 需求分析

奖金发放系统是对学校所有教职员工工作量的统计,并计算奖金金额。根据我校实际情况,奖金发放系统应有以下要求:1.数据的保密;2.系统运行稳定;3.具有多种统计查询功能;4.具有报表打印功能。此外还应具有操作简单、界面简洁、符合使用者的习惯等特点。

3 开发工具及数据库

本系统是属于单机版的数据库软件。采用Delphi7.0开发工具,它是一种可视化、面向对象和采用时间驱动程序方式的结构化高级程序设计语言,它是目前开发数据库应用程序的一种强有力的工具。数据库应用程序首先是利用数据库部件与BDE建立联系,然后再通过BDE与数据库联系。数据库系统选择使用SQL Server 2000,主要是因为:首先,SQL Server具有很好的安全性,能够排除所有未经授权的非法用户的访问,确保了SQL Server服务器的安全性;第二,容量庞大,数据表中的记录行数只受服务器硬盘空间的限制。

4 系统设计

4.1 总体框架

根据学校要求和实际情况,设计系统总体框架见图1,系统功能主要体现在各模块上。

4.2 数据库表结构

在数据库的设计中,应用软件工程的思想和方法按照规范设计法进行设计。一般来说,基本表设计应尽量满足规范性的要求,以满足数据的一致性。由于数据的冗余度与数据的一致性成反比,只有冗余最小,一致性才最大,因此基本表的设计的规范性有助于降低数据冗余度,但中间表与临时表以及统计分析表的设计就不用严格遵守3NF范式,因为它们不代表实体,只是用来存储经过处理的统计数据,供分析、查询和报表打印之用。该系统共使用了12个表,由于篇幅有限仅列出以下2个表。

5 奖金发放系统

下面对一些关键性的问题作出具体说明和解决方案。注:以下图片中敏感数据均做了模糊处理。

5.1 系统登录

启动系统的时候,系统会要求用户输入用户名、密码、权限级别。连续3次输入错误,则自动关闭登录对话框。输入正确时,系统根据权限级别给出相应的权限,完全控制、查询、报表输出和仅查询3种不同权限。

5.2 基础数据录入

在使用系统之前需要操作员输入所有课时部门信息、职工信息。由于部门编号、职工编号等信息在数据库中具有唯一性,因此该系统采用了自动编号功能以保证数据的唯一性。

5.3 系统设置

本系统的大部分数据实现自动输入和自动统计的功能,因此在正式使用前要设置以下系统参数。使用过程中,用户要及时地备份数据,以便在恢复数据的时候使用。

5.4 奖金录入

奖金录入分为历月录入和年终录入,用户操作简单,以图2为例选择科室部门和职工姓名,右侧7个文本框,最多需要输入学时数,其他数据均能自动输入,如果输入行政、后勤人员的奖金,不需输入任何数据,直接单击“添加”按钮即可。实现该功能的部分关键代码如下:

5.5 数据查询

该系统具有灵活的查询系统,1)查询各科室的奖金发放和课时数据。2)按姓名或拼音代码查询每次奖金数据。3)查询全校奖金发放数据(仅具有最高权限用户可用)。

5.6 报表输出

该模块是奖金系统最重要的一部分,分为四部分1)历月分组明细,统计每月每科室奖金发放明细。2)历月汇总报表,统计每月各科室奖金总计,全校奖金总计。3)年终个人明细,统计个人一年内所有工作量及各种奖金补贴明细。4)年终汇总数据,统计学校全年发放奖金金额。

6 结语

本系统现已在莱阳卫校投入使用2年多的时间,从使用情况来看,系统运行正常,未发生奖金统计错误,极大提高工作效率,减轻了工作人员的工作负担,并且大大节省了经费的开支。任何一个软件系统,总有一个逐步完善的过程,该系统也是如此,目前还存在着一些问题,如:系统还不能实现局域网内部查询,该系统还需进一步完善和升级,以实现更强大的功能。

参考文献

[1]吕静骅,史进.SQL Server2000基础教程.北京:清华大学出版社,2001.

[2]周兴华,李增民,臧洪光.Delphi7数据库项目案例导航.北京:清华大学出版社,2005.

Delphi2010 篇6

Excel是微软公司出品的Office系列办公软件中的一个组件,确切地说,它是一个电子表格软件,可以用来制作电子表格、完成许多复杂的数据运算,进行数据的分析和预测并且具有强大的制作图表的功能;对教师来说就是处理统计学生成绩的好帮手。

Excel提供了强大的数据处理功能,ADO提供了访问数据库的方法,而要在Delphi中利用ADO来访问Excel中的数据,那么得先清楚在Delphi中ADO的相关组件,并且应该将一个Excel数据文件想像为一个关系数据库,Excel文件中的每个工作表就对应该数据库中的一个表,而工作表中的每一列就是表的列。

2 ADO的相关组件

在Delphi中有一套采用ADO的组件,它们不同于基于Borland数据库引擎(BDE)的连接和数据集组件。利用这些采用ADO的组件,可以与ADO数据库相联系,读取数据库中的数据并执行相应的操作,而且此过程完全不需要使用BDE。

2.1 ADOConnecfion组件

ADOConnection组件被用于建立一个与ADO数据存储的连接。为了执行命令、获取数据和操作数据,可以把多个ADO数据集和命令组件与一个ADOConnection组件相关联以共享连接。

ADOConnection组件有两个重要的属性,分别是ConnectionString和Connected。

ConnectionString属性是用来指明数据库的连接信息(包括数据源的提供者、数据库文件和用户名及密码等)的属性,可以在程序设计阶段,通过对象观察器来设置它。而Connected属性用来说明一个与数据库的联系是否被激活。

ADOC0nnection组件可以调用Open方法来建立与Connecti0nStrlng属性里指明的数据库的联系,而凋用Cancel方法来取消一个准备与ADO数据库建立的联系。

2.2 ADODataSet组件

ADODataSet组件是用于获取和操纵ADO数据的主要组件。可以操纵数据表、执行SQL语句和存储过程并且能通过ADOConnection组件或直接与一个数据存储建立连接它封装了Trable、Query和StoredProe等组件为基于BDE程序提供的功能。

ADODataSet组件有几个重要属性,分别是Active、ConnectionString、CommandText、CommandType和Connection。

Active属性用来标明ADODataSet组件的打开与否ConnectionString属性和ADOConnection组件中的ConnectionString属性是一样的含义。CommandText属性可以用来表达语句、数据表名或者执行的存储过程,该属性为一个文本值。CommandType属性用来指明CommandText属性的类型,两者要一致。Connecfion属性功能和ConnectionString属性一样,不过这里要和ADOConnection组件结合起来使用,而ConnectionString属性不使用ADOConnection组件直接和数据库联系。

2.3 AD0Tab1e组件

AD0Tab1e组件是用于通过一个单个的数据库表获取和操作数据集的组件但也具有建立组件与ADO数据库之间联系的属性和方法,如Active、ConnectionString和Connection等,含义和ADODataSet组件里的一样。

3 数据浏览组件

数据浏览组件用于输入,操作或浏览数据库中的数据,提供一个操作数据库数据的可视界面。这里用到的主要有DB-Grid组件和DBNavigator组件。

3.1 TDBGfid组件

DBGrid组件主要用于将数据源的信息显示在网格中,它以行和列组成的栅格显示数据库中的数据,类似于电子表格。重要的属性有:Columns、DataSource和Fields等。

Columns属性用来读取和设置网络中列的特性,如列的宽和列的名称等,DataSource属性是最重要的属性,用于指明要显示的数据的来源,通过Fields属性可以直接访问作为网格中一列数据集中的字段对象。

3.2 DBNavigator组件

DBNavigator组件主要用于在数据集中进行记录导航和为用户操纵数据集中的记录提供一组简单明了的控制按钮。单击其中的按钮可以实现向前向后移动记录指针、插入记录、修改记录、提交修改、取消修改、删除记录以及刷新记录的显示等操作它有一个重要属性,就是DataSource属性,用来把它和被其控制的数据集联系起来。在这里,把DBNavigator组件和DBGrid组件结合起来一起使用。

除了要用到上述组件之外,还需要用到一个重要组件DataSource组件DataSource组件在这里用于连接ADO的数据集组件和数据浏览组件。

4 利用ADO访问Excel文件

ADODataSet组件和AD0Table组件都是数据集组件,都有一个ConnectionString属性。如果利用这两个数据集组件的ConnectionString属性进行连接数据库的话,就不需要ADO-Connection组件了,并且这两个数据集组件也只需要用一个就可以了。

4.1 设置ADOConnection

设置ADOConnection的ConnectionString构造时,OLEDB的提供者要选择Microsoft Jet 4.0 OLE DB Provider作为ADO的驱动程序。这本来是用于连接Access数据库的驱动程序,但也可打开Excel文件。连接的数据库名称当然就是要打开的Excel文件,注意扩展名是*.xls,而不是*.mdb。

最关键的一点是,还要设置扩展属性Extended Properties为“Excel 8.0”,否则,测试连接时会报告无法识别数据格式的错误。Extended Properties的属性值在“所有”参数页中输入。最后,设置完成后的ConnectionString中的各项参数为:

4.2 设置ADODataSet(ADOTable)

(1)将ADODataSet或ADOTable连接到刚才的ADOConnection。如果不用ADOConnection,也可以参照上面的方法直接设置ADODataSet或ADOTable的ConnectionString属性。

(2)对于ADODataSet,需要将CommandType属性设置为cmdTableDirect,而对于ADOTable,则将TableDirect属性设置为True。因为,访问Excel文件是直接数据文件访问,不是通过SQL语句来操作游标访问的。如果不设置直接访问,则系统会报告SQL语句格式错误等信息。

当下拉ADODataSet中的CommandText属性或ADOTable的TableName属性时,就可以选择要打开的工作表了。

5 结语

Microsoft Excel是常用的一种电子表格软件,经常用它来处理一些数据。而如何把其中的数据当数据库中的数据利用ADO组件进行访问,就是文中所研究的内容,并对在Delphi中利用ADO组件访问Excel文件的技术方法与实现步骤,进行了详细的介绍。

参考文献

[1]王珊,萨师煊.数据库系统概论.高等教育出版社,2006.

[2]张晓蕾,沈大林等.Delphi编程篇.电子工业出版社,2004.

[3]杨宇,张莉.新概念Delphi7教程.第五版,吉林电子出版社,2008.

Delphi2010 篇7

控件数组为使用共享公共功能的控件组提供了一种方便的方式。例如, 控件组可以用来显示相关数据, 或者在单击时提供相关的操作。控件数组处理多个控件统一事件上很方便此功能使得创建一个能够响应由多个不同控件引发的事件的处理程序方法成为可能。使用控件数组可开发出一些小型游戏。控件数组的灵活使用能够大大提高编程人员的编程效率。Delphi未提供专门的控件数组, 本文主要讨论的是如何在Delphi中模拟实现控件数组。

2、控件数组原理

标准的控件数组是由一组相同类型的控件组成。它们共用一个控件名, 具有相同的属性, 执行相似的操作, 同时共享同样的事件过程。为区分控件数组中的各个元素, 具有此功能的程序设计语言通常会把各元素的下标值传送给过程, 过程从接收到的下标来区分不同的元素。

3、Delphi中控件数组的模拟实现

3.1 Delphi模拟控件数组原理分析

VB是具有的灵活的控件数组功能的典型程序设计语言, 但在DELPHI中却未专门提供控件数组, 在很多DELPHI的教材中都提到一个方法:TLISTSTRING;使TLISTSTRING类控制容器中的控件以达到使用控件数组的目的;另外一种途径是由用户自己来开发带数组性质的VCL组件。这两种方法对DELPHI的是初级入门者是不现实的。使用TLISTSTRING类代码量大, 难以阅读, 使用时非常吃力;由用户自己制作组件这又不是DELPHI初级使用者所能完成的工作。在Delphi中, 各控件排列的先后顺序和它被拖放到窗体上的先后顺序相同。这个顺序是可以人为修改的, 通过修改这个顺序, 能够实现控件的数组化。

3.2 Delphi模拟控件数组模拟实现方案

使用Delphi窗体的Components[I], Component Count;Component Index三个属性模拟控件的数组化。各属性相关含义如下:

Components[I]属性表示当前窗体上所有属于T C o m p o nent类的对象形成的数组Component Count属性表示当前窗体上所有属于TComponent类的对象的个数Component Index属性表示当前窗体上属于TComponent类的某个对象在Components[I]数组中的下标

将窗体上所有Button组件的Caption属性设为Tbutton, 代码如下:

Var I:integer;

for I:=0 to component Count-1 do‘利用for循环判断某对象是否属于Tbutton类

分析:For循环用于遍历当前窗体上所有属于TComponent类的对象;if语句用于判断某个对象是否属于Tbutton类;如果条件成立, 则将该对象的Caption属性修改为'TButton'。通过上述分析, 不难发现, 这种方法有一定局限性, 最明显的是设计人员并不知道Components[I]到底代表哪一个控件, 因此只能用遍历的方法进行筛选, 这不仅影响了程序执行的效率, 也带来编程上的繁琐问题。

要解决上述问题, 就要用到TComponent类的Component Index属性。在delphi 7.0中, Component Index属性表示当前窗体上属于TComponent类的某个对象在Components[I]数组中的下标并且该属性是一个可读写属性;该属性的默认值是该组件的添加次序 (从0开始计数) , 那么就可以利用这一属性在组件生成时将同类组件的Component Index属性设置为连续的自然数数列;比如:n, n+1, n+2, ……, n+m;如果我们要修改窗体上的该类组件, 只需要遍历Components[I]数组的部分下标 (比如Components[n]……Components[n+m]) 就可以实现。从而提高程序执行效率, 同时也避免了编程上的繁琐问题。

实现方案如下:

例如:在窗体上添加若干个组件各组件布置如下图所示:

现修改四个Edit组件的Color属性为cl Red、Enabled属性为False、字体设为宋体。最简单的方法是逐句编写代码:

但如果Tedit组件数量很多并且要修改它的多个属性, 代码就变得很冗长。于是采用循环来实现。

实现方法如下:

第一步、要使所有要操作的Tedit组件的Component Index属性的值有序并连续。实现方法有两种:

方法一、窗体上各组件Component Index属性值与它被拖放到窗体上的先后顺序相同。一次把所有需要的TEdit组件依次加入窗体, 这样就可以实现所有Tedit组件的Component Index属性的值有序并连续;然后测试出最先加入窗体的TEdit组件的Componen t Index属性值。最后要说明的是:此后该窗体任何组件的Componen t Index属性值不能用代码修改。

方法二、在窗体生成时通过代码修改所有Tedit组件的Comp onent Index属性的值有序并连续。代码如下:

edit1.Component Index:=2;‘设置各Edit控件的Compo nent Index属性并使其连续

第二步、利用要操作组件Component Index属性的有序性和连续性编写循环程序用于实现窗体上所有TEdit组件的属性修改。程序代码如下:

实例中窗体上共有12个TComponent类组件, 即Components[I]数组共有12个Tcomponent类元素 (I的取值为0到11) , 通过我们上面第一步的调整使TEdit组件在Components[I]数组中的下标分别为2、3、4、5, 基于此我们可以知道:当I? (2, 5) 时, components[I]对象一定是TEdit类的实例, 因此我们就不用再判断components[I]对象是不是TEdit类的实例, 同时也不用再遍历、判断另外的的八个对象;这样不仅使程序的代码结构简洁, 而且使程序的运行速度提高了3~4倍。

4、结语

控件数组的灵活使用能够大大提高编程效率, 在Delphi中利用模拟控件数组弥补了Delphi中没有真正的控件数组这一缺憾, 使用该方法模拟实现的控件数组更加灵活, 其中的控件允许属于不同的类。在现代应用领域中控件数组有着广泛的应用, 其中在实现局域网中多个站点互连中显示了其独特的方便性。随着对软件优化度要求的提高, 控件数组也会有更广泛的使用。

摘要:利用窗体的Components[I], ComponentCount;ComponentIndex三个属性模拟实现控件的数组化。

关键词:Delphi,控件数组,Components[I]

参考文献

【Delphi2010】推荐阅读:

上一篇:项目教学实习下一篇:Siemens系统

本站热搜

    相关推荐