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

ASP批量修改数据库记录发现一个奇怪的问题,高手进来帮忙解答一下,谢谢!

my1127 发布于 2011-06-22 12:04, 875 次点击
只有本站会员才能查看附件,请 登录

附件里是我的数据库跟代码,可以下载调试。


数据库:db.mdb
表:kehu
字段:
只有本站会员才能查看附件,请 登录



修改页面index.asp代码如下:
程序代码:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>批量读取数据</title>
</head>

<body>
<form name="form1" method="post" action="?action=edit">
<table border="0" cellspacing="1" cellpadding="0" width="700" align="center">
  <tr align="center">
    <td>客户名称</td>
  </tr>
<%
  strConn
= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.mappath("db.mdb")+";Persist Security Info=False"
  
set conn = Server.CreateObject("ADODB.Connection")
  conn.open strConn

 
  sql
="select * from kehu order by ID asc"
  
set rs=server.CreateObject("adodb.recordset")
  rs.open sql,conn,
1,1
  
if rs.bof and rs.eof then
  response.Write(
"没有找到您需要的记录!")
  
else
  
do while not rs.eof
  
%>
  <tr>
    <td align="center"><input name="mc" type="text" value="<%=rs("mc")%>" /><input name="id" type="hidden" value="<%=rs("id")%>"/></td>
  </tr>
<%
  rs.movenext
  
loop
  
end if
  rs.close
  
set rs=nothing
  
%>
</table>
<p align="center">
<input type="submit" name="tsub" value="修改">
&nbsp;
<input type="reset" name="Submit" value="重置" />
</p>
</form>
</body>
</html>
<%
if request("action")="edit" then
'===========================================================
id=split(trim(request.Form("id")),",")
mc
=split(trim(request.Form("mc")),",")

for i=0 to ubound(id)
set rs=server.createobject("adodb.recordset")
sql
="select * from kehu where id="&id(i)
rs.open sql,conn,
1,3

rs(
"mc")=trim(mc(i))

rs.update
next
rs.close
set rs=nothing
'=================================================================

conn.close
set conn=nothing
response.write
"<SCRIPT language=JavaScript>alert('批量修改成功!');window.location.href='index.asp'</SCRIPT>"
end if
%>

现在的问题是这样:

1、如果数据库中只有一条记录,我在index.asp页面把文本框中的内容清空的话修改就会出错,但是文本框的内容不为空就能正常修改。

2、如果数据库中有多条记录,我把文本框里面的内容都清空了,修改也没问题。

高手帮忙解答一下。
4 回复
#2
dzt00012011-06-22 12:59
当只有一个记录时,没有逗号分隔,你用trim,这时如果值=""的话,用split,ubound(id)=-1。理解了吗?更新前做一下判断,id中不含逗号的,就不要用split和循环了
#3
my11272011-06-22 13:09
恩,理解你的意思了,但是能不能帮我写一段判断的代码啊,十分感谢啊!
#4
dzt00012011-06-22 14:48
前面有地方写错了是,应该是ubound(mc)=-1,mc(i)下标越界
程序代码:
'===========================================================
set rs=server.createobject("adodb.recordset")

if instr(request.Form("id"),",")>0 then

    id=split(trim(request.Form("id")),",")
    mc=split(trim(request.Form("mc")),",")
   
    for i=0 to ubound(id)
    conn.execute ("update kehu set mc='"&trim(mc(i))&"' where id="&id(i)&"")
    next

else

    id=trim(request.Form("id"))
    mc=trim(request.Form("mc"))

    conn.execute ("update kehu set mc='"&mc&"' where id="&id&"")

end if

'=================================================================
#5
my11272011-06-22 17:17
真是非常感谢,又学习了,完成!
1