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

更新只有第一条记录(update)求助

lele2007 发布于 2008-05-06 17:32, 2474 次点击
<[email=%@LANGUAGE=]%@LANGUAGE="VBSCRIPT[/email]" CODEPAGE="936"%>
<% option explicit %>
<!-- #include file="conn.asp"-->
<%
dim rs,sql,f_dianji,id,f_url   '定义变量供使用,不定义变量会出错哦!
id=request.querystring("f_id") '把前个页面的ID值获取并付给变量id
if id="" then
response.write "<script language='javascript'>alert ('乐乐提示:\n\n★非法操作!')</script>"
response.write "<script language='javascript'>window.location='friends.asp'</script>"
end if
on error resume next
set rs=server.createobject("adodb.recordset")
sql="select * from friend where f_id=" & id
rs.open sql,lele,1,1
f_dianji=rs("f_dianji")
f_url=rs("f_url")             '读取数据库中的字段f_url以供response.redirect使用跳转
if err then
response.write "<script language='javascript'>alert ('乐乐提示:\n\n★出现错误码!')</script>"
response.write "<script language='javascript'>window.location='friends.asp'</script>"
end if
if f_dianji=0 then      '如果点击为0则付值为1,否则则执行加1并更新数据库现有的数据!
rs("f_dianji")=1
else
sql="update friend set f_dianji=f_dianji+1 where f_id=" & id
lele.execute(sql)
end if
response.redirect(f_url)   '执行完后立即跳转到f_url的地址!
%>
------------------------------------
请问一下,为什么只有第一条记录id=1可以成功点击一次+1其它的没有反应的?
16 回复
#2
hmhz2008-05-06 17:37
sql="update friend set f_dianji=f_dianji+1 where f_id=" & id  
改成
sql="update friend set f_dianji="&f_dianji&"+1 where f_id=" & id

[[it] 本帖最后由 hmhz 于 2008-5-6 17:42 编辑 [/it]]
#3
madpbpl2008-05-06 17:41
1.调试的时候把下面这句注释掉
on error resume next
2.if f_dianji=0 then      '如果点击为0则付值为1,否则则执行加1并更新数据库现有的数据!
rs("f_dianji")=1
既然出现了更新,则下面这句写法有问题
rs.open sql,lele,1,1
要改成
rs.open sql,lele,1,3
#4
lele20072008-05-06 17:43
我的域名/fshow.asp?f_id=6
是这样的,但是我按照版主的方法改了下,还是只可以更新第一条记录,不知道为什么其它的记录还是不更新!请教下是什么问题的呢?谢谢指教
#5
hmhz2008-05-06 17:44
楼上的看清楚,上面的只是读取,1,1就可以了
下面的
sql="update friend set f_dianji=f_dianji+1 where f_id=" & id
lele.execute(sql)
才是真正修改程序
#6
hmhz2008-05-06 17:48
不明白楼主要修改的哪些字段,从你的程序看,你只修改f_dianji字段的内容
#7
hmhz2008-05-06 17:50
还有你说的第一条记录是指id=1的吗?
你改id=6的不可以改吗?
#8
lele20072008-05-06 17:51
不好意思,找到问题了。
if f_dianji=0 then      '如果点击为0则付值为1,否则则执行加1并更新数据库现有的数据!
rs("f_dianji")=1
else
sql="update friend set f_dianji=f_dianji+1 where f_id=" & id
lele.execute(sql)
end if
response.redirect(f_url)   '执行完后立即跳转到f_url的地址!
-------------------------------
我把上面的改成:
------------------------------
sql="update friend set f_dianji="&f_dianji&"+1 where f_id=" & id
lele.execute(sql)
response.redirect(f_url)   '执行完后立即跳转到f_url的地址!
%>
就可以了,然后把数据库的字段默认值设置为:0  只是不明白为什么?
if f_dianji=0 then      '如果点击为0则付值为1,否则则执行加1并更新数据库现有的数据!
rs("f_dianji")=1

这个判断等于没有判断一样!呵呵





既然出现了更新,则下面这句写法有问题
rs.open sql,lele,1,1
要改成
rs.open sql,lele,1,3

这个问题。我想我是直接用execute的应该不用改成参数是:1,3吧
rs.open sql,lele,1,1这个在我这里现在只是读取时用到了!呵呵,初学者真的不太明白!谢谢指教了!
#9
lele20072008-05-06 17:59
sql="update friend set f_dianji=f_dianji+1 where f_id=" & id  
改成
sql="update friend set f_dianji="&f_dianji&"+1 where f_id=" & id
版主,问下,我用这两个都可以了!不太明白是第二个加上:"&f_dianji&"这个。跟:我写的那个不一样的吗?我都是用了第一种!:"&f_dianji&"很少用过!不太明白它们有什么不一样,呵呵!
#10
hmhz2008-05-06 18:02
很明显 判断 if f_dianji=0 then 内容中有0,就会执行 rs("f_dianji")=1
 这个语句了
而这个语句在这里是无法执行的,因为这样写就得把 1,1改成1,3
并且 rs("f_dianji")=1下面要加个 rs.update
但一个lele.execute "update friend set f_dianji="&f_dianji&"+1 where f_id="&id
就足够了,不需要在判断是否为0了,因为 f_dianji="&f_dianji&"+1 里的"&f_dianji&"为0的话,就是 f_dianji=0+1 结果还是f_dianji=1 写入了
#11
hmhz2008-05-06 18:08
f_dianji=f_dianji+1  应该是错误的,因为这里的f_dianji不是变量名了
#12
lele20072008-05-06 18:11
哦!现在明白了!版主的解释完全可以看懂了!原来错在了rs("f_dianji")=1这里了!如果为0其实是判断到了。但是虽然负值了!但是还没有更新的操作!呵呵
#13
madpbpl2008-05-06 18:42
网络问题发重了,不好意思

[[it] 本帖最后由 madpbpl 于 2008-5-6 18:52 编辑 [/it]]
#14
lele20072008-05-06 23:23
版主,你这句话说得有些学问:


f_dianji=f_dianji+1  应该是错误的,因为这里的f_dianji不是变量名了

请问下为何会说:f_dianji不是变量名了?可是在现在这个程序中这两种方法都可行,点击都加了1。视它不是变量名,真的不太懂!

可呵,楼上的。谢谢!只是看到你在贴子后面道歉?有点不解!呵呵,有错误纠正过来嘛!何况是在解决问题呢!我得感谢你才是!呵呵!
#15
lele20072008-05-06 23:28
难道版主的意思是指:
set rs=server.createobject("adodb.recordset")
sql="select * from friend where f_id=" & id
rs.open sql,lele,1,1
要在这里后面定义:dim f_dianji
才算f_dianji=f_dianji+1这个是有效的?可是我还是不太明白:
f_dianji="&f_dianji&"+1      f_dianji=f_dianji+1
似乎没有什么不一样的!看不太懂!就比如:

sql="select * from friend where f_id=" & id
这句来说,如果用版主的方法则是写成:
sql="select * from friend where f_id="&id&""这样吗?
可是感觉好像都一样,还是不太明白有什么不同。呵呵 可能是我没理解。初学者真的凝问多多的!太感谢了!
#16
hmhz2008-05-07 08:30
f_id=" & id  同等 f_id="&id&""  后面的 &""可以省略,但就不能同等 f_id=id
你说对吗?
还有你说 f_dianji=f_dianji+1 也能加1  那不是加1了,而是原来的数字被替换成1了
如果原来的数字 是2的话,就不会在原来的基础上2+1=3的数字了,而是直接替换成1的数字了
所以说,这里的f_dianji根本就不起作用的,要么就操作无应答,要么就操作错误
#17
lele20072008-05-07 09:46
f_id=" & id  同等 f_id="&id&""  后面的 &""可以省略,但就不能同等 f_id=id
你说对吗?
这个是的,如果f_id=id这样好像是对f_id进行负值了!

f_dianji="&f_dianji&"+1      f_dianji=f_dianji+1

但是我现在用这两个方法都能成功点击加1的功能!所以还是比较含糊!
现在我个人理解成这样了:
f_dinaji="&f_dianji&"+1
这是:3=3+1     4=4+1     5=5+1
f_dianji=f_dianji+1
这个好像也是:3=3+1  然后f_dianji已经是4了,所以4=4+1  
f_dianji+1  我觉得前面定了变量rs("f_dianji")那应该在以前加了1后读出的数据才是的吧?还是不太了解这两年!
1