用query控件sql语句对数据排序后,想依次排名次(即1,2,3...)并显示在dbgrid中?(50分)

  • 主题发起人 主题发起人 xiongyp
  • 开始时间 开始时间
X

xiongyp

Unregistered / Unconfirmed
GUEST, unregistred user!
用query控件sql语句对数据排序后,想依次排名次(即1,2,3...)并显示在dbgrid中?
 
什么意思?增加一列显示名次?
如果是这样的话,双击query添加列,,,,,,,,
 
用下面的方法试试看:
用一个QUERY组件,程序如下:
1.设置QUERY1组件的sql属性为:SELECT * FROM text.dbf ORDER 字段DESC
2.打开QUERY1组件的字段编辑器.添加所有的字段,并新建一个计算字段.
字段名就取order.字段类型为Integer.
3.在QUERY1的CALCULATE事件中写入如下程序.
query1order.value := query1.recno;
  4.在DBGRID中显示即可。 
5.程序如下:
with query1 do
begin
Open; //执行query1中的查询语句.
First; //指向第一条记录
query1.edit; //把数据集设为编辑状态.
while not eof do
begin
FieldByName('名次').AsInteger := FieldByName('query1order').AsInteger;
Next;
end; //end while
Post; //把更新的数据写回数据库
end; //end with
 
先按大小排序(order by 排序字段名)
然后逐条记录判断,如果记录与上条记录相同,则他的名次不变,否则,加一。
然后到下一个记录。
在DOS时代的FOXBASE我就做过这个。
 
可以用IndexDefs和IndexFieldNames两个属性
 
szlgx,
我用的方法和你类似,但执行到edit时,会出错(不能修改一个只读的dataset)。
我把query1.requerlivr设为true也不行。
ziyu:
可以具体一点吗?
 
不用这么麻烦吧,而且效率好像也低了点
Query1.SQL.Text := 'Select Itm,* from table1'
然后在字段Itm的OnGetText写如下代码:
Text := IntToStr(Query1.RecNo);
 
在IndexDefs定义,在Indexfieldnames里选择刚定义的Index
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
334
import
I
后退
顶部