sql问题,如何批量修改数据?

时间:2021-12-24 07:27:33
我查出一批纪录
就像收email一样,每条纪录前面有一个复选框,我怎么在其中几个纪录前的复选框打勾后提交,在每条纪录的时间字段里填个时间!


我的
复选框  <input type="checkbox" name="编号" value="<%=rs("编号")%>" >


提交后

<%
dim sSQL
   sSQL ="update [j_superorder] set 入库实间="&now()&"where 编号 in ("&replace(request("编号"),"'","")&")"
   set rs=Server.CreateObject("ADODB.Recordset")
   rs.Open sSQL,conn,3,3
%>
不行啊!

17 个解决方案

#1


Dim ID,I
ID=Request.Form("编号")
ID=Split(ID,",", ")
For I=0 to UBound(ID)
...

#2


让checkbox的value等于主键(比如是id),提交以后,你得到的是被选中的值,比如"1,2,5,9"
然后以,而split()形成数组,每个数组项再去update

#3


<%
For Each iSelID In Request.Form("编号")
  sSQL ="update [j_superorder] set 入库实间=#"&now()&"# where 编号="&CInt(iSelID)
  Conn.Execute(sSQL)
Next
%>

#4


2位高人能详细些吗,我不太懂啊!

#5


为什么楼主原来的方法就不行呢,我以前也用过In的方法,难道说SQL数据库不支持?
顶一下,大家就讨论如何用In的方法来做,循环会了啊

#6


Dim ID,I
ID=Request.Form("编号")
ID=Split(ID,",", ")
For I=0 to UBound(ID)
sSQL ="update [j_superorder] set 入库实间=#"&now()&"# where 编号="&ID
next

#7


漏了一点:
Dim ID,I
ID=Request.Form("编号")
ID=Split(ID,",", ")
For I=0 to UBound(ID)
sSQL ="update [j_superorder] set 入库实间=#"&now()&"# where 编号="&ID
Conn.Execute(sSQL)
next

#8


IN一样,执行速度要慢点

#9


这样的话你要将复选框设的name属性设为同一值,
    接收的时候可以用同一变量接收,收到的信息是以(,)分开的,所以用的时间要以(,)为标识将其分开的,你上面只用了replace函数,并没有将其分开的,反而将标识(,)位给替换了.你看一下VBScript或者SQL Server里面有一个函数能将其分开,好像是slit(str,","),我记不清了,你查一下吧。
    另外,也可以将Form提交的数据存入数组,然后以数组形式传入函数可能更好些。

    最好用SQL Server内部的函数,性能更好些,用VBScript则兼容性好些,免得用其它的数据库时麻烦。

#10


把sql输出来,我看看

#11


用  monkeys(study.net)  的好一点

#12



  让checkbox的value等于主键(比如是id),提交以后,你得到的是被选中的值,比如"1,2,5,9"
然后以,而split()形成数组,每个数组项再去update

补充说明,用UBound()的到数组的最大下标,然后定义计数器i循环插入数据库
 
 

#13


注意看看request("编号")有没有空格,有的话,先替换空格,用in可以同时更新多个记录

#14


把所有的checkbox的name设为一样,在各个checkbox的value里面设置对应数据库的key值。
提交后就会得到一个对象的集合,这个集合里包含了所有你选中的checkbox的value的值。

#15


我的表里的字段

0 ID int 4 0
0 订单编号 char 13 0
0 实际入库 smalldatetime 4 1


主页

<FORM method="post" action="touser.asp">
  <table width="750" border="0" align="center" cellpadding="0" cellspacing="0">
    <tr> 
      <td width="150"><div align="center">物流编号</div></td>
      <td width="150"><div align="center">联系人</div></td>
      <td width="150"><div align="center">预计入库</div></td>
      <td width="150"><div align="center">仓库区段</div></td>
      <td width="150"><div align="center">操作</div></td>
    </tr>
    <% while not rs.eof and rowcount<rs.PageSize %>
    <% rowcount=rowcount+1 
NO=(page-1)*rs.PageSize+rowcount
%>
    <tr> 
      <td><%=rs("物流编号")%></td>
      <td><%=rs("厂家编号")%></td>
      <td><%=rs("运费")%></td>
      <td><%=rs("实际入库")%></td>
      <td><input name="id" type="checkbox"  value="<%=rs("id")%>" ></td>
      <% rs.MoveNext %>
      <% wend %>
    </tr>
  </table>
  <div align="center">
    <input type="submit" name="Submit" value="提交">
    &nbsp;
<input type="reset" name="Submit2" value="重置">
  </div>
</form>

执行页:

<%
Dim ID,I
ID=Request.Form("id")
ID=Split(ID,",", "")
For I=0 to UBound(ID)
sSQL ="update [j_superorder] set 实际入库=#"&now()&"# where id="&ID
Conn.Execute(sSQL)

%>

还是不行啊!

#16


正确答案来了
======================================
<%@LANGUAGE="VBSCRIPT" CODEPAGE="CP_ACP"%>
<!--#include file="conn.asp"-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head>
<%
Dim ID,II
ID=Request.Form("id")
II=Split(ID,",")
for i=0 to ubound(II)
    //response.write  II(i)  
    sSQL ="update [j_superorder] set 实际入库='"&now()&"' where id="&II(i)
    response.write sSQL
Conn.Execute(sSQL)
next
//把 实际入库 的类型 改为 datetime
%>

<body>
</body>
</html>

#17


我的表里的字段

0 ID int 4 0
0 订单编号 char 13 0
0 实际入库 datetime 8 1

把所有的时间字段改为:datetime,你以为你的时间不存小时 份 妙?

#1


Dim ID,I
ID=Request.Form("编号")
ID=Split(ID,",", ")
For I=0 to UBound(ID)
...

#2


让checkbox的value等于主键(比如是id),提交以后,你得到的是被选中的值,比如"1,2,5,9"
然后以,而split()形成数组,每个数组项再去update

#3


<%
For Each iSelID In Request.Form("编号")
  sSQL ="update [j_superorder] set 入库实间=#"&now()&"# where 编号="&CInt(iSelID)
  Conn.Execute(sSQL)
Next
%>

#4


2位高人能详细些吗,我不太懂啊!

#5


为什么楼主原来的方法就不行呢,我以前也用过In的方法,难道说SQL数据库不支持?
顶一下,大家就讨论如何用In的方法来做,循环会了啊

#6


Dim ID,I
ID=Request.Form("编号")
ID=Split(ID,",", ")
For I=0 to UBound(ID)
sSQL ="update [j_superorder] set 入库实间=#"&now()&"# where 编号="&ID
next

#7


漏了一点:
Dim ID,I
ID=Request.Form("编号")
ID=Split(ID,",", ")
For I=0 to UBound(ID)
sSQL ="update [j_superorder] set 入库实间=#"&now()&"# where 编号="&ID
Conn.Execute(sSQL)
next

#8


IN一样,执行速度要慢点

#9


这样的话你要将复选框设的name属性设为同一值,
    接收的时候可以用同一变量接收,收到的信息是以(,)分开的,所以用的时间要以(,)为标识将其分开的,你上面只用了replace函数,并没有将其分开的,反而将标识(,)位给替换了.你看一下VBScript或者SQL Server里面有一个函数能将其分开,好像是slit(str,","),我记不清了,你查一下吧。
    另外,也可以将Form提交的数据存入数组,然后以数组形式传入函数可能更好些。

    最好用SQL Server内部的函数,性能更好些,用VBScript则兼容性好些,免得用其它的数据库时麻烦。

#10


把sql输出来,我看看

#11


用  monkeys(study.net)  的好一点

#12



  让checkbox的value等于主键(比如是id),提交以后,你得到的是被选中的值,比如"1,2,5,9"
然后以,而split()形成数组,每个数组项再去update

补充说明,用UBound()的到数组的最大下标,然后定义计数器i循环插入数据库
 
 

#13


注意看看request("编号")有没有空格,有的话,先替换空格,用in可以同时更新多个记录

#14


把所有的checkbox的name设为一样,在各个checkbox的value里面设置对应数据库的key值。
提交后就会得到一个对象的集合,这个集合里包含了所有你选中的checkbox的value的值。

#15


我的表里的字段

0 ID int 4 0
0 订单编号 char 13 0
0 实际入库 smalldatetime 4 1


主页

<FORM method="post" action="touser.asp">
  <table width="750" border="0" align="center" cellpadding="0" cellspacing="0">
    <tr> 
      <td width="150"><div align="center">物流编号</div></td>
      <td width="150"><div align="center">联系人</div></td>
      <td width="150"><div align="center">预计入库</div></td>
      <td width="150"><div align="center">仓库区段</div></td>
      <td width="150"><div align="center">操作</div></td>
    </tr>
    <% while not rs.eof and rowcount<rs.PageSize %>
    <% rowcount=rowcount+1 
NO=(page-1)*rs.PageSize+rowcount
%>
    <tr> 
      <td><%=rs("物流编号")%></td>
      <td><%=rs("厂家编号")%></td>
      <td><%=rs("运费")%></td>
      <td><%=rs("实际入库")%></td>
      <td><input name="id" type="checkbox"  value="<%=rs("id")%>" ></td>
      <% rs.MoveNext %>
      <% wend %>
    </tr>
  </table>
  <div align="center">
    <input type="submit" name="Submit" value="提交">
    &nbsp;
<input type="reset" name="Submit2" value="重置">
  </div>
</form>

执行页:

<%
Dim ID,I
ID=Request.Form("id")
ID=Split(ID,",", "")
For I=0 to UBound(ID)
sSQL ="update [j_superorder] set 实际入库=#"&now()&"# where id="&ID
Conn.Execute(sSQL)

%>

还是不行啊!

#16


正确答案来了
======================================
<%@LANGUAGE="VBSCRIPT" CODEPAGE="CP_ACP"%>
<!--#include file="conn.asp"-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head>
<%
Dim ID,II
ID=Request.Form("id")
II=Split(ID,",")
for i=0 to ubound(II)
    //response.write  II(i)  
    sSQL ="update [j_superorder] set 实际入库='"&now()&"' where id="&II(i)
    response.write sSQL
Conn.Execute(sSQL)
next
//把 实际入库 的类型 改为 datetime
%>

<body>
</body>
</html>

#17


我的表里的字段

0 ID int 4 0
0 订单编号 char 13 0
0 实际入库 datetime 8 1

把所有的时间字段改为:datetime,你以为你的时间不存小时 份 妙?