delphi中Tdbf/tdataset对多个字段进行排序

Cli*_*ton 4 database delphi sorting field tdbf

我有一个使用 tdbf 的 delphi 应用程序,它基于 tdataset,优点是不需要 bde 引擎。我需要对表进行排序,我通过添加索引定义然后指定索引字段名称来对单个字段进行排序。

我现在试图让它按两个字段进行排序,即将男性分组,然后将女性分组,然后按工资对每个组进行排序,以便我们以相同的方式看到女性从最低收入者到最高收入者,然后是男性。

我已经阅读了每一篇材料,指出您只需将索引定义的排序字段指定为“性别+薪水”。当我尝试使用索引时,我被告知“+”不是有效的字段名。我已经尝试了“.”中的每个分隔符。','。'&' 和 ';'。每个分隔符都会被视为不存在的字段。对多个字段对表进行排序的正确方法是什么?

提前感谢克林顿英国人

Ken*_*ite 5

xBASE(dBASE 及其衍生产品)要求索引中的字段全部转换为相同的数据类型,通常是字符串。为此,通常需要一些常用函数:

  • DTOS() - 将 xBASE 日期转换为CCYYMMDD字符串格式
  • STR() - 将数字转换为字符串,带有可选的宽度说明符(默认 10)和小数点右侧的位数。具体来说,语法指定为STR(<numeric> [, <width> [, <decimaldigits>] ])
  • SUBSTR() - 从另一个字符串中提取一部分,具有指定的起始位置和字符数
  • IIF() - 立即数 IF,用于转换逻辑值(例如,IIF(Married = .T., 'Y', 'N')

索引表达式确实与+运算符结合在一起。您收到的错误可能是因为您尚未转换为通用数据类型。

当您指定了Gender列(可能定义为CHAR 1)和Salary列(可能NUMERIC是某种大小的 a )时,您可以使用类似

Dbf1.AddIndex('GENDER_SAL', 'GENDER + STR(SALARY, 10, 0)', []);
Run Code Online (Sandbox Code Playgroud)

F 10000这会在, F 200000,等表达式上创建索引M 12000,其中SALARY被转换为 10 个字符的默认宽度(左侧用空格填充)并且没有小数位。这应该对你有用。