首页 > 其他分享 >[记录一下]BufDataSet排序的时候多列同时排序会出问题

[记录一下]BufDataSet排序的时候多列同时排序会出问题

时间:2024-06-04 10:22:02浏览次数:15  
标签:多列 ACompareRec 降序 BufDataSet c2 c1 排序 DESC

有和网友(不好意思,忘了是那位了)交流中,他反馈BufDataSet多列排序时得到的结果不符合预期,他也给出修复方法,以下是他的验证及修复方法:
环境:fpc 3.3.1
问题复现步骤:

SQLQuery1.IndexFieldNames:='cl;c2 DESC';
这个应该是c1列升序,c2列降序,但是实际是c1,c2列都降序了
影响到SQLQuery,BufDataSet 这些控件

2个列4个组合测试:
都升序:
c1;c2
有1个降序:
c1 DESC;c2
c1;c2 DESC
都降序:
c1 DESC;
c2 DESC

只要有DESC所有列都降序了

解决方法:
将bufdataset.pas的这个函数中:
procedure TCustomBufDataset.ProcessFieldsToCompareStruct
...
ACompareRec.Desc := ACompareRec.Desc or (ADescFields.IndexOf(AField)>-1);
..
将这行的or改成and就正常了:
ACompareRec.Desc := ACompareRec.Desc and (ADescFields.IndexOf(AField)>-1);

标签:多列,ACompareRec,降序,BufDataSet,c2,c1,排序,DESC
From: https://www.cnblogs.com/qiufeng2014/p/18230279

相关文章

  • 编程奇境:C++之旅,从新手村到ACM/OI算法竞赛大门(武器:排序算法)
    引言现在你已经拥有了c++的基础语法知识,人物已经有了基本属性,那么想要打怪,手里必须要有趁手的武器,各种算法就是手中的武器,要根据怪物的不同特性来选择不同的武器。本章节讲的就是新手第一把武器:排序算法。所谓排序算法就是把一些乱序的序列按照从小到大或从大到小进行排序,是......
  • 拓扑排序
    题目现有n扇门,门之间有m种关系,门与门之间可以互相传送。将所有不能被传送到的门视为起点,将不能传送到其他门的门视为终点,利用这些传送关系,求出有多少种路线。结果可能很大,请对998244353取模。https://ac.nowcoder.com/acm/contest/82881/BInput57231245132534......
  • 数据结构学习笔记-希尔排序
    希尔排序的算法设计与分析问题描述:设计并分析希尔排序算法【算法设计思想】选择一个初始的增量序列,通常选择数组长度的一半(n/2)作为初始增量。对于每个增量,将数组分割成若干个子序列,每个子序列的长度等于当前增量。例如,如果增量为5,那么数组将被分割成长度为5的子序列。对......
  • 常见的排序算法——快速排序
    本文记述了快速排序的基本思想和一份参考实现代码,并在说明了算法的性能后用随机数据进行了验证。◆思想基于分治思想的快速排序,使用切分函数找到一个切分位置,保证其左侧子范围内的所有元素都不大于切分位置的元素,右侧子范围内的所有元素都不小于切分位置的元素。然后用递归调用......
  • 八大排序:插入、希尔、冒泡、选择、快速、堆、归并、计数
    目录一、插入排序:二、希尔排序:三、冒泡排序:四、选择排序:五、快速排序:    1、霍尔法:    2、挖坑法:    3、前后指针法:    4、非递归的实现:六、堆排序:七、归并排序:1、递归实现:2、非递归实现:八、计数排序:一、插入排序:插入排序......
  • 堆排序-java
    这次主要讲了堆排序和堆的基本构造,下一期会详细讲述堆的各种基本操作。文章目录前言一、堆排序1.题目描述2.堆二、算法思路1.堆的存储2.结点下移down3.结点上移up4.堆的基本操作5.堆的初始化三、代码如下1.代码如下:2.读入数据:3.代码运行结果总结前言......
  • [排序算法]冒泡排序+快速排序全梳理!
    目录前言一、冒泡排序基本思路图解冒泡代码实现代码优化冒泡排序的特性总结:二、快速排序1.hoare版本图解演示代码实现特性总结2.挖坑法基本思路图解过程代码实现特性总结3.前后指针法基本步骤图解过程代码实现特性总结4.快速排序的优化三数取中小区间优化5.非递归实......
  • 数组的降序排序(Java)
    代码:importjava.util.*;publicclasssz{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);//定义数组长度System.out.println("请输入数组的长度:");intlength=scanner.nextInt();......
  • 插入排序详解及Java代码实现
    在计算机科学中,排序是一种基本的操作,它广泛应用于各种数据处理场景。插入排序(InsertionSort)是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的......
  • 冒泡排序与快速排序
     博主主页: 码农派大星.  数据结构专栏:Java数据结构 数据库专栏:MySQL数据库关注博主带你了解更多数据结构知识1.冒泡排序冒泡排序privatestaticvoidswap(int[]arrary,inti,intj){inttmp=arrary[i];arrary[i]=arrary[j];......