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

Database 在delphi中对多个字段进行排序的Tdbf/tdataset,database,delphi,sorting,field,tdbf,Database,Delphi,Sorting,Field,Tdbf,我有一个使用tdbf的delphi应用程序,它基于tdataset,具有不需要bde引擎的优点。我需要对表进行排序,我通过添加一个indexdef,然后指定indexfieldnames,在单个字段中进行排序 我现在试着让它在两个领域进行排序,即先将男性分组,然后将女性分组,然后将每组按工资进行排序,这样我们就可以看到女性从最低收入者到最高收入者,依次是男性 我已经阅读了每一篇材料,说明您只需将indexdef的sortfield指定为“性别+工资”。当我尝试使用索引时,我被告知“+”不是有效的

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

我现在试着让它在两个领域进行排序,即先将男性分组,然后将女性分组,然后将每组按工资进行排序,这样我们就可以看到女性从最低收入者到最高收入者,依次是男性

我已经阅读了每一篇材料,说明您只需将indexdef的sortfield指定为“性别+工资”。当我尝试使用索引时,我被告知“+”不是有效的字段名。我试过“.”、“&”中的每一个delimeter和“;”。每一个delimeter都作为一个不存在的字段被拾取。在多个字段上对表进行排序的正确方法是什么

提前谢谢
克林顿英国人

我没有使用该组件,但他们似乎希望使用类似于我们在dBase III中使用的索引表达式。在文档PDF版本的第7页,他们在表达式主题下提供了一个示例:

Dbf1. AddIndex('INDEX1 ', 'DTOS( DATEFIELD)+ SUBSTR ( LONGFIELD ,1 ,10)+ SUBSTR
( LONGFIELD2 ,1 ,20)', []);
您可以在包含整个字符串的参数的字段上尝试SubStr函数,看看是否至少能得到一个结果。

xBASE
(数据库及其衍生工具)要求索引中的字段都转换为相同的数据类型,通常是字符串。为此,通常需要一些常用功能:

  • DTOS()-将xBASE日期转换为字符串格式
    CCYYMMDD
  • STR()-将数字转换为字符串,带有可选的宽度说明符(默认值为10)和小数点右侧的位数。具体来说,语法指定为
    STR([,[,]])
  • SUBSTR()-使用指定的起始位置和字符数从另一个字符串中提取字符串的一部分
  • IIF()-立即IF,用于转换逻辑(例如,
    IIF(marred=.T,'Y',N')
索引表达式确实与
+
运算符组合在一起。您收到的错误可能是因为您尚未转换为通用数据类型

由于您已经指定了
性别
列(可能定义为
char1
)和
Salary
列(可能是某种大小的
NUMERIC
),您可以使用如下内容

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

这将在表达式上创建一个索引,如
F 10000
F 200000
M 12000
,其中
SALARY
转换为默认宽度10个字符(左填充空格)和无小数位数。这应该适用于您。

表。IndexFieldName:=“Field1;Field2”;不适用吗?