还是一个关于求学生名次的问题?路过的各位高手请帮忙看一看吧!数据库是access2000的
表cy的内容如下:
id 总分 名次
0001 600
0002 580
0003 590
0004 590
实现的效果是将“名次”填完整
id 总分 名次
0001 600 1
0002 580 4
0003 590 2
0004 590 2
我试图用如下程序实现,但是不行!高手看看应怎么改才能实现上述功能?
procedure Tfrmpm.Button2Click(Sender: TObject);
begin
adoquery6.Close;
adoquery6.SQL.Clear;
adoquery6.SQL.Add('update cy set 名次=(select (select count(*)+1 from cy as b where a.总分<b.总分)from cy as a)');
adoquery6.ExecSQL;
end;
问题点数:0、回复次数:6Top
1 楼coeltdit(每天多顶几下----->>>大虾就是这样练成的)回复于 2004-12-02 07:56:22 得分 0
procedure Tfrmpm.Button2Click(Sender: TObject);
var
i: integer;
begin
i := 1;
with adoquery6 do
begin
Close;
SQL.Clear;
SQL.Text := 'Select * From cy Order By 总分 DESC';
Open;
end; // 按总分的降序排列;
adoquery6.First;
while not adoquery6.eof do
begin
adoquery6.Edit;
adoquery6.FieldByName('名次').asinteger := i;
adoquery6.Post;
adoquery6.Next;
i := i +1; // 排名次;
end;
Top
2 楼jabcf(小金呀)回复于 2004-12-02 08:39:04 得分 0
楼上,要是有并列的怎么办?Top
3 楼alonesnake(一盘菜)回复于 2004-12-02 09:14:10 得分 0
upupTop
4 楼coeltdit(每天多顶几下----->>>大虾就是这样练成的)回复于 2004-12-02 09:27:27 得分 0
惭愧,没在电脑上试过,差点误人子第!
procedure TForm1.Button1Click(Sender: TObject);
var
i,total, nexttotal: integer;
begin
total := 0;
nexttotal := 0;
i := 1;
with adoquery6 do
begin
Close;
SQL.Clear;
SQL.Text := 'Select * From cy Order By 总分 DESC';
Open;
end; // 按总分的降序排列;
adoquery6.First;
while not adoquery6.eof do
begin
total := adoquery6.FieldByName('总分').asinteger;
adoquery6.Edit;
adoquery6.FieldByName('名次').asinteger := i;
adoquery6.Post;
adoquery6.Next;
nexttotal := adoquery6.FieldByName('总分').asinteger;
if nexttotal = total then
i := i // 排名次;
else
i := i + 1;
end;
end.Top
5 楼coeltdit(每天多顶几下----->>>大虾就是这样练成的)回复于 2004-12-02 09:28:22 得分 0
我没想到用SQL怎么实现,惭愧,转个弯吧。Top
6 楼cjg98821(hellow)回复于 2004-12-02 13:08:36 得分 0
coeltdit(每天多顶几下----->>>大虾就是这样练成的)
你这个方法是行!但是速度不行呀!
10000记录你这种方法要2分钟多Top




