ClientDataSet的隐含功能-计算机二级考试-考试大

ClientDataSet组件支持很多特性,其中一些与三级结构有关,而且还可以用在其他环境中。该组件说明了一个数据库完全映象在内存中,这使得可以进行动态的操作,如建立一个索引,其他数据集合通常不支持该特性。例如,为了对查询分类,我们通常是重新执行它。为了索引一个局部表格,需要定义索引。只有ADO数据集合有一些与ClientDataSet一样的动态索引功能。

索引并不是ClientDataSet提供的全部功能。当我们拥有了索引之后,可以基于它定义组,可能是多级别的分组。对于确定一个记录在组中的位置(头、尾或中间位置),甚至有专门的支持。在组或整个数据表格中,我们可以定义总计;也就是说,可以动态计算整个表格或当前组中一列的总和或平均值。数据不需要发送给物理服务器,因为这些总计操作发生在内存中。我们甚至可以定义新的总计字段,可以直接与数据敏感控件相连。

注意,所有这些特性不但可以用与MIDAS应用程序,还可以用与客户机/服务器,甚至是局部瘦应用程序。事实上,ClientDataSet组件可以从远程MIDAS连接、局部数据集合(建立起数据的快照)、或局部文件(就象在公文包模式中一样,但使用的只是在客户机数据集合中定义的整个表格)中获得起数据。

这是另一个需要研究的领域,所以将向读者演示两个范例来突出关键特性。这些范例没有基于MIDAS,而是基于局部表格。

1、定义抽象的数据的数据类型

VCL数据库支持的一个有趣的特性是,当我们基于局部文件使用ClientDataSet时,可以定义抽象的数据类型。只需在窗体上放置一个ClientDataSet组件,为FieldDefs属性激活编辑器,添加两个字段,并为他们的DataType属性选择ftADT值。现在,移到ChildDefs属性,并定义子字段,下面是AdtDemo范例的字段定义:

FieldDefs =

item

Name = \'ID\'

DataType = ftInteger

end

item

name = \'Name\'

ChildDefs =

item

name = \'LastName\'

DataType = ftString

size = 20

end

item

name = \'FirstName\'

datatype = ftString

size = 20

end>

datatype = ftADT

size = 2

end>

在此,只需为ClientDataSet的FileName属性输入一个名称,用鼠标右键单击组件,并选择Create Table命令即可;我们准备编译并运行应用程序(在向它连接数据敏感组件之后)。数据会自动从提供的文件中读取,关闭程序时会将变化保存在文件中。

如果使用DBGrid查看结果数据集合,它允许我们展开或压缩ADT字段的子字段。我们可以通过定义字段的OnGetText事件提供它的压缩值(在Delphi4 中有一个缺省值,但Delphi5中没有):

procedure TForm1.ClientDataSet1NameGetText(Sender:TField;

var Text:String;DisplayText:Boolean);

begin

Text:=ClientDataSet1NameFirstName.AsString+\' \'+

ClientDataSet1NameLastName.AsString;

end;

2、动态索引

一旦ClientDataSet上有了数据,数据就已全部处于内存中了。当我们将组件基于局部文件中时(如在AdtDemo范例中),在程序启动时整个文件就被装载到了内存总。这与从Paradox数据表格中装载数据(BDE只装载正访问的字段)不同。

将整个表格装在内存中的优点是,我们可以快速地对它进行分类。使用ClientDataSet组件,我们可以通过赋给IndexFieldNames属性相应的字段名来实现分类。在AdtDemo(以及很多程序)中,该索引变动会在单击DBGrid控件的标题(触发OnTitleClick事件)时执行:

procedure TForm1.DBGrid1TitleClick(Column:TColumn);

begin

if Column.Field.FullName = \'Name\' then

ClientDataSet1.IndexFieldNames := \'Name.LastName\'

else

ClientDataSet1.IndexFieldNames := Column.Field.FullName;

end;

由于ADT定义,程序使用了字段的FullName属性(而不是FieldName属性)。事实上,对于子字段来说,索引应该基于Name.LastName,而不是LastName。而且ADT字段不能自己被索引,所以如果选择它,程序会使用LastName子字段作为索引。这些索引不是持久性的;它们没有保存在文件中,而只是在内存中应用于数据。

技巧:ClientDataSet可以拥有基于计算字段的索引,特别是内部计算字段,这种字段类型只能用于该数据集合。来源:考试大-计算机二级考试

ClientDataSet组件支持很多特性,其中一些与三级结构有关,而且还可以用在其他环境中。该组件说明了一个数据库完全映象在内存中,这使得可以进行动态的操作,如建立一个索引,其他数据集合通常不支持该特性。例如,为了对查询分类,我们通常是重新执行它。为了索引一个局部表格,需要定义索引。只有ADO数据集合有一些与ClientDataSet一样的动态索引功能。

索引并不是ClientDataSet提供的全部功能。当我们拥有了索引之后,可以基于它定义组,可能是多级别的分组。对于确定一个记录在组中的位置(头、尾或中间位置),甚至有专门的支持。在组或整个数据表格中,我们可以定义总计;也就是说,可以动态计算整个表格或当前组中一列的总和或平均值。数据不需要发送给物理服务器,因为这些总计操作发生在内存中。我们甚至可以定义新的总计字段,可以直接与数据敏感控件相连。

注意,所有这些特性不但可以用与MIDAS应用程序,还可以用与客户机/服务器,甚至是局部瘦应用程序。事实上,ClientDataSet组件可以从远程MIDAS连接、局部数据集合(建立起数据的快照)、或局部文件(就象在公文包模式中一样,但使用的只是在客户机数据集合中定义的整个表格)中获得起数据。

这是另一个需要研究的领域,所以将向读者演示两个范例来突出关键特性。这些范例没有基于MIDAS,而是基于局部表格。

1、定义抽象的数据的数据类型

VCL数据库支持的一个有趣的特性是,当我们基于局部文件使用ClientDataSet时,可以定义抽象的数据类型。只需在窗体上放置一个ClientDataSet组件,为FieldDefs属性激活编辑器,添加两个字段,并为他们的DataType属性选择ftADT值。现在,移到ChildDefs属性,并定义子字段,下面是AdtDemo范例的字段定义:

FieldDefs =

item

Name = \'ID\'

DataType = ftInteger

end

item

name = \'Name\'

ChildDefs =

item

name = \'LastName\'

DataType = ftString

size = 20

end

item

name = \'FirstName\'

datatype = ftString

size = 20

end>

datatype = ftADT

size = 2

end>

在此,只需为ClientDataSet的FileName属性输入一个名称,用鼠标右键单击组件,并选择Create Table命令即可;我们准备编译并运行应用程序(在向它连接数据敏感组件之后)。数据会自动从提供的文件中读取,关闭程序时会将变化保存在文件中。

如果使用DBGrid查看结果数据集合,它允许我们展开或压缩ADT字段的子字段。我们可以通过定义字段的OnGetText事件提供它的压缩值(在Delphi4 中有一个缺省值,但Delphi5中没有):

procedure TForm1.ClientDataSet1NameGetText(Sender:TField;

var Text:String;DisplayText:Boolean);

begin

Text:=ClientDataSet1NameFirstName.AsString+\' \'+

ClientDataSet1NameLastName.AsString;

end;

2、动态索引

一旦ClientDataSet上有了数据,数据就已全部处于内存中了。当我们将组件基于局部文件中时(如在AdtDemo范例中),在程序启动时整个文件就被装载到了内存总。这与从Paradox数据表格中装载数据(BDE只装载正访问的字段)不同。

将整个表格装在内存中的优点是,我们可以快速地对它进行分类。使用ClientDataSet组件,我们可以通过赋给IndexFieldNames属性相应的字段名来实现分类。在AdtDemo(以及很多程序)中,该索引变动会在单击DBGrid控件的标题(触发OnTitleClick事件)时执行:

procedure TForm1.DBGrid1TitleClick(Column:TColumn);

begin

if Column.Field.FullName = \'Name\' then

ClientDataSet1.IndexFieldNames := \'Name.LastName\'

else

ClientDataSet1.IndexFieldNames := Column.Field.FullName;

end;

由于ADT定义,程序使用了字段的FullName属性(而不是FieldName属性)。事实上,对于子字段来说,索引应该基于Name.LastName,而不是LastName。而且ADT字段不能自己被索引,所以如果选择它,程序会使用LastName子字段作为索引。这些索引不是持久性的;它们没有保存在文件中,而只是在内存中应用于数据。

技巧:ClientDataSet可以拥有基于计算字段的索引,特别是内部计算字段,这种字段类型只能用于该数据集合。来源:考试大-计算机二级考试


相关文章

  • 2012物流师考试第四章物流成本管理模拟试题
  • 2012物流师考试第四章物流成本管理模拟试题 一.单选题 1.物流活动中所消耗的物化劳动和活劳动的货币表现称为(B) A.物流价格 B.物流成本 C.物流效益 D.物流价值 2.整个物流技术和物理管理的发展过程就是不断追求(B)降低的过程. ...查看


  • 高三物理教学总结与反思
  • 高三物理教学总结与反思 一年一度的高考已经结束了,回顾高三一年的教学工作,有快乐也有苦恼,有经验也有教训,当然更多的是反思,反思一年工作中的可取之处和不足之处,希望在未来的教学工作尤其是高三教学工作中能够做到有的放矢.目标明确.措施得当,更 ...查看


  • 不同学业水平学生数学问题图式的差异性研究
  • 张夏雨/喻平 [专题名称]初中数学教与学 [专 题 号]G352 [复印期号]2011年05期 [原文出处]<数学教育学报>(津)2011年1期第45-48页 [作者简介]张夏雨(1983- ),女,江苏常州人,硕士,主要从事数 ...查看


  • 地理信息系统考试复习题
  • 一.名词解释(共25分,每题5分) 1.地理信息系统:具有信息系统的各种特点,是一种决策支持系统.地理信息系统是空间数据的管理系统. 2.元数据:元数据就是"关于数据的数据",描述数据的数据. 3.栅格数据结构:栅格结构 ...查看


  • 一.二级建造师.工程师职称考试报名流程
  • 一级建造师考试相关问题 一级建造师报考条件 (一)凡遵守国家法律.法规,具备以下条件之一者,可以申请参加一级建造师执业资格考试: 1.取得工程类或工程经济类大学专科学历,工作满6年,其中从事建设工程项目施工管理工作满4年. 2.取得工程类或 ...查看


  • 2015一建市政万能解题模板
  • 1.一建市政专业案例题惯用的几种问法: ①做法等是否正确?(两种类型:以上或一条)为什么?正确的应怎么做? ②文件.报告.记录.台帐等内容是否全面?否则请补充完整! ③制定的措施等是否妥当?往往是移花接木.权限滥用.工序或顺序颠倒.时间错误 ...查看


  • 2012年度河南省二级建造师报名方法
  • 关于2012年度河南省二级建造师执业资格 考试有关问题的通知各省辖市人力资源和社会保障局.住房和城乡建设局(委),省直及中央驻豫有关单位: 根据住房和城乡建设部执业资格注册中心<关于二○一二年度二级建造师执业资格考试(统考卷)有关工作 ...查看


  • 浙江省大学英语三级新考试大纲
  • 浙江省大学英语三级新考试大纲 一.大学英语三级考试组成 大学英语三级考试组成由听力理解.阅读理解.综合测试.写作四个部分组成.各部分测试内容.题型和分值比例如下: 二.题型分解 1.听力理解 听力理解(Listening Comprehen ...查看


  • 中学英语新课程标准 1
  • 中学英语新课程标准 目 录 第一部分 前言 一.课程性质 二.基本理念 三.课程设计 第二部分 课程目标 第三部分 内容标准 一.语言技能 二.语言知识 三.情感态度 四.学习策略 五.文化意识 第四部分 实施建议 一.教学建议 二.评价建 ...查看


热门内容