中国教程网论坛's Archiver

woshimaikou 发表于 2008-3-21 11:20

批量删除记录的问题?

又遇到问题拉!大家帮看看,谢拉.
这是一段批量删除代码:
<%
   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@

yesin 发表于 2008-3-21 15:08

if request.Form("del")(i)=cstr(delrs("id"))

这种方式判断不知道是我没看懂还是怎么回事,感觉不太严谨。不知道是不是复选框提交过来的,人家要是不按顺序怎么办?

可以尝试一下用常用的delete from table where id in(罗列提交的id号);

woshimaikou 发表于 2008-3-21 17:30

是复选框提交过来的 前面有一句:delcount=request.Form("del").count就读取了所有被选中项,不按顺序也可以啊!因为request.Form("del")(i)里保存的是被选项的id值.也就是说从所有被选项
的id逐个与数据库里的id对比,如果相同就执行删除.
我不明白他有时会报:发生未知错误啊?jcwcn.com@

寅生 发表于 2008-3-27 17:56

这几天比较忙,没来得及回这个帖子,不好意思![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]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.