批量删除记录的问题?
又遇到问题拉!大家帮看看,谢拉.这是一段批量删除代码:
<%
if request.QueryString("action")="del" then
delcount=request.Form("del").count
if delcount=0 then
response.Write "<script>alert('请作出删除选择!');history.go(-1)</script>"
else
sql="select * from result"
set delrs=server.CreateObject("adodb.recordset")
delrs.open sql,conn,1,3
while not delrs.eof
for i=1 to delcount
if request.Form("del")(i)=cstr(delrs("id")) then
delrs.delete
delrs.update
end if
delrs.movenext
next
wend
set delrs=nothing
response.Write "<script>alert('删除成功!');window.open('alluser.asp','_self')</script>"
end if
end if
%>
删除记录有时会报错说:在if request.Form("del")(i)=cstr(delrs("id")) then发生未知错误.有时可以删除成功.怎么回事啊?jcwcn.com@ if request.Form("del")(i)=cstr(delrs("id"))
这种方式判断不知道是我没看懂还是怎么回事,感觉不太严谨。不知道是不是复选框提交过来的,人家要是不按顺序怎么办?
可以尝试一下用常用的delete from table where id in(罗列提交的id号); 是复选框提交过来的 前面有一句:delcount=request.Form("del").count就读取了所有被选中项,不按顺序也可以啊!因为request.Form("del")(i)里保存的是被选项的id值.也就是说从所有被选项
的id逐个与数据库里的id对比,如果相同就执行删除.
我不明白他有时会报:发生未知错误啊?jcwcn.com@ 这几天比较忙,没来得及回这个帖子,不好意思![code]
while not delrs.eof
for i=1 to delcount
if request.Form("del")(i)=cstr(delrs("id")) then
delrs.delete
delrs.update
end if
delrs.movenext
next
wend
[/code]这样写有很多空循环,比如有一万条记录,刚好我提交删除的是前三条。那么while循环三次其实我的删除任务已经完成了,但是因为条件not delrs.eof仍然满足,所以程序会接着循环9997次。
两个循环换一下,for循环放外面,while放里面,换成do loop就可以避免这种情况了[code] For i=1 To delcont
Do While Not delrs.eof
if request.Form("del")(i)=cstr(delrs("id")) Then
delrs.delete
delrs.update
Exit Do
End If
delrs.movenext
Loop
next
[/code]另外不知道delrs("id")为什么要cstr后再比较
[[i] 本帖最后由 寅生 于 2008-3-27 19:41 编辑 [/i]]
页:
[1]
