数组写入数据库问题请教

dengyi0204 2008-10-02 11:58:21
我用以下代码写入数据库,达到这样的目的:
1、如果表pbqk里的idi字段有ids(i)这条记录了,就修改其他字段的内容。
2、反之,则添加一条记录,再写入其他字段的内容。

但这两个目的都达不到。先谢谢各位高人指点。


<%
pbid=trim(request.Form("pbid"))'这里的pbid为数字
xxdm=trim(request.Form("xxdm"))'这里的xxdm为文本
yqbh=trim(request.Form("yqbh"))'这里的yqbh为文本
yps=trim(request.Form("yps"))'这里的yps为数字
kemudaima=trim(request.Form("kemudaima"))'这里的kemudaima为文字
'以上的pbid、xxdm、yqbh、yps、kemudaima用response.Write()都正常。

ids=Split(pbid,",")'以下分拆数组
schoolno=split(xxdm,",")
bh=split(yqbh,",")
xys=Split(yps,",")
kemudaima=Split(kemudaima,",")'分拆结束

set pbqk=server.CreateObject("adodb.recordset")
sql="SELECT * FROM pbqk "'我要将以上信息分别写入这个表
pbqk.open sql,conn,3,3

for i=0 to ubound(ids)
if not pbqk.eof and not pbqk.bof then
if pbqk("idi")=ids(i) then'如果要写入的id在pbqk表的idi字段里已有了,就修改这条记录的相关字段,可是就是在这里出错了,原来有的id,不是修改记录而是直接添加记录。这里的判断错在哪里?指针?

pbqk("xxdm")=trim(schoolno(i))
pbqk("yiqibh")=trim(bh(i))
pbqk("yps")=trim(xys(i))
pbqk("kemudaima")=trim(kemudaima(i))'改写该记录的这四个字段结束。


else
pbqk.addnew'如果要写入的id在pbqk表的idi字段里没有,就新插入一条记录,并将下列五个字段写入。但是出现的问题是,没有任何内容提交到数据库。
pbqk("idi")=trim(ids(i))
pbqk("xxdm")=trim(schoolno(i))
pbqk("yiqibh")=trim(bh(i))
pbqk("yps")=trim(xys(i))
pbqk("kemudaima")=trim(kemudaima(i))'写入五个字段结束。
end if
pbqk.update
pbqk.movenext
end if
next

response.Write("<script language='javascript'>alert('修改成功!');location.href='zxpbqk.asp'</script>")
response.End()

pbqk.close
set pbqk=nothing

%>
...全文
78 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
nanyang9 2008-10-03
  • 打赏
  • 举报
回复
pbid=trim(request.Form("pbid"))'这里的pbid为数字
xxdm=trim(request.Form("xxdm"))'这里的xxdm为文本
yqbh=trim(request.Form("yqbh"))'这里的yqbh为文本
yps=trim(request.Form("yps"))'这里的yps为数字
kemudaima=trim(request.Form("kemudaima"))'这里的kemudaima为文字
'以上的pbid、xxdm、yqbh、yps、kemudaima用response.Write()都正常。

ids=Split(pbid,",")'以下分拆数组
schoolno=split(xxdm,",")
bh=split(yqbh,",")
xys=Split(yps,",")
kemudaima=Split(kemudaima,",")'分拆结束
这段值得怀疑,
如果这些参数都是通过复选框传来的数据,那么这样就完全错了.
比如一组复选框为
<input type="checkbox" name="aa" value="1" checked="checked" />
<input type="checkbox" name="aa" value="2" checked="checked" />
<input type="checkbox" name="aa" value="3" checked="checked" />
那么提交后的值是 "1, 2, 3"
而从你拆分数组的方式来看,你期待的值是 "1,2,3"
注意,你实际值比你期待的方式多两个空格.
所以你可能要修改你的代码为:
ids=Split(pbid,", ")'以下分拆数组
schoolno=split(xxdm,", ")
bh=split(yqbh,", ")
xys=Split(yps,", ")
toury 2008-10-03
  • 打赏
  • 举报
回复

没仔细检查,你参考吧
<%
pbid=trim(request.Form("pbid"))'这里的pbid为数字
xxdm=trim(request.Form("xxdm"))'这里的xxdm为文本
yqbh=trim(request.Form("yqbh"))'这里的yqbh为文本
yps=trim(request.Form("yps"))'这里的yps为数字
kemudaima=trim(request.Form("kemudaima"))'这里的kemudaima为文字
'以上的pbid、xxdm、yqbh、yps、kemudaima用response.Write()都正常。

ids=Split(pbid,",")'以下分拆数组
schoolno=split(xxdm,",")
bh=split(yqbh,",")
xys=Split(yps,",")
kemudaima=Split(kemudaima,",")'分拆结束

set rs=server.CreateObject("adodb.recordset")
''''''''''''''set pbqk=server.CreateObject("adodb.recordset")
''''''''''''''sql="SELECT * FROM pbqk "'我要将以上信息分别写入这个表
''''''''''''''pbqk.open sql,conn,3,3

for i=0 to ubound(ids)
sql="SELECT * FROM pbqk WHERE idi="&trim(ids(i))
rs.open sql,conn,1,1
if not (rs.eof and rs.bof) then'如果要写入的id在pbqk表的idi字段里已有了,UPDATE
sql="UPDATE pbqk SET xxdm='"&trim(schoolno(i))&"',yiqibh='"&trim(bh(i))&"',yps='"&trim(xys(i))&"',kemudaima='"&trim(kemudaima(i))&"' WHERE idi="&trim(ids(i))
else'否则,写入
sql="INSERT INTO pbqk(idi,xxdm,yiqibh,yps,kemudaima) VALUES('"&trim(ids(i))&"','"&trim(schoolno(i))&"','"&trim(bh(i))&"','"&trim(xys(i))&"','"&trim(kemudaima(i))&"')"
end if
rs.Close
conn.execute(sql)
next
set rs=nothing
''''''''''''''''''''''''''if pbqk("idi")=ids(i) then'如果要写入的id在pbqk表的idi字段里已有了,就修改这条记录的相关字段,可是就是在这里出错了,原来有的id,不是修改记录而是直接添加记录。这里的判断错在哪里?指针?

'''''''''''''''''''''''''' pbqk("xxdm")=trim(schoolno(i))
'''''''''''''''''''''''''' pbqk("yiqibh")=trim(bh(i))
'''''''''''''''''''''''''' pbqk("yps")=trim(xys(i))
'''''''''''''''''''''''''' pbqk("kemudaima")=trim(kemudaima(i))'改写该记录的这四个字段结束。


'''''''''''''''''''''''''' else
'''''''''''''''''''''''''' pbqk.addnew'如果要写入的id在pbqk表的idi字段里没有,就新插入一条记录,并将下列五个字段写入。但是出现的问题是,没有任何内容提交到数据库。
'''''''''''''''''''''''''' pbqk("idi")=trim(ids(i))
'''''''''''''''''''''''''' pbqk("xxdm")=trim(schoolno(i))
'''''''''''''''''''''''''' pbqk("yiqibh")=trim(bh(i))
'''''''''''''''''''''''''' pbqk("yps")=trim(xys(i))
'''''''''''''''''''''''''' pbqk("kemudaima")=trim(kemudaima(i))'写入五个字段结束。
'''''''''''''''''''''''''' end if
''''''''''''''''''''''''''pbqk.update
''''''''''''''''''''''''''pbqk.movenext
''''''''''''''''''''''''''end if
if err=0 then
response.Write("<script language='javascript'>alert('修改成功!');location.href='zxpbqk.asp'</script>")
response.End()
else
'失败提示........................
end if
%>

灵易联盟 2008-10-03
  • 打赏
  • 举报
回复
idS分组,其它可以根据“名称_ID”来取,而且我记得,学样编号跟科目是相对固定的,可以直接根据SESSION或着某些信息直接取得,无须用到数组~~

主要变动是的yiqibh,yps

根据的索引则应当是学校编号/yiqibh,可能还可以参考下科目,判断是否已经存在后再处理动作就行了~~

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧