文档章节

TClientDataSet[7]: 辨析 Field、FieldDef、Fields、FieldDefs、FieldList、FieldDefList

涂孟超
 涂孟超
发布于 2014/09/26 15:33
字数 775
阅读 8
收藏 0

TField TFieldDef TFields TFieldDefs TFieldList、TFieldDefList
Assign
AssignValue
Clear
FocusControl
GetData
GetParentComponent
HasParent
IsBlob
IsValidChar
RefreshLookupList
SetData
SetFieldType
SetParentComponent
Validate

AsBCD
AsBoolean
AsCurrency
AsDateTime
AsSQLTimeStamp
AsSQLTimeStampOffset
AsSingle
AsFloat
AsExtended
AsInteger
AsLargeInt
AsString
AsWideString
AsAnsiString
AsBytes
AsVariant
AttributeSet
Calculated
CanModify
CurValue
DataSet
DataSize
DataType
DisplayName
DisplayText
EditMask
EditMaskPtr
FieldNo
FullName
IsIndexField
IsNull
Lookup
LookupList
NewValue
Offset
OldValue
ParentField
Size
Text
ValidChars
Value
Alignment
AutoGenerateValue
CustomConstraint
ConstraintErrorMessage
DefaultExpression
DisplayLabel
DisplayWidth
FieldKind
FieldName
HasConstraints
Index
ImportedConstraint
LookupDataSet
LookupKeyFields
LookupResultField
KeyFields
LookupCache
Origin
ProviderFlags
ReadOnly
Required
Visible

OnChange
OnGetText
OnSetText
OnValidate
AddChild
Assign
CreateField
HasChildDefs

FieldClass
FieldNo
InternalCalcField
ParentDef
Required
Attributes
ChildDefs
DataType
Precision
Size
Name
GetNamePath
Collection
ID
Index
DisplayName
Add
CheckFieldName
CheckFieldNames
Clear
FindField
FieldByName
FieldByNumber
GetEnumerator
GetFieldNames
IndexOf
Remove
Count
DataSet
Fields
AddFieldDef
Find
Update
Add
GetItemNames
IndexOf
Owner
Assign
BeginUpdate
Clear
Delete
EndUpdate
FindItemID
GetEnumerator
GetNamePath
Insert

HiddenFields
Items
ParentDef
DataSet
Updated
Capacity
Count
ItemClass
FieldByName
Find
Fields(FieldDefs)
Update
DataSet
Add
AddObject
Clear
Delete
Exchange
IndexOf
Insert
InsertObject
Sort
CustomSort
Append
AddStrings
Assign
BeginUpdate
EndUpdate
Equals
GetEnumerator
GetText
IndexOfName
IndexOfObject
LoadFromFile
LoadFromStream
Move
SaveToFile
SaveToStream
SetText

Duplicates
Sorted
CaseSensitive
Capacity
CommaText
Count
Delimiter
DelimitedText
LineBreak
Names
Objects
QuoteChar
Values
ValueFromIndex
NameValueSeparator
StrictDelimiter
Strings
Text
StringsAdapter

OnChange
OnChanging
OwnsObjects



发现这些东西早在 Delphi 3 的时候就比较成熟了, 至今也基本没有变化; 我暂时对它们的理解是:

1、Fields 是 Field 的集合, 它们主要用于运行时对字段元数据和字段值的访问.

2、FieldDefs 是 FieldDef 的集合, 它们主要用于构建数据集(表)和对字段元数据的访问.

3、FieldList 和 FieldDefList 分别是访问 Field 和 FieldDef 的快捷列表; 主要使用其 FieldByName、Find 方法和默认的数组属性访问数据; 它们是只读的.

4、通过 Fields、FieldList、Field 可以得到更多信息, 但必须是在数据集打开的情况下;
通过 FieldDefs、FieldDefList、FieldDef 只能获取定义时的信息, 但即使在数据集关闭时也能使用.

5、顾名思义 FieldDef 是用于定义表的, 但通过 Field 也可以定义表;
用 FieldDef 定义表很方便, 用 Field 可以定义一些更复杂的表;
每个 FieldDef 都会对应一个 Field, 但一个 Field 不一定有 FieldDef 对应;
程序运行后 FieldDef 不能再改变, 而 Field 与 Fields 则可以动态改变或增减.

设计时两者是结合使用的.

下面是通过三种方法动态建表的代码:
//使用 TFieldDef 建表:
begin
  with ClientDataSet1.FieldDefs do
  begin
    Add('Name', ftString, 12, True); { True 表示是必填字段 }
    Add('Age', ftInteger);
  end;
  ClientDataSet1.CreateDataSet;
end;

//使用 TField(这里是用其子类)建表:
begin
  with TStringField.Create(Self) do
  begin
    FieldName := 'Name';
    Size := 12;
    Required := True; { 必填字段 }
    DataSet := ClientDataSet1;
  end;
  with TIntegerField.Create(Self) do
  begin
    FieldName := 'Age';
    DataSet := ClientDataSet1;
  end;
  ClientDataSet1.CreateDataSet;
end;

//混合使用(这好像就是设计时的情形):
var
  F: TIntegerField;
begin
  with ClientDataSet1.FieldDefs.AddFieldDef do
  begin
    Name := 'Name';
    DataType := ftString;
    Size := 12;
    Required := True;
    CreateField(ClientDataSet1);
  end;
  with ClientDataSet1.FieldDefs.AddFieldDef do
  begin
    Name := 'Age';
    DataType := ftInteger;
    { 指定最大值和最小值 }
    F := CreateField(ClientDataSet1) as TIntegerField;
    F.MinValue := 0;
    F.MaxValue := 150;
  end;
  ClientDataSet1.CreateDataSet;
end;

 
 
 
 
 

 

 

  

字段类型列表:
TStringField          { ftString         ; String }
TWideStringField      { ftWideString     ; WideString }
TNumericField         { }
TIntegerField         { ftInteger        ; Integer }
TLongWordField        { ftLongWord       ; LongWord }
TSmallintField        { ftSmallint       ; Smallint }
TShortintField        { ftShortint       ; Shortint }
TByteField            { ftByte           ; Byte }
TLargeintField        { ftLargeint       ; Int64 }
TWordField            { ftWord           ; Word }
TAutoIncField         { ftAutoInc        ; Integer }
TUnsignedAutoIncField { ftAutoInc        ; Cardinal }
TFloatField           { ftFloat          ; Double }
TSingleField          { ftSingle         ; Single }
TCurrencyField        { ftCurrency       ; Currency }
TExtendedField        { ftExtended       ; Extended }
TBooleanField         { ftBoolean        ; WordBool }
TDateTimeField        { ftDateTime       ; DateTime }
TSQLTimeStampField    { ftTimeStamp      ; TSQLTimeStamp }
TSQLTimeStampField    { ftTimeStampOffset; TSQLTimeStampOffset }
TDateField            { ftDate           ; Integer }
TTimeField            { ftTime           ; Integer }
TBinaryField          { }
TBytesField           { ftBytes          ; * }
TVarBytesField        { ftVarBytes       ; * }
TBCDField             { ftBCD            ; * }
TFMTBCDField          { ftFMTBCD         ; * }
TBlobField            { ftBlob           ; * }
TMemoField            { ftMemo           ; * }
TWideMemoField        { ftWideMemo       ; * }
TGraphicField         { ftGraphic        ; * }
TObjectField          { }
TADTField             { ftADT            ; * }
TArrayField           { ftArray          ; * }
TDataSetField         { ftDataSet        ; TDataSet }
TReferenceField       { ftReference      ; * }
TVariantField         { ftVariant        ; OleVariant }
TInterfaceField       { ftInterface      ; IUnknown }
TIDispatchField       { ftIDispatch      ; IDispatch }
TGuidField            { ftGuid           ; TGUID }
TAggregateField       { ftUnknown        ; * }

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2010/01/27/1657349.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
superobject 序列 数据集 之间转化

superobject 序列数据集 unit uDBJson; interface {$HINTS OFF} usesSysUtils, Classes, Variants, DB, DBClient, SuperObject; typeTTableJSon = class private const const const const co......

vga
2016/08/31
18
0
TClientDataSet的使用以及遇到的坑

在Delphi未加入之前,似乎是没有内存表控件的(也许有,可能我不知道吧),但是可以用控件来做内存表使用,即使有了可以使用,我还是觉得更好用一些。 做内存表使用 创建 排序 在定义字段后,...

业余码农
01/12
0
0
有关foreach循环问题,只循环一条数据,怎么做啊

foreach($fieldlist as $field=>$fielddata) { if($fields[$field]=='') continue; echo ''.$fielddata[0].''; } 把上面那个方法改下,只循环一条,怎么做啊 他现在出来循环两条了,怎么修改......

赵立成
2014/01/24
2.8K
5
如何写一个pg函数,可以把任意一个表生成insert语句

看到stackoverflow有人问,如何给任意一个表生成insert语句,为了方便把数据从一个测试库转到另一个测试库上,为此,我写了一个小函数,没有做严格的测试,有兴趣的可以拿来试试。 create lan...

吕不为
2016/12/08
28
0
JSon SuperObject 研究2:数据集与JSON对象互转

JSon SuperObject 研究2:数据集与JSON对象互转 JSON不能完全替代XML,但绝对是未来的大势所趋,其优点是简单、体积小、解析更快、解析占用资源更少。在delphi中,数据集是最常用数据存取方式...

vga
2014/12/20
0
1

没有更多内容

加载失败,请刷新页面

加载更多

面向对象继承

第1章 面向对象 1.1 知识回顾 1.Java中的数据类型 2.引用数据类型String中的方法 3.IO流_读写文件 1.2 面向对象概念回顾 什么叫面向对象编程?有人是这么理解的 也有人说不对,面向对象编程是你...

stars永恒
29分钟前
0
0
Java-深入HashMap原理及内部存储结构

本文将通过如下简单的代码来分析HashMap的内部数据结构的变化过程。 public static void main(String[] args) { Map<String, String> map = new HashMap<>(); for (int i = 0; i ......

小刀爱编程
44分钟前
1
0
高并发和分布式中的幂等处理

概念 抽象概念 幂等(idempotent,idempotentce)是一个数学与计算机概念,常见于抽象代数中。 在计算机概念中,就是针对一个操作,不管做多少次,产生效果或返回的结果都是一样的。 场景距...

细节探索者
44分钟前
0
0
2019年1月份最新阿里内推Java后端面试题

阿里一面题目: osi七层网络模型,五层网络模型,每次层分别有哪些协议死锁产生的条件, 以及如何避免死锁,银行家算法,产生死锁后如何解决如何判断链表有环虚拟机类加载机制,双亲委派模型...

别打我会飞
今天
2
0
MIT 6.828 main.c文件分析

#include <inc/x86.h>#include <inc/elf.h> /*这是一个简单粗略的boot loader,它唯一的工作就是从硬盘的第一个扇区启动格式为ELF的内核镜像硬盘布局这个程序(包括boot.S和mai...

FeanLau
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部