TSimpleDataSet/TClientDataSet控件的PacketRecords是一个非常重要的属性值,因为它控制了TSimpleDataSet/TClientDataSet控件如何存取数据。TSimpleDataSet/
TClientDataSet控件的PacketRecords基本上可以设定成表2-3中的数值。不同的PacketRecords属性值代表了不同的数据存取行为。
表2-3
|
PacketRecord属性 |
意义 |
|
-1 |
一次从后端数据源中取得所有的数据 |
|
0 |
取得叙述数据源的MetaData信息 |
|
正数 |
一次只取得指定数值的记录 |
PacketRecords的默认值是-1,代表当TSimpleDataSet/TClientDataSet控件打开后,它会一次把后端数据源中所有的数据存取到客户端。对于数据量少的数据表来说这种存取行为没有什么关系。但是请想想,对于数据量大的数据表,例如拥有数万笔数据的数据表,那么这样做非但没有效率,反而会造成网络沉重的负荷。这是开发人员应该尽量避免的。
因此对于拥有大量数据的数据源来说,开发人员应该设定PacketRecords属性值为一个正数,例如20。这就代表当TSimpleDataSet/TClientDataSet打开时,它只会存取20笔的数据,以后就会暂时停止从服务器中读取数据。如果用户浏览或是处理到了20笔之后的数据,那么TSimpleDataSet/TClientDataSet便会自动地从后端数据源中取得下20笔的数据。这种存取行为非常适合一般的使用,因为用户一次也不可能浏览或是处理太多的数据。让TSimpleDataSet/TClientDataSet以分段的方式存取客户端需要的数据不但可以加快应用程序的反应时间,减轻客户端的负荷,也可以降低网络的数据传递量。不过开发人员也不能够设定PacketRecords属性值为太小的数值,因为这会造成TSimpleDataSet/TClientDataSet频繁地从后端数据源存取数据,反而会降低了执行效率,增加网络的round-trip。一般来说,设定PacketRecords为100左右的数值是比较好的,当然100不是绝对的数值,也不一定符合各种不同的应用情形,读者应该在实际应用中,根据实际的并发用户人数自行调整PacketRecords数值,在稍后讨论执行效率的章节中会再说明。
最后如果开发人员设定PacketRecords为0,那么就代表要从后端数据源中取得描述结果数据集的Metadata。一般来说,当TSimpleDataSet/TClientDataSet第一次打开后端的结果数据集时,都会先从数据源中取得Metadata,建立客户端结果数据集的架构以便储存从后端结果数据集取得的数据。
所谓Metadata是指叙述数据的信息。例如叙述数据表的Metadata包括了这个数据表所有的字段名称、字段类型、字段长度等信息。通常Metadata是让客户端能够根据这些MetaData正确地建立客户端数据集,以及自动产生正确的SQL语句。Metadata对于应用程序是否能够有效和能否正确地执行有很大的影响。
TSimpleDataSet/TClientDataSet会不会在第一次打开后端数据源时去取得Metadata,由不同的dbExpress驱动程序来决定。不过以目前dbExpress驱动程序最优化做得愈来愈佳的状况来看,dbExpress驱动程序都避免进行这个操作以增加执行效率,在稍后的章节中会详细地讨论。
由于PacketRecords属性值是如此的重要,因此开发人员在使用TSimpleDataSet/TClientDataSet控件时必须对这个属性值进行适当的设定。






