排序的问题,高分,快来拿! (100分)

C

cg1120

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库是ACCESS,用ADO存取,有个SXSORT字段用来排序,
如果我排序前的数据是这样:
ID NAME SXSORT
1 中国 1
2 成都 2
3 四川 3
当我改写了数据库的SXSORT字段后为:
ID NAME SXSORT
1 中国 1
2 成都 3
3 四川 2
这样我就要用SXSORT对数据库排序,让它变成这样:
ID NAME SXSORT
1 中国 1
2 四川 2
3 成都 3
这样地名就从大到小排列了,但我在程序中这样写:
datamodule1.ADOTable1.Sort:='sxsort';
或这样写:
movsql:='select * from table order by sxsort';
With DataModule1.ADOQuery1 Do
Begin
Close;
SQl.Clear;
SQl.add(movsql);
ExecSQL;
End;
数据库都没变,还是像这样:
ID NAME SXSORT
1 中国 1
2 成都 3
3 四川 2
我都不知道是什么原因了?
对了,数据库我也刷新了的:(
 
SELECT * FROM table order by sxsort
 
execsql --> open;
 
我用过OPEN了,不行
 
你如果在数据库环境中显示以上结果是不可能的,
但如果在DELPHI的数据控件中显示查询结果倒是有这个可能性,可能你把绑定的数据控件
的SORT字段设置成了ID字段
 
DataModule1.ADOQuery1.IndexFileName := 'SXSORT';
 
问题依旧,继续
 
movsql:='select * from table order by sxsort asc';
With DataModule1.ADOQuery1 Do
Begin
Close;
SQl.Clear;
SQl.add(movsql);
ExecSQL;
End;
//你的SXSORT是字符还是整数
 
SXSORT是数字型的
 
[red]order by [/red]
就是它![:D]
 
就是我上面的SQL语句,我在sql explorer中测试了.
用的access.肯定没错的.
 
1.SELECT * FROM table order by sxsort
2.Execsql --> open;

再有问题就有其他方面的原因了

 
SXSORT是字符还是数字?
数据库里的数据怎么能随便排序,你加上DbGrid、DataSource 看一下先
 
[:)][:)][:)][:)][?][?][?][?]
 
可能情况:
1、数据库字段有索引
2、ID主键被强行索引
取消看看![:D]
关键问题在ID上。
或者删除ID,上移SXSORT字段,让其成为主键,让数据库自动索引,不用写代码
 
请问你是用什么控件去显示表中的数据的?
是dbgrid,还是stringgrid.
如果是stringgrid就必须对stringgrid重新更新了
 
数据库的顺序一定了,除非重新做个表导一遍
 
order by 是比较耗资源的,
这种字段肯定要建立索引。
从你例子看肯定有同级同级那么不能设置为主键
不过我不赞同你这种结构了来表示地域级别
应该为树图结构比如代码3的成都,只知道他是第3级
那么怎么知道他是属于2级的四川的呢?必须保存每个节点位置
,所以必须要表现出树的数据结构才行
 
顶部