查询结果如何进行排序?? (300分)

  • 主题发起人 主题发起人 kasa
  • 开始时间 开始时间
K

kasa

Unregistered / Unconfirmed
GUEST, unregistred user!
对于TQuery查询的结果进行排序。除了在sql中加上order by 语句外,有没有办法
在程序中根据指定的字段对已经查询到的结果进行排序,从而达到相当于加上order by
语句重新打开查询相同的效果。有没有办法实现??

如果那位大侠能实现,最好给出简单的代码实例,在下300分送上。
 
const ChinaCode: array[0..25,0..1] of Integer = ((1601,1636),
(1637,1832), (1833,2077),(2078,2273),(2274,2301),(2302,2432),
(2433,2593),(2594,2786),(9999,0000),(2787,3105),(3106,3211),
(3212,3471),(3472,3634),(3635,3722),(3723,3729),(3730,3857),
(3858,4026),(4027,4085),(4086,4389),(4390,4557),(9999,0000),
(9999,0000),(4558,4683),(4684,4924),(4925,5248),(5249,5589));

function GetHzPy(var Hz:String):String;
var
C1, Len1, C2: Integer;
ir : Word;
FResult : String;
begin
FResult := '';
C1 := 1;
Len1 := Length(Hz);
while (C1<=Len1) do
begin
if (ord(Hz[C1])>=160) and (ord(Hz[C1+1])>=160) then
begin
ir := (ord(Hz[C1])-160)*100 + ord(Hz[C1+1])-160;
C2 := 0;
while (C2<=26) do
begin
if (ir>=ChinaCode[C2,0]) and (ir<=ChinaCode[C2,1]) then
begin
FResult := FResult+UpCase(chr(C2+ord('a')));
break;
end;
C2 := C2 + 1;
end;
end;
C1 := C1 + 2;
end;
Result := FResult;
end;
 
用adoquery.sort
 
同意楼上,ADO有内置的排序功能,能对查询出来的recordset进行过滤及排序 
 
对于普通用BDE的Query呢
 
普通用BDE的Query没办法
 
普通的query是没有办法的,只能一次次的写sql语句
 
TQuery实现不了,只能重构SQL段重新查询
 
如果你用dbgrid显示,它好象有个sort属性,可以指定对某个字段排序
 
如果舍得下工夫
自己写一个排序算法吧
也不是很难,
想怎么排序就怎么排
 
用EHLIB可以让查询结果按自己的要求排序.具体参阅EHLIB说明及例子.
我觉得这样比较自由.
不知兄台是为了显示还是保存?
 
我看过ehlib中的例子。那是通过改变排序字段,关闭查询,重新打开查询实现的。
我这里查询到的结果既有可排序显示需求,也有更新保存的需求。
 
结了,谢谢大家!
 
后退
顶部