Delphi中DB.PAS变迁概略

为了写QDB,我在群里收集了大家提供的从2007~XE7版的[Data.]DB.PAS文件,并进行一些对比,以试图找出它的变迁历史,我们以2007版(VER180,VER185)为基准,记录下变更的内容:

【RAD Studio 2009-VER200】

+ TFieldType 新增以下类型:

* WideString改为UnicodeString

+ TFieldDefs增加了一个保护的成员函数来获取字段定义类:

* TFieldDefs构造函数改成了虚方法

* TIndexDef构造函数改成了虚方法

+ TIndexDefs加入了一保护的成员函数来获取索引定义类:

* TFlatList的构造方法变成虚方法

* TFields的构造方法变成虚方法

* TLookupList的构造方法变成虚方法

+ TField加入AsExtended、AsAnsiString、AsBytes属性及GetLookupListClass函数,GetData和SetData加入了overload,当然其子类也就加入了相应的实现,就略过不表。

+ 新增TLongwordField继承自TNumericField;TByteField继承自TIntegerField;TExtendedField继承自TNumericField;

* TCheckConstraints的构造方法变成虚方法

* TBlobData由String替换为TBytes

+ TParam新增以下函数和属性:

+ TParams加入了一保护的成员函数来获取参数类:

+ IParamImplementation、TParamObject、TParamDataSetObject、TParamParamsObject、TParamStreamObject

+ TPSCommandType新增ctServerMethod

* IProviderSupport2被标记为作废

* TBookmark由AnsiString改为TBytes

+ 新增TRecordBuffer ,类型对应于 PByte

* TBufferList由array of PChar改为 array of  TRecordBuffer

* TBlobByteData由array of Byte改为TBytes

* TDataSet的CalcBuffer等记录缓冲区类型由PChar改变了TRecordBuffer,Bookmark由TBookmarkStr改为TBookmark

+ TDataSet.GetFieldClass加入了一个重载

+ TDataSet增加以下虚拟方法

+ ftFixedSizeTypes集全新增[ftLongWord, ftShortInt, ftByte, ftExtended]

+ DefaultFieldClasses新增[TStringField,TLongWordField, TShortintField, TByteField, TExtendedField],Interval类型被映射到TStringField了

+ FieldTypeNames和FieldTypeVarMap新增新类型的名称

【RAD Studio 2010-VER210】

+ TFieldType新增类型[ftTimeStampOffset, ftObject, ftSingle]

+ TNamedItem新增哈希

+ 新增Int64别名Largeint定义

+ TField新增以下属性,并且有些函数改成了内联

+ 新增TSingleField、TSQLTimeStampOffsetField实现

+ TParam也加入了AsSQLTimeStampOffset、AsSingle、AsLargeInt属性

* TParamObject、TParamStreamObject及相关定义完全变了

+ ftFixedSizeTypes新增ftTimeStampOffset, ftSingle,同样DefaultFieldClasses、FieldTypeNames和FieldTypeVarMap都增加了新类型

【RadStudio XE-VER220】

* 基本可以认为无变化,你是将Windows单元的引用改为条件编译选项了。

【RadStudio XE2-VER230】

* 很多函数的整数类型参数被换成了NativeInt,也就是说NativeInt正式进入DB.PAS的视野。

+ 新增TDataSetCommandStates 枚举类型和IDataSetCommandSupport接口

【RadStudio XE3-VER240】

* TList相关的成员全部改为了泛型TList<类型>

* TFieldChars在移动平台标记为作废了。

+ ISubDataSet接口及TValueBuffer类型(映射到TArray<Byte>)

* TField的FValueBuffer由Pointer改为TValueBuffer,相关的函数也都改成TValueBuffer的重载了:

+ TField加入AsLongWord属性

* TBlobField的Value由TBytes改成了TArray<Byte>

* TAggregateField的Handle类型由Pointer改成了TAggHandle(映射到TObject),并且发布了一个Handle属性。

+ 新增了TBitConverter

* TBlobData、TBookmark类型再次改为了TArray<Byte>

+ TBlobByteData映射到TArray<Byte>

* TDataSet.DataConvert函数重载为(好吧,又是TValueBuffer):

 * TBookmark开始真正大显神威

 * TWideDataSet被删除了

【RADStudio XE4-VER250】

* 许多内部成员被标记为Weak,以解决循环引用计数问题

* TField增加了一个FValueBufferPtr的Pointer类型成员(折腾)

+加入TRecBuf类型定义,映射到( NativeInt),然后TBufList映射为 TArray<NativeInt>;严重怀疑回头映射到TArray<TRecBuf>

* TDataSet大变动:

【RadStudio XE5-VER260】

+ 加了个PDateTimeRec定义,剩下的定义基本没变,只是修改Bug

【RadStudio XE6-VER270】

+ 增加类型TFieldsAutoCreationMode、TFieldsPositionMode、TFieldLifeCycle、TFieldLifeCycles

+ TFields增加ClearAutomatic函数和LifeCycles属性

+ TField增加两个虚拟函数和LifeCycle、Validating、AutoGenerateValue属性

+ TFieldOptions类

+ TDataSet增加CanRefresh属性及一些新的保护函数

+ 增加ftCalcFieldTypes集合来标记允许设置为计算字段的类型

【RadStudio XE7-VER280】

+ TFieldTypes集合类型

* TParamStreamObject接口又变了,好在我好象用不到

– ftCalcFieldTypes将ftVariant给删除了

* DefaultFields 已经被标记为作废

分享到:

3 条评论

沙发空缺中,还不快抢~