Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 德尔菲表排序_Delphi_Sorting - Fatal编程技术网

Delphi 德尔菲表排序

Delphi 德尔菲表排序,delphi,sorting,Delphi,Sorting,我有一个让他们头疼的简单问题 我需要按照以下顺序对数据库表TDBGrid(组件ace中的ABS数据库)中的整数进行排序 0 一, 十一, 111 121 二, 二十一, 211 二十二 221 等等 这意味着每个以1开头的数字都应该小于1 一, 十一, 111 五, 五十五 有人能帮我吗 谢谢我刚刚在SQL Server Management Studio中运行了此操作-注意,我将输入中的行弄混了,因此它们没有按顺序排列: create table #temp( ID Char(3));

我有一个让他们头疼的简单问题

我需要按照以下顺序对数据库表TDBGrid(组件ace中的ABS数据库)中的整数进行排序

  • 0
  • 一,
  • 十一,
  • 111
  • 121
  • 二,
  • 二十一,
  • 211
  • 二十二
  • 221
等等

这意味着每个以1开头的数字都应该小于1

  • 一,
  • 十一,
  • 111
  • 五,
  • 五十五
有人能帮我吗


谢谢

我刚刚在SQL Server Management Studio中运行了此操作-注意,我将输入中的行弄混了,因此它们没有按顺序排列:

create table #temp( ID Char(3));
insert into #temp (ID) 
      select '111' union
      select '221';
      select '0' union 
      select '21' union
      select '1' union 
      select '11' union
      select '211' union
      select '121' union
      select '2' union
      select '22' union
select * from #temp order by ID;
我得到了以下输出:

ID
----
0  
1  
11 
111
121
2  
21 
211
22 
221

(10 row(s) affected)
如果你得到了不同的结果,你就做错了。但是,很难说是什么,因为您没有发布任何关于如何从数据库检索数据的信息


编辑:海报中的一些说明表明显示器位于
TDBGrid
中,并使用
组件Ace ABS数据库
附在表格上。如果确实是这样,那么答案是在指定的列上创建一个索引,然后设置表的
IndexName
属性以使用该索引。

这应该可以按正确的顺序获取内容:

  • 将原始数字转换为字符串
  • 右键填充零,直到有一个3个字符宽的字符串
  • (可选)转换回整数
  • 那么,排序应该总是按照您想要的方式进行。也许最好让数据库为您这样做。在MySQL中,您可以执行以下操作:

    select RPAD(orderid,3,'0') as TheOrder 
    from MyTable 
    order by 1
    
    选择cast(INT_字段为varchar(9))作为I
    来自TABxxx
    
    按1排序

    如果它们是整数,如何区别01和1?你的意思可能是弦?如果它们是字符串,正常的排序应该有效。使用字符串而不是整数!正常排序不起作用,原因很简单22小于0111我想使用字符串,但我有一些条件集,只能应用于整数。我不太明白0111和111之间的区别,如果它们是整数?这是一个组件,默认情况下会对它们进行排序,正如我所说,该数据库是component ace的ABS,它是一个文件驱动的数据库。
    TDBGrid
    默认情况下不会对任何内容进行排序。要做到这一点,您必须在表上放置一个索引,然后使用该索引顺序,或者在SQL中添加一个
    order by
    need@Sertac,海报使用
    TDBGrid
    附在
    组件Ace ABS
    的表格上。我觉得我们在试图从海报上获取信息——对原始问题有15条评论,直到我发布了一个答案,我们才发现这是一个
    TDBGrid
    ,现在我的答案有5条评论(其中6条)@user-我的建议是启动一个新项目,只需几行代码和一个从头开始的表,这将复制问题,并联系ace支持。正如您从这个答案和问题的注释中所发现的,字符串排序应该给出您想要的结果。