急!!明天交差!呜呼!我的数据库操作速度为何如此之慢?(先付120,其余答对之后补上)(120分)

  • 主题发起人 主题发起人 shuaige
  • 开始时间 开始时间
S

shuaige

Unregistered / Unconfirmed
GUEST, unregistred user!
我的数据库的操作是这样的
with QGradedo
begin
Close;
SQL.Clear;
SQL.Text:='Select * from freshgrade order by total8';
Open;// 按总分顺序排列;
first;
i:=1;
while not Eofdo
begin
setorder[1]:=FieldByName(f8).ASInteger;
Next;
i:=i+1;
end;
//将数据读入数组;
n:=i-1;
setorder[1][2]:=1;
for i:=2 to ndo
begin
if setorder[1]=setorder[i-1][1] then
setorder[2]:=setorder[i-1][2]
else
setorder[2]:=i;
end;
//按总分排好名次;
first;
i:=1;
while not Eofdo
begin
edit;
FieldByName('Torder8').AsInteger:=setorder[2];
i:=i+1;
Next;
end;
//更新数据库;
Applyupdates;//提交作业;
end;
CJ 你说该如何处理速度会快些。
 
我也来亭亭
 

with QGradedo
begin
Close;
SQL.Clear;
SQL.Text:='Select * from freshgrade order by total8';
Open;// 按总分顺序排列;
first;
i:=1;
----i 能在开域语句里?我也听听。呵呵。
另:你问的不清楚,是几层数据库?
劝你还是不要改了,不然象我一样,出了问题只好让时钟间隔为10小时就惨了。
 
我的数据库程序是sql server 7+ client (同一台机器)
 
cj答复如下:
(2000-06-20 23:54:54)
哎,思路有问题啊
(2000-06-20 15:53:40) 千中元
所以我劝他不要改了。
---排序哪有这么麻烦的,没仔细考虑sql语句罢
(2000-06-20 23:57:07)
是的,好象数据库设计也有问题,一晚上是改不好的了
 
没搞错吧需要这样写?
一次循环就ok 了。
with QGradedo
begin
Close;
SQL.Clear;
SQL.Text:='Select * from freshgrade order by total8';
Open;// 按总分顺序排列;
first;
i:=fieldbyname('total8').asinteger;
v:=1
fieldbyname('toorder9').asinteger=v;
next;
while not Eofdo
begin
if fielbyname('total8')<>i then
begin
fieldbyname('toorder8').asinteger=inc(v);
v:=v+1;
end
else
fieldbyname('toorder8').asinteger=v;
i:=fieldbyname('total8').asinteger;

next;
end;

没测试,看看吧。
 
创建一个比员有表多一个AUTOINC字段的新表。
INSERT INTO 新表
SELECT * FROM 旧表
ORDER BY 旧表.排序字段
AUTOINC 字段就建好了顺序
 
当然用不用数组没有多大关系,因为数组运行的时间极短,对于15minutes来说
短得多得多,大不了按烂泥讲的就可以。可是时间最长的正是烂泥讲的那些语句
再就是
Applyupdates;//提交作业;
oopsware讲的也不符合我的意思,同分的名次要相同
 
存在表结构如下:
CREATE TABLE TABLE1
( ID int, -- 学生代码
NAME char(32) NULL, -- 姓名
CHJI int NULL -- 成绩
)
CREATE UNIQUE INDEX INDEX1 ON TABLE1(ID)

执行如下语句,既可得到按成绩排序的表了!
SELECT TABLE1.ID, TABLE1.NAME, TABLE1.CHJI, ISNULL(T3.C2, 0)+1 MC
FROM TABLE1 LEFT OUTER JOIN
( SELECT T1.CHJI, COUNT(T2.CHJI) C2
FROM
(SELECT DISTINCT CHJI FROM TABLE1) T1,
(SELECT ALL CHJI FROM TABLE1) T2
WHERE T1.CHJI < T2.CHJI
GROUP BY T1.CHJI ) T3
ON TABLE1.CHJI = T3.CHJI
ORDER BY TABLE1.CHJI DESC
(以在MSSQL7下测试通过,不信试试)
 
多人接受答案了。
 

Similar threads

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