转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
多层数据库开发七:字 段 对 象         ★★★★

多层数据库开发七:字 段 对 象

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2245 更新时间:2009/4/23 18:30:19
                                               第七章 字 段 对 象
  Delphi 4用TField来操纵数据集中的字段。不过,具体的字段实际上都是TField的派生类,因此,应用程序很少需要直接用到TField。
  当打开一个数据集的时候,Delphi 4会自动生成动态的、与数据类型有关的字段对象。当然,可以用字段编辑器创建永久的字段对象来代替动态的字段对象。
7.1 具体的字段对象
  Delphi 4支持24种类型的字段,它们都是从TField继承下来的,包括:
.TADTFieldOracle8的ADT字段。ADT是Abstract Data Type的缩写;
.TAggregateFieldTClientDataSet中自动维护的总计字段;
.TArrayField数组字段;
.TAutoIncFieldParadox表中的自动增长字段,取值范围从-2,147,483,648到2,147,483,647;
.TBCDFieldBCD字段;
.TBooleanField布尔字段;
.TBlobField二进制数据,理论长度2GB;
.TBytesField二进制数据,理论长度2GB;
.TCurrencyField实数字段,取值范围从5.0E-324到1.7E308;
.TDataSetField代表嵌套表的字段;
.TDateField日期字段;
.TDateTimeField日期和时间字段;
.TFloatField浮点字段,取值范围从5.0 * 10E-324到1.7 * 10E308;
.TBytesField二进制数据,最大字节数255;
.TIntegerField整型字段,取值范围从-2,147,483,648到2,147,483,647;
.TLargeintField长整型字段,取值范围从-263到263;
.TMemoField备注字段,理论长度2GB;
.TNumericField实数,取值范围从3.4 E-4932到1.1E4932;
.TReferenceField一个引用其他数据集的指针;
.TSmallintField整型字段,取值范围从-32,768到32,768;
.TStringField字符串字段,最大字节数8192,包括NULL字符;
.TTimeField时间字段;
.TVarBytesField二进制数据,最大字节数255;
.TWordField无符号整数,取值范围从0到65,535。
7.2 理解字段对象
  就像Delphi 4的数据访问构件如TTable、TQuery一样,TField也是非可视的,甚至在设计期都不能直接看到它,只能通过数据访问构件和数据控件间接地访问它。
  Delphi 4创建的字段对象与字段的数据类型有关,例如,对于字符串类型的字段,创建的是TStringField对象。对于浮点类型的字段,创建的是TFloatField对象。下面我们就以TFloatField为例,看看怎样操纵字段的显示属性:
.Alignment用于指定数据的对齐方式,如左对齐、居中、右对齐等;
.DisplayWidth用于指定数据的显示宽度(以字符数为单位);
.DisplayFormat用于指定数据的显示格式,如小数点的位置;
.EditFormat指定在编辑数据时显示数据的格式。
  对于不同类型的字段对象来说,它们的属性大部分是相同的,但也有一些属性是专用的,例如,TFloatField的Precision属性就是其他字段对象所没有的。字段对象的大部分属性只是影响数据在窗体上的显示属性,但也有些属性如Precision还影响用户输入和修改数据的格式。
  在一个打开的数据集中,所有的字段对象要么都是动态的字段对象,要么都是永久的字段对象。下面将详细介绍这两种不同类型的字段对象。
7.3 动态字段对象
  默认情况下,当把一个数据集放到数据模块上并且打开它时,Delphi 4就会为数据集中的每一个字段自动生成一个动态的字段对象。之所以说它是动态的,一方面是因为它是自动生成的,另一方面是因为它总是反映物理数据集的情况,对于不同类型的字段来说,生成的字段对象的类型也不同。如果数据集的结构或其他信息发生变化,当应用程序重新打开这个数据集时,就会基于最新的结构和信息重建所有的字段对象。
  动态字段对象的生存期是临时的,当数据集关闭时,这些字段对象也跟着消失。
  由此可见,动态字段对象的最大特点就是适应性强。利用这个特点,可以编写一些通用的数据库应用程序,它可以打开不同的数据集。要在应用程序中使用动态字段对象,您首先要把一个数据集构件放到窗体或数据模块上,再把一个TDataSource构件放到窗体或数据模块上,设置它的DataSet属性指定数据集构件。把一个数据控件放到窗体上,设置它的DataSource属性指定TDataSource 构件,有必要的话,还要指定要显示哪个字段。最后,把数据集构件的Active属性设为True,打开数据集,此时,就会自动创建动态字段对象。
  动态字段对象的不足之处是,要改变字段的显示属性、数据格式,需编写代码。即使您愿意写代码,无论如何也无法改变字段的显示顺序,不能把某些字段暂时隐去,也不能增加新的字段如“计算字段”、“Lookup字段”。而且,也不能改变字段的数据类型。所以,很多情况下,应用程序往往要用永久字段对象来代替动态字段对象。
7.4 永久字段对象
  用永久字段对象代替动态字段对象的最大好处是,可以在设计期设置它的属性。此外,永久字段对象还具有以下优势:
.可以选择部分字段;
.可以增加新的字段,包括“计算字段”和“Lookup字段”;
.可以改变原有字段的数据类型。
7.4.1 怎样创建永久字段对象
  要创建永久字段对象,就要用到字段编辑器。用永久字段对象能够保证应用程序每次运行时,用户看到的总是这几个字段,即使数据集的结构已发生改变。这样,不管是数据控件还是程序代码都不必担心因为数据集的结构发生变化而导致数据控件和程序代码不能适应。不过,如果一个永久字段对象基于的源字段被删除,就会触发异常。
  创建永久字段对象的一般步骤是:
  第一步是把一个数据集构件如TTable放到数据模块上,设置DatabaseName属性指定要访问的数据库,设置TableName属性指定要访问的表。
  第二步是双击TTable构件,Delphi 4将打开字段编辑器,如图7.1所示。
  图7.1 字段编辑器
  字段编辑器由标题栏、导航按钮和一个可复选的字段列表组成。
  标题栏显示数据集的名称包括数据集所在的窗体或数据模块的名称,例如,假设数据集叫Customers,放在数据模块CustomerData上,标题栏就显示CustomerData.Customers。
  四个导航按钮用于浏览数据集的记录,它们能够向前翻一个记录、向后翻一个记录、翻到第一个记录以及翻到最后一个记录。如果数据集的Active属性设为False或者数据集是空的,这四个导航按钮将变灰。
  导航按钮下面是一个可复选的列表框,列出了所有的永久字段。刚开始打开字段编辑器的时候,列表是空的,因为默认情况下,Delphi 4生成的是动态字段对象。
  第三步是单击鼠标右键,在弹出的菜单中选择“Add Fields”命令,弹出“AddFields”对话框,如图7.2所示。
  图7.2 选择字段
  选择一个或几个字段,然后单击OK按钮。Delphi 4将根据您选择的字段创建永久字段对象,这些永久字段对象的名称将出现在字段编辑器中,如图7.3所示。
  图7.3 列出永久字段对象的名称
  导航按钮都是灰的,可能是因为数据集没打开。只要创建了一个永久字段对象,以后每次打开数据集时,Delphi 4就不会创建动态字段对象。对于同一个数据集来说,动态字段对象和永久字段对象不可能同时存在。
  每次打开数据集时,Delphi 4都会在数据集中检查每个永久字段对象所基于的字段是否还存在,如果字段已不存在,Delphi 4将触发异常,并且拒绝打开数据集。
  一旦生成了永久字段对象,就可以把它看作是一个构件,在对象观察器中设置它的属性,建立事件句柄。事实上,一个永久字段对象就是一个构件。
  对于那些数据控件来说,只要创建了一个永久字段对象,就只有创建了永久字段对象的字段才能被数据控件显示。
  创建了永久字段对象后,可以在单元文件中找到该字段对象的声明,示例如下:
TypeTForm1 = Class(TForm)
Table1: TTable;
Button1: TButton;
Table1XXH1: TStringField;
Table1XXH2: TBytesField;
Procedure Button1Click(Sender: TObject);
Private{ Private declarations }
Public{ Public declarations }
End;
7.4.2 调整永久字段的顺序
  永久字段对象在字段编辑器中的排列顺序就是这些字段在数据库栅格(TDBGrid)中的显示顺序。因此,要改变字段的显示顺序,可以在字段编辑器中改变永久字段对象的排列顺序,调整的办法是:先选择一个字段,然后用鼠标把它拖到另一个位置,也可以按Ctrl+Up键把字段的顺序上移,按Ctrl+Dn键把字段的顺序下移。
  如果选择了多个字段,而且这些字段本来并不是连续的,把它们拖到一个新位置后,这些本来不连续的字段现在也变成连续的了。
7.4.3 增加新的字段
  使用永久字段对象的另一个好处是,可以增加新的字段或者替换原有的字段。Delphi 4允许增加五种类型的字段:
.Data用于替换原有的字段,例如,改变字段的数据类型;
.Calculated增加一个“计算字段”,该字段的值由OnCalcFields事件给出;
.InternalCalc类似于“计算字段”,用于多层体系结构的客户程序中;
.Lookup增加一个“Lookup”字段;
.Aggregate增加一个“总计字段”。
  上述五种类型的字段仅仅用于显示,它们的数据只在运行期有意义,不会影响原来的数据集。
  要增加一个新的字段,在字段编辑器上单击鼠标右键,在弹出的菜单中选择“New Field”命令,弹出“New Field”对话框,如图7.4所示
  图7.4 创建新字段对话框
  “New Field”对话框由三部分组成:“Field Properties”分组框、“FieldType”分组框和“Lookup Definition”分组框。
  “Field Type”分组框中有三个单选按钮,用于指定新创建的字段的生成类型(不是数据类型),默认的类型是“Data”,如果选择“Lookup”,下面的“LookupDefinition”分组框就被激活。此外,也可以选择“Calculated”表示要增加一个“计算字段”。
  如果数据集是TClientDataSet,“Field Type”框中就多了两个单选按钮,一个是“InternalCalc”,另一个是“Aggregate”。
  “Field Properties”分组框用于设置字段的属性,其中,“Name”框用于输入字段的名称,Delphi 4会根据输入的名称字段在“Component”框中生成字段对象的名称。“Type”框用于选择字段的数据类型,Delphi 4支持生成ADT类型的字段。“Size”框用于输入字段的长度,对于String、Bytes和VarBytes类型的字段必须输入长度,其他类型的字段则不必。
7.4.4 增加“Data”类型的字段
  增加一个“Data”类型的字段主要是为了替换原有的某个字段,尤其是替换字段的数据类型。例如,假设一个字段的类型本来是TSmallIntField,现在想把它改成TIntegerField,由于通过编程是无法改变一个字段的数据类型的,只能先把这个字段删掉,再增加一个“Data”类型的字段,把它的数据类型设为Integer。
  增加一个“Data”类型的字段的一般步骤是:
  第一步是在字段编辑器中删除要被替代的永久字段,记住它的名称。
  第二步是单击鼠标右键,在弹出的菜单中选择“New Field”命令,弹出“NewField”对话框。在“Name”框输入字段的名称,必须与要替换的字段的名称完全相同,这样才能从原来这个字段获取数据。
  第三步是设置新字段的数据类型和长度,必须与原来的数据类型不同。对于String类型的字段来说,仅仅改变字段长度是不够的。要注意的是,数据类型既要有所区别,新的数据类型还必须与原有的数据兼容。
  第四步是在“Field Type”分组框内选择“Data”,然后单击OK按钮。至此,就创建了一个新的字段,该字段将代替原有的某个字段。
7.4.5 增加“Calculated”类型的字段
  “计算字段”值是在处理OnCalcFields事件的句柄中给出的。增加一个“Calculated”类型的字段的一般步骤是(前面几个公共的步骤省略):
  第一步是在“Name”框内输入字段的名称,不能与已有字段的名称相同。
  第二步是在“Type”框内选择字段的数据类型,在“Size”框内指定数据长度,如果字段的类型是TStringField、TBytesField或TVarBytesField的话。
  第三步是在“Field Type”分组框内选择“Calculated”,然后单击OK按钮。
  第四步是在窗体或数据模块上单击数据集构件,然后建立处理OnCalcFields事件的句柄,在句柄中给出“计算字段”的值,程序示例如下:
  CityStateZip.Value := City.Value + '''', '''' + State.Value + '''' '''' + Zip.Value;
  如果没有建立处理OnCalcFields事件的句柄,或者在句柄中没有给出“计算字段”的值,“计算字段”的值就是空的。
  要说明的是,如果数据集是TClientDataSet或TQuery,还可以增加一个“InternalCalc”类型的字段。“InternalCalc”类型的字段与“Calculated”类型的字段非常相似,不同的是,对于TClientDataSet来说,“InternalCalc”类型的字段的值随其他字段的值一起被存取。
7.4.6 增加“Lookup”类型的字段
  所谓“Lookup”类型的字段,就是它的值能且只能从另一个数据集中获取。
  增加一个“Lookup”类型的字段的一般步骤是(前面几个公共的步骤省略):
  第一步是在“Name”框内输入字段的名称,不能与已有字段的名称相同。
  第二步是在“Type”框内选择字段的数据类型,在“Size”框内指定数据长度,如果字段的类型是TStringField、TBytesField或TVarBytesField的话。
  第三步是在“Field Type”分组框内选择“Lookup”,此时将激活下面的“LookupDefinition”分组框。
  第四步是在“Lookup Definition”分组框的“Dataset”框内选择一个数据集,这个数据集不能是“计算字段”所在的数据集,否则会触发异常。
  第五步是在“Lookup Definition”分组框的“Key Fields”框内选择一个字段作为关键字段,如果要用几个字段作为关键字段,您可以直接在“Key Fields”框内输入这些字段的名称,彼此之间用分号隔开。作为关键字段的字段必须都建立了永久字段对象。
  第六步是在“Lookup Definition”分组框的“Lookup Keys”框内选择一个字段作为关键字段,用来与第五步选择的字段匹配。注意:这里列出的是“Dataset”框内指定的数据集中的字段。如果要用几个字段作为关键字段,您可以直接在“Lookup Keys”框内输入这些字段的名称,彼此之间用分号隔开。
  第七步是在“Lookup Definition”分组框的“Result Field”框内选择一个字段,该字段的值将返回给新增加的“Lookup”类型的字段。
  如果既定义了“计算字段”,又定义了“Lookup”类型的字段,“Lookup”类型的字段的值将先确定,这样,在处理OnCalcFields事件的句柄中,可以引用“Lookup”类型的字段的值。
  TField有一个LookupCache属性,对于“Lookup”类型的字段来说,如果把这个属性设为True,当第一次打开数据集时,把“Lookup”类型的字段的值放到缓存中,以后就可以直接从缓存中读取该字段的值,而不必从另一个数据集中去检索。显然,这可以提高应用程序的性能,尤其是当另一个数据集位于远程服务器上的时候。
  不过,如果“KeyFields”框内指定的字段太多,最好把LookupCache属性设为False。
  注意:如果是在运行期把LookupCache属性设为True,应当调用RefreshLookupList以初始化缓存。
  这里顺便要介绍一个技巧,可以通过编程为“Lookup”类型的字段提供数据,这样可以避开从另一个数据集中获取数据。首先要创建一个TLookupList的对象实例,调用Add建立一组数据的列表。然后设置字段的LookupList属性指定TLookupList的对象实例,并且把LookupCache属性设为True。以后,“Lookup”类型的字段的值就从列表中读取。
7.4.7 增加“Aggregate”类型的字段
  只能在TClientDataSet建立的数据集中增加“Aggregate”类型的字段,其一般步骤如下:
  第一步是在“Name”框内输入字段的名称,不能与已有字段的名称相同。
  第二步是在“Type”框内选择字段的数据类型,一般选“Aggregate”。
  第三步是在“Field Type”分组框内选择“Aggregate”,然后单击OK按钮。
  第四步是在字段编辑器中单击刚刚建立的“Aggregate”类型的字段,设置Expression属性指定一个表达式。
7.4.8 删除永久字段对象
  要删除一个永久字段对象,首先要打开字段编辑器,然后选择要删除的字段,按下Del键。也可以用鼠标右键单击要删除的字段,在弹出的菜单中选择“Delete”命令。
  对于永久字段对象来说,一旦被删掉,应用程序就不再能访问它。如果以后又想恢复,您只能重新创建一个新的永久字段对象,原先的属性和事件句柄都丢失了。
  如果把所有的永久字段

[1] [2] [3]  下一页


[VB.NET程序]使用vb.net 对 Windows Form 按列排序 ListView 项…  [Web开发]对 ASP.NET 应用程序启动调试应如何设置(包括远程…
[演讲致辞]情理之中,意料之内,—— 对 李 慧 娟 现 象 的 思…  
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台