3.1.2 使用TSQLDataSet的排序特性
如果想要使用除了是主键值字段之外其他的字段来排序,可以使用TSQLDataSet控件的SortFieldNames特性值来指定。例如现在我们希望范例应用程序使用非键值SPECIES_NAME字段作为排序的字段,就可以使用对象查看器设定TSQLDataSet控件的SortFieldNames特性值(见图3-5)。
当程序员设定了TSQLDataSet的SortFieldNames特性值后,TSQLDataSet执行CommandText的SQL语句时则会在SQL语句之后加上Order By的条件设定,我们从下面由TSQLMonitor显示的结果可以得知:
INTERBASE - isc_attach_database
INTERBASE - isc_dsql_allocate_statement
INTERBASE - isc_start_transaction
select * from biolife order by SPECIES_NAME
INTERBASE - isc_dsql_prepare
INTERBASE - isc_dsql_describe_bind

图3-5 TSQLDataSet拥有SortFieldNames特性值允许程序员设定排序的字段
现在如果再次执行范例应用程序,那么我们就可以看到类似如图3-6所示的结果。从TDBGrid中可以看到现在数据表中的数据已经按照SPECIES_NAME字段的次序来排序了。

图3-6 在TSQLDataSet的SortFieldNames特性设定排序字段之后,
数据便会依据这个特性值来排序
TSQLDataSet的SortFieldNames特性除了可以如同刚才以一个字段来排序数据之外,程序员也可以使用SortFieldNames特性进行多个字段的排序。例如现在我们除了希望以SPECIES_NAME字段作为主排序之外,还希望再以SPECIES_NO字段作为第二排序的依据。要如此排序很简单,我们只要在SortFieldNames特性中输入这两个字段,并且使用“,”符号分隔每一个字段名称即可。例如在图3-7所示的对象查看器中的SortFieldNames特性输入了species_name,species_no数值,代表同时要使用这两个字段进行排序数据的工作。

图3-7 在TSQLDataSet的SortFieldNames特性设定多个排序字段,每一个字段名称以“,”符号分隔
现在再次执行应用程序,并且使用TSQLMonitor观察,那么我们可以看到下面的SQL语句,dbExpress在order by条件中使用了程序员在SortFieldNames特性中输入的字段名称来进行数据排序。
INTERBASE - isc_attach_database
INTERBASE - isc_dsql_allocate_statement
INTERBASE - isc_start_transaction
select * from biolife order by SPECIES_NAME, SPECIES_NO
INTERBASE - isc_dsql_prepare
INTERBASE - isc_dsql_describe_bind
当然,除了另外使用TSQLDataSet的SortFieldNames特性值之外,我们也可以直接使用TSimpleDataSet内建的TInternalDataSet的SortFieldNames特性值来达成同样的效果,读者展开TSimpleDataSet的DataSet特性就可以看到TInternalDataSet的SortFieldNames特性值。






