ASP问题:麻烦高手给看看这段代码哪错了,怎么报错呢?

<%setcom=server.createobject("adodb.connection")com.open"driver={microsoftaccessdrive... <%
set com=server.createobject("adodb.connection")
com.open "driver={microsoft access driver (*.mdb)};DBQ="&Server.MapPath("!@#data.mdb")

set rs=server.createobject("adodb.recordset")
sql="select * from student order by id asc"
rs.open sql,com,1,1

allstudent=rs.recordcount

if allstudent>0 then

for i=1 to allstudent

name=rs("name")
set rs=server.createobject("adodb.recordset")
sql="select * from test where name='"&name&"'"
rs.open sql,com,1,1

alltest=rs.recordcount

if alltest>1 then

for i=1 to alltest-1

set rs=server.CreateObject("adodb.recordset")
sql="select * from test where where name='"&name&"' order by fenshu asc"
rs.open sql,com,1,3
rs.delete
rs.update

rs.movenext
next

end if

rs.movenext
next

end if
response.redirect ("close.ASP")
%>
以上代码是为了把所有学生的考试成绩只留下最高分的一个记录,其余的都删掉。
所以,我先查询学生名单表,找到一个就循环,在测试成绩表中查找这个学生的所有成绩,只留下一个最高分的成绩记录,其余删掉。

所以我用了嵌套循环,我感觉理论上很通,就是调试的时候报错,麻烦有懂局的给看看是哪写错了
展开
 我来答
百度网友66a8d48e5
2009-11-20 · TA获得超过7687个赞
知道大有可为答主
回答量:3002
采纳率:12%
帮助的人:3894万
展开全部
理论上是行得通的!但是我想问一下的是,如果rs是一个数据连接,再用数据连接时是否要换一个名字?内层与外层都是一个结果信集,那么你内层的结果集理论上会不是改变外层的结果集?

一个rs满天飞,还要在循环,还要嵌套,已经将你的代码直接给OVER了!

顺便问一下,为什么不使用SQL谓语?这么喜欢用循环?难道每个结果集在取值是不需要时间或是运算吗?如果是any等谓词能满足你的要求时,你还要用循环吗?在我这里循环的代码似乎太大!

如果一句SQL能满足你的要求时,你会不会重新去看一下SQL方面的书呢?

我的理解是你的所有学生经过了多次考试,每一次的成绩都记录了!现在要保留的是你的每一个学生的最高成绩做为最终成绩.这样理解对吗?

这样其实一句就可以查询到所以学生的最终成绩的,当然我指提最终成绩是每一个学生的最高成绩.如果你要删除其他的信息,用一个not in就完全可以了!

你的学生如果有50个,用循环的方式,怕是很难运行的,会超时的,我想!因为先找到该学生的最高成绩,其他用max集合或是> any谓词就可以了,何须再求呢,一个一个的,顶上手工操作了!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
?>

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式