|
蓝森林 http://www.lslnet.com 2006年8月25日 8:28
[ASP]更新纪录代码问题[已解决]
[b]这次会贴很长的代码,不过都是我自己写的,希望斑竹不会锁我的帖子[/b]
以下几段代码在一个文件里,为方便察看,分解开来
[b]因为是update文件,所以需要得到action,如果request("action")不为空,则创建纪录集[/b]
[code]<%
if request("action")<>"" then
set rs=server.createobject("adodb.recordset")
[/code]
[b]如果得到的action是del则执行删除[/b]
[code]if request("action")="del" then
if request("id")="" then '如果是删除但是没有ID值,则提示出错
response.redirect "error.asp?errorID=2"
end if
'action为del而且id不为空则继续以下部分
sql="delete * from 班级代码表 where C_ID='"&trim(request("id"))&"'"
conn.execute sql
[/code][b]删除完毕了,开始后面的action判断,如果是addnew则开始增加纪录[/b]
[code]
else if request("action")="addnew" then
sql="select * from 班级代码表 where C_ID='"&trim(request("C_ID"))&"'"
rs.open sql,conn,1,3
'如果增加命令,则开始判断是否已经存在相同ID,并确定增加
if not rs.eof and not rs.bof then
response.Redirect("admin_class_index.asp?error=IDexsist")
end if
rs.addnew
rs("C_ID")=server.Htmlencode(request("C_ID"))
rs("C_name")=server.Htmlencode(request("C_name"))
rs.update
[/code][b]添加也完成了,继续后面的action判断,如果是edit则开始修改[/b][code]
else if request("action")="edit" then
if request("id")="" then '没有id值则提示出错
response.redirect "error.asp?errorID=2"
end if
sql="select * from 班级代码表 where C_ID='"&trim(request("C_ID"))&"'"
rs.open sql,conn,1,3
rs("C_name")=server.Htmlencode(request("C_name")) '因为ID不提供更改,所以只更新C_name
rs.update[/code]
[b]修改部分也完成了,下面的是结束判断和释放资源[/b][code]
end if
end if
rs.close
set rs=nothing
conn.close
set conn=nothing
response.Redirect("admin_class_index.asp") '不管是哪步操作完成都跳回前面的页面
else
response.redirect "error.asp?errorID=2" '除了以上3种情况,其他的直接提示出错
end if
%>[/code]
可以添加记录
不能删除,提示:
[b]对象关闭时,操作不被允许。
/admin_class_update.asp,行43 [/b]
行43:[color=gray]rs.close[/color]
[color=red]问题原因已经找到,感谢 iceinheart 的指点!
问题:直接执行到下面会有rs.close,但是之前没有rs.open..之类的语句,所以出错,暂时没有办法测试,不知道修改后是否无问题[/color]
不能修改,提示:
[b]BOF 或 EOF 中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录。
/999/admin_class_update.asp,行38 [/b]
行38:[color=gray]rs("C_name")=server.Htmlencode(request("C_name"))[/color]
我在之前的页面有个
[code]<form name="ClassEdit" method="post" action="admin_class_update.asp?action=edit&id=<%=rs("C_ID")%>">
............
<tr>
<td><div align="center">名称:</div></td>
<td><input type="text" name="C_name" size="12" value="<%=rs("C_name")%>"></td>
</tr>
............
</form>[/code]
请高手帮我看看问题出在哪里,谢谢! |
[ASP]请大家帮我一起讨论这段更新纪录代码[自写代码]
说明一下,数据库表只有 C_ID(主) 和 C_name
在页面里,C_ID没有提供修改。
[color=red]期待大家的回复与指点![/color] |
[ASP]请大家帮我一起讨论这段更新纪录代码[自写代码]
首先类似此类接受多个操作然后分别执行的页面一定要使用select case
现在只不过3个操作,那么多if else 已经让人读着很吃力了,
而select case也是为解决这个问题而存在的
回答你的问题:
不能删除 当执行request("action")="del"的时候,没有打开纪录集,rs.open sql,conn
你的rs.close有写在判断之后,那么何来关闭rs
在修改的时候,执行一下response.write sql 看看什么问题
个人感觉,改成sql="select * from 班级代码表 where C_ID="&trim(request("C_ID"))&""
应该就可以了
|
[ASP]请大家帮我一起讨论这段更新纪录代码[自写代码]
回楼上的话
在 request("action")=del 那段
[b]conn.execute sql[/b]
就是执行了,好像是可以不用 rs.open sql,conn,1,3 这句的
下面的那个问题
我在编辑表单里是会显示出原来的值的
查询数据库语句也是
[b]sql="select * from 班级代码表 where C_ID='"&trim(request("C_ID"))&"'"[/b]
一样的语句,复制的,所以也应该不存在问题
谢谢你的回复! |
[ASP]请大家帮我一起讨论这段更新纪录代码[自写代码]
不错
当然不用rs.open sql,conn,1,3 这句的
但是你语句执行完了 没有response.end
程序继续往下执行遇见了一个rs.close
你说有没有问题 |
[ASP]请大家帮我一起讨论这段更新纪录代码[自写代码]
另外
[code]action=request("action")
id=request("id")
if action="" or id="" then
response.Redirect("error.asp?errorID=1")
else if action="del" and request("id")<>"" then
sql="delete * from notebook where id="&request("id")
conn.execute sql
response.redirect "note_list.asp"
end if
end if[/code]
以上是我在另一个文件里的代码,这段是可以用的,没有rs.open ...这句…… |
[ASP]请大家帮我一起讨论这段更新纪录代码[自写代码]
哦,了解了,没有rs.open...后面就不应该有rs.close这句,谢谢你的指点!
那么,后面不能修改的问题出在哪里?
本来我开始做的是C_ID和C_name都可以修改的,结果修改总是出错,只是修改C_name就不出错,我以为主键不可以修改,所以就不修改C_ID了,不过还是出问题了,现在C_name也不能修改了,请帮我找找问题好吗…… |
[ASP]请大家帮我一起讨论这段更新纪录代码[自写代码]
如果不是引号的问题看不出来
如果是我我会输出一下
sql="select * from 班级代码表 where C_ID='"&trim(request("C_ID"))&"'"
看sql语句接受c_id后成了什么样子 |
[ASP]请大家帮我一起讨论这段更新纪录代码[自写代码]
晕,我想我知道问题在哪了
开始我做的是准备可以修改C_ID的,C_ID在前面的表单里会被传递过来,但是现在改成不能修改C_ID了,所以update页收不到C_ID值,那么
[code]sql="select * from 班级代码表 where C_ID='"&trim(request("C_ID"))&"'"[/code]
这句就错了,前面的页面form里面是
[code]action="admin_class_update.asp?action=edit&id=<%=rs("C_ID")%>"[/code]
所以SQL句应该写成
[code]sql="select * from 班级代码表 where C_ID='"&trim(request("id"))&"'"[/code]
才会正确
仍然感谢 iceinheart 的回复!:p
===============================
另外问一个问题,也是我基础没学好[code]
if ..... then
XXXXXX
end if[/code]
如果不满足 if 后面的条件,[b]XXXXXX[/b]中间的就跳过了,是服务器根本不理会还是读过去却不执行?
换句话说,如果不满足 if 后面的条件,[b]XXXXXX[/b]代码语法有问题,会不会影响后面的执行? |
不会影响
如果不满足就跳过了 |
|