注册 登录
编程论坛 ASP技术论坛

求教. sql 批量修改数据不成功

zhongyan43 发布于 2010-12-08 21:18, 905 次点击
以下代码可以运行,但批量修改数据不成功,不知错误在哪里

<!--#include file=include.asp-->
<%
Response.Buffer = True
Response.Expires = -1
Response.ExpiresAbsolute = Now() - 1
Response.Expires = 0
Response.CacheControl = "no-cache"

set rss=server.CreateObject("adodb.recordset")
sqls="select * from web_childorders Where Shopid='"&request.cookies("kkshopid")&"'"
rss.open sqls,conn,1,3
%>

<form name="orderChange" method="post" action="?act=update">
<table border="1" width="100%" id="table1">

<tr> <td>
<input type="submit" name="Submit3" value="Submit" onClick="return confirm('Confirm ?');">
</td></tr>
<tr> <td>Item Number</td> </tr>

<%
do while not rss.eof
    if rss("C_state")>0 then
%>
<tr><td><input type=checkbox name="ck" value=<%=rss("orderid")%>> <%=rss("orderid")%> </td></tr>
<%
    End if
    rss.movenext
loop
%>
</table>
</form>

<%
if request("act")="update" and request("ck")<>"" then

    ''第一种方法,改不了任何数据
     ''conn.execute("update web_childorders set C_state=6 where orderid in ('"&request("ck")&"')")

''第二种方法,只改第一个数据
pid=request("ck")
mystr=split(pid,",")
for i=0 to ubound(mystr)
exec="update web_childorders set C_state=6 where orderid ='"&mystr(i)&"'"
conn.execute(exec)
next
    response.write("Records has been updated")
end if

set rss=nothing
conn.close
set conn = Nothing
%>

8 回复
#2
gupiao1752010-12-09 00:05
conn.execute("update web_childorders set C_state=6 where orderid in ('"&request("ck")&"')")
更新数据必须确定性指名数据是哪条用=号,而你这个SQL用的确是非确定性的in.
#3
hams2010-12-09 08:07
第二条,如果只更新了一条记录,先检查一下你的数据有效性
#4
zhongyan432010-12-09 16:21
数据库表名: web_childdorders

数据库结构:

orderid        Shopid        C_state
123        abc        1
456        abc        1
789        def        1

数据都有效,但只能更新第一条记录
#5
hams2010-12-09 17:32
我是说这个
for i=0 to ubound(mystr)
和这个:
where orderid ='"&mystr(i)&"'"

#6
wangjy5002010-12-09 18:04
''conn.execute("update web_childorders set C_state=6 where orderid in ('"&request("ck")&"')")
我觉得不要用引号试试!
''conn.execute("update web_childorders set C_state=6 where orderid in ("&request("ck")&")")





[ 本帖最后由 wangjy500 于 2010-12-9 18:59 编辑 ]
#7
zhongyan432010-12-09 19:14
不用引号会出现

An error occurred on the server when processing the URL. Please contact the system administrator.

If you are the system administrator please click here to find out more about this error.
#8
zhongyan432010-12-09 19:16
用response.write 会显示正确的记录,数据都是有效的

''第二种方法,只能改第一个数据
pid=request("ck")
mystr=split(pid,",")
for i=0 to ubound(mystr)
exec="update web_childorders set C_state=6 where orderid ='"&mystr(i)&"'"
conn.execute(exec)

''用response.write 会显示正确的记录
response.write (mystr(i)&"<br>")

next
#9
zhongyan432010-12-09 21:29
sql 语句 "update web_childorders set C_state=6 where orderid in ('1011042253179022','10112810593074851')"
成功批量修改数据库

不知道是不是
<tr><td><input type=checkbox name="ck" value=<%=rss("orderid")%>> <%=rss("orderid")%> </td></tr>
取的是数字,而数据库里的是字符而出现问题?
1