QDataSet 支持通过设置 Sort 属性指定排序规则,它支持的基本语法格式为:
字段名1 [ASC|IASC|NASC|NIASC|DESC|IDESC|NDESC|NIDESC][[,|;] 字段名2…]
字段名后面的排序顺序关键词可以省略,如果省略则按升序区分大小写排序,而这些关键词本身不区分大小写,也就是说 ASC 和 asc/Asc/aSc 都是等价的。
- ASC : 升序,如果是字符串类型,则区分大小写
- IASC : 升序,如果是字符串类型,则忽略大小写,如果不是字符串类型,则等价于 ASC
- NASC : 升序,如果是字符串类型,按自然语言规则排序,如果不是字符串类型,则等价于 ASC
- NIASC :升序,如果是字符串类型,按自然语言规则排序并忽略大小写,如果不是字符串类型,则等价于 ASC
- DESC : 降序,如果是字符串类型,则区分大小写
- IDESC : 降序,如果是字符串类型,则忽略大小写,如果不是字符串类型,则等价于 DESC
- NDESC : 降序,如果是字符串类型,则自然语言规则排序,如果不是字符串类型,则等价于 DESC
- NIDESC : 降序,如果是字符串类型,则自然语言规则排序并忽略大小写,如果不是字符串类型,则等价于 DESC
关于自然语言排序规则,可以参考文章:按自然语言规则进行字符串排序.
多个字段组合排序时,中间可以用半角的 “,” 或 “;” 分隔,下面举几个简单的例子,假设 TQDataSet 类型的实例名为 ADataSet,字段有 Id、Name、Age:
1、按Id升序排序
【Delphi】
ADataSet.Sort:='Id';
【C++ Builder】
ADataSet->Sort=L"Id";
2、按 Age 升序,按 Name 降序排列
【Delphi】
ADataSet.Sort:='Age,Name DESC'
【C++ Builder】
ADataSet->Sort=L"Age,Name DESC"