使用数据控件.docx
- 文档编号:1877081
- 上传时间:2022-10-24
- 格式:DOCX
- 页数:52
- 大小:210.55KB
使用数据控件.docx
《使用数据控件.docx》由会员分享,可在线阅读,更多相关《使用数据控件.docx(52页珍藏版)》请在冰豆网上搜索。
使用数据控件
第14章使用数据控件
组件面板的DataControls属性页包含了VCL控件(其中有一个TFieldDataLink辅助对象)。
TFieldDataLink允许数据控件被连接到一个DataSource。
DataSource是连接控件(和用户交互的)和dataset(和数据交互的)的桥梁。
数据感知控件有附加的特性和事件,这使得编写商务逻辑并把商务逻辑与那些控件联系起来成为可能。
商务逻辑指的是一种规则,这种规则定义数据怎样被使用。
例如,在美国一个SocialSecurity(社会安全)号码是九位数字并且其格式为###-##-####。
编写一个包含SocialSecurity号码的应用程序可能包括定义一个格式规则和一个确认检查以确保每一个元素要么是十进制数字要么是短划线。
格式规则和确认检查约束了一个数据是或者不是一个SocialSecurity号码。
定义数据怎样被约束的规则是组成一般术语商务规则的一部分。
有三个地方可以放置商务规则:
数据库、中间层或者客户层。
当约束被放置到在客户层中时,客户端被叫做胖客户端。
胖客户端应用程序通常是两层的。
当规则被放置到数据库层的时候——例如使用触发器、数据约束和存储过程和视图——这就被叫做胖服务器。
这种应用程序也是两层应用程序。
当定义一个分离的中间层并包含商务规则时,我们称这种应用程序为三层应用程序。
数据控件支持胖和瘦客户端、胖和瘦服务器以及两层的和三层的开发。
数据控件允许您在特性中将格式约束和在事件中的其他商务逻辑(如TDBEdit控件中的OnChange事件)联合起来。
Delphi企业版捆绑了MIDAS(MultitierDistributedApplicationServicesSuite,多层分布式应用程序服务组)组件,这方便了创建中间层,并且大多数RDBMS(RelationalDatabaseManagementSystems,关系数据库管理系统)服务器都有过剩的约束数据的方法。
在哪里放置约束依赖于您正在使用哪种类型的设计。
本章我们将介绍数据控件和与它们相关的TField对象,列举控件和它们的特性和事件,这些特性和方法对数据怎样被管理的商务规则的定义提供了方便(第15章介绍建立瘦客户端、三层应用程序)。
14.1简述两层和三层设计
两层应用程序开发使用一个客户端应用程序和一个数据库服务器。
三层应用程序开发使用一个客户端应用程序、一个定义商务逻辑的服务器应用程序和一个第三数据库服务器层。
中间层可以是一个或者更多的服务器应用程序,客户端层使用这些应用程序和数据库层对话。
通常在编程过程中一个很好的规则是将数据约束放置到与数据库尽可能近的地方,原因可以通过特性工作的方式来说明。
从外面看,特性像数据;对用户透明的是特性有用于读和写数据的访问方法,该数据约束了当前字段的一些使用。
在数据附近放置约束就是将规则与数据绑定在一起。
胖客户端应用程序包含商务规则。
您每一次想在该客户端的其他位置上访问数据的时候,您必须复制这个规则,该规则约束了数据被使用的方式。
这样您就有了许多代码重复了同样的规则,换句话说,同时需要写、测试和维护更多的代码。
RDBMS被定义为与其他一些客户端应用程序一起使用,这使得人们可以使用类似于MicrosoftAccess的应用程序来修改数据。
如果商务逻辑驻留在您的客户端应用程序中,那么约束就不会被其他客户端应用程序误用。
胖服务器的设计在服务器上放置了商务规则。
当胖服务器的设计仍然可以在两层应用中使用时,商务规则要临近数据,从而减少被其他客户端应用程序误用的可能性。
另一个好处是:
定义一个胖服务器意味着只要给每一部分数据定义商务规则一次。
很有趣的是,似乎现有的胖客户端应用程序比胖服务器要多;这种情况的存在可能是因为程序员也创建数据库。
通过在胖服务器设计中添加中间层使您可以更大程度地控制怎样访问数据库和控制客户端应用程序类型增加的数量和种类;任何附加的商务规则在数据库服务器层中定义时看起来很不自然,它可以被定义到中间层。
使用单独的中间层还意味着不同类型的多客户端可以同时重新使用同样的中间层。
权衡一下来看,胖客户端、两层应用程序看起来更便于开发。
使用数据库约束、触发器、存储过程和视图要求有一个熟练掌握所选择的RDBMS的数据库开发人员。
要设计面向对象的中间层建议要有一个面向对象的体系结构以获得其携带的中间层。
很不幸的是,许多软件工程只能由程序员和管理人员来完成,这可能说明了胖客户端、两层设计的卓越实现。
问题是,是不是胖客户端、两层应用程序的开发更廉价呢?
答案可能是不。
它们表面上很廉价是因为数据库和客户端用于程序会很快出台,但是最终它们将变得很笨拙。
在开发的开始所得到的将在开发的后期永远地失去。
是不是胖服务器、三层应用程序的开发更廉价呢?
通常这些应用程序要求更高报酬的设计师和数据库分析员、在设计的开始阶段需要更多的时间和一个组织得很好的流程。
传统的应用程序不同于新型的应用程序:
对象模型和数据库模型。
模型也暗示了需要购买昂贵的CASE(ComputerAidedSoftwareEnginnering,计算机辅助软件工程)工具。
Delphi客户端服务器的售价为$2500;RationalRose(对象模型工具)售价为每工作站$4500。
所有这些附加的支出并不能一定保证成功。
工具的大小、复杂程度和有效性,受训人员以及管理部门决定了怎样创建特定应用程序的因素。
两层与三层应用程序和胖与瘦客户端应用程序都有优点和缺陷。
只有根据实际情况为指导方针才有助于确定怎样创建特定的应用程序。
实用工具、原型和小应用程序都是在胖客户端、两层应用程序开发中很好的选择。
如果使用CASE工具,以及雇佣有经验的设计师和数据库分析员来创建胖服务器、三层应用程序,一些大规模的、复杂的应用程序会有更好的机会实现。
如果他们想创建三层应用程序,首先他们要做的是结束重新创建VCL已经存在的。
在您的队伍中注入经验丰富的程序员和指导人员将有助于确保成功。
在本章,例子程序示范了怎样创建胖客户端应用程序,以说明数据控件和TField对象的特性。
但是,胖客户端、两层应用程序既不是首选的方法也不是惟一的方法。
每一个工程的需求由工程的预算、范围、复杂性和参与者的特点来决定。
MIDAS(将在第15章中介绍)更便于进行三层应用程序的开发。
14.2数据控件概览
组件面板中的DataControls属性页包含了Standard面板上的许多控件。
数据控件是标准控件的子类,数据控件添加了一个TFieldDataLink对象便于将控件连接到数据源。
附加的特性和事件根据控件的需要被添加进来。
将数据控件想象成普通的控件,但是数据被直接写到underlying字段值中。
例如TDBEdit控件是带有FieldDataLink特性的TEdit控件。
本节简要介绍数据控件。
一些特定的控件将在本章的后面部分作详细的说明。
14.2.1DBGrid
TDBGrid是TCustomGrid控件。
它包含了数据的行和列。
在栅格中每一行代表数据集中的一行。
每一列代表数据集中的一个字段。
关系数据库可能会返回数据库中多个表的行(参考第13章关于TUpdateQuery组件的部分学习怎样使异类查询行为与同类查询一样,这使得查询表现为可写)。
DBGrid引入了一个Columns集合和设计时列编辑器,这方便了在栅格中显示数据库中的数据(请参考14.4节“DBGrid控件”中有关DBGrid的详细介绍)。
14.2.2DBNavigator
TDBNavigator是一个带有按钮数组的TCustomPanel控件。
它被连接到一个数据源,每一个按钮都是其中一个数据集方法调用的可视化比喻(单击按钮如同调用一个数据集方法)。
从左到右(如图14.1所示)的操作是First、Prior、Next、Last、Insert、Delete、Edit、Post、Cancel和Refresh。
图14.1TDBNaviagtor控件,用于调用数据集方法
导航器并不完成这些行为。
DBNavigator有一个DataSource特性。
请回顾第13章,每一个DataSource指向一个数据集;DBNavigator的BtnClick方法决定用户单击了哪一个按钮并使用DataSource.DataSet对象引用调用这个方法。
例如,单击Insert按钮(如图所示)将调用DataSource.DataSet.Insert方法。
14.2.3DBText
TDBText是一个TCustomLabel控件,对于显示来自数据库的只读数据尤其有用。
用户不能直接在TDBText控件中编辑文本。
要把一个数据控件同一个dataset字段联系起来,给DataSource特性指定一个DataSource组件并指定一个来自DataSet组件(一个表或者一个查询)的一个字段名。
有效的字段名将自动地从DataSet(该DataSet被指向DataSource组件的DataSet特性)中获取。
14.2.4DBEdit
DBEdit是TCustomEdit的子孙控件,该控件是一个多种用途的数据库控件,可以被用于编辑任何可以以文本显示的数据。
字母和数字字段包含在合适的数据库字段中。
14.2.5DBMemo
DBMemo是一个TCustomMemo控件。
在TDBMemo中显示的匹配字段类型是memo字段(请参考14.7节“动态和静态字段”了解更多有关字段的信息)。
可以被作为TMemoFields来显示的Underlying数据类型是真正的数据库中的memo类型,数据库支持memo类型或可变长字符字段。
14.2.6DBImage
DBImage是TCustomControl而不是TImage的继承控件。
这个控件可以显示任何可以归类于TPicture的图像类型。
有效的Picture对象类型包括位图、图标和元文件图形。
类型过滤文件包括.jpg、.jpeg、.bmp、.ico、.emf和.wmf文件。
14.2.7DBListBox
该控件显示静态值的列表。
设置该控件的DataField特性和DataSource特性,在列表框中所选中的值就是被设置字段的值。
通过设置Items特性(一个TStrings特性)DBListBox选项可以在设计时或者运行时被添加。
如果您需要动态表查找值,请使用TDBLookupListbox控件。
14.2.8DBComboBox
DBComboBox是一个TCustomComboBox控件。
在TStrings类型Items特性中添加选项,这些选项存储在DataField特性和DataSource特性所指定的字段中。
您可以用下面的方法在运行时给DBListBox控件或者DBComboBox控件添加选项。
DBComboBox.Items.Add('True');
DBComboBox.Items.Add('False');
如果没有添加其他的值,那么在组合框中两种可能的选项是'True'和'False',可以用于Boolean或者文本字段。
14.2.9DBCheckBox
对于DBComboBox控件如果只有true和false两种选项的时候,另外一种方法是使用DBCheckBox。
True表示选择,false表示不选择。
除了DataField和DataSource特性,还有两个可替代的特性:
ValueChecked和ValueUnchecked,这允许您设置DBCheckBox控件的显示状态为选择或者不选择,默认值是true和false,但是您可以使用black和white,red和green,0和1,或者yes和no,只要适合您的需要都可以。
14.2.10DBLookupListBox
DBLookupListBox控件有两个已经熟悉的DataField和DataSource特性表示所选择的项从哪里获取,除此之外,还有
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 数据 控件
![提示](https://static.bdocx.com/images/bang_tan.gif)