Tdbf/tdataset在delphi中排序多个字段



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

我现在正试图让它在两个领域进行排序,即将男性分组在一起,然后将女性分组在一起,然后将每个分组按工资进行排序,以便我们看到女性从最低收入到最高收入,然后是男性。

我已经阅读了每一份材料,说明您只是将索引定义的排序字段指定为"性别+工资"。当我尝试使用索引时,我被告知'+'不是一个有效的字段名。我试过了从'.'开始的每一个分隔符。","。'&'和';'。每个分隔线都是一个不存在的场。在多个字段上对表进行排序的正确方法是什么?

提前感谢克林顿英国

xBASE (dBASE及其衍生物)要求索引中的字段都转换为相同的数据类型,通常是字符串。要做到这一点,通常需要一些常见的函数:

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

索引表达式确实与+操作符组合在一起。您收到的错误可能是因为您没有转换为通用数据类型。

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

的内容
Dbf1.AddIndex('GENDER_SAL', 'GENDER + STR(SALARY, 10, 0)', []);

在表达式F 10000, F 200000, M 12000上创建索引,其中SALARY被转换为默认宽度为10个字符(左边填充空格),没有十进制数字。

我没有使用这个组件,但是看起来他们想要使用类似于我们在dBase III中使用的索引表达式。在PDF版本文档的第7页,他们在Expressions主题下提供了一个示例:

Dbf1. AddIndex('INDEX1 ', 'DTOS( DATEFIELD)+ SUBSTR ( LONGFIELD ,1 ,10)+ SUBSTR
( LONGFIELD2 ,1 ,20)', []);

你可以尝试他们的SubStr函数在你的字段与参数,将包括整个字符串,看看是否至少得到一个结果。

相关内容

  • 没有找到相关文章

最新更新