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

asp代码运行有时正常有时出错类型不匹配

guaishi 发布于 2008-05-21 20:24, 1482 次点击
<!--#include file="conn.asp"-->
<%  

a1=request.Form("a1")
a2=request.Form("a2")
a3=request.form("a3")
a4=request.Form("a4")
a5=request.form("a5")
a6=request.form("a6")
a7=request.form("a7")
a8=request.form("a8")
a9=request.Form("a9")
a10=request.Form("a10")
a11=request.Form("a11")
a12=request.Form("a12")
a13=request.form("a13")
a14=request.Form("a14")
a15=request.form("a15")
a16=request.form("a16")
a17=request.form("a17")
a18=request.form("a18")
a19=request.Form("a19")
a20=request.Form("a20")
a21=request.Form("a21")
a22=request.Form("a22")
a23=request.form("a23")
a24=request.Form("a24")
a25=request.form("a25")
a26=request.form("a26")
session("zong")=0+a1+a2+a3+a4+a5+a6+a7+a8+a9+a10+a11+a12+a13+a14+a15+a16+a17+a18+a19+a20+a21+a22+a23+a24+a25+a26
set rs=server.CreateObject("adodb.recordset")
rs.open"select * from [check] where xing='"&session("xing")&"'",conn,1,3
if rs.eof then
rs.addnew
rs("a1")=a1
rs("a2")=a2
rs("a3")=a3
rs("a4")=a4
rs("a5")=a5
rs("a6")=a6
rs("a7")=a7
rs("a8")=a8
rs("a9")=a9
rs("a10")=a10
rs("a11")=a11
rs("a12")=a12
rs("a13")=a13
rs("a14")=a14
rs("a15")=a15
rs("a16")=a16
rs("a17")=a17
rs("a18")=a18
rs("a19")=a19
rs("a20")=a20
rs("a21")=a21
rs("a22")=a22
rs("a23")=a23
rs("a24")=a24
rs("a25")=a25
rs("a26")=a26
rs("zong")=session("zong")
rs("user")=session("user")
rs("xing")=session("xing")
rs("arress")=session("arress")
rs.update
rs.close
set rs=nothing

conn.close
set conn=nothing
language='javascript'>alert('记录完成');window.location.href='reg.asp';</script>"
else
response.write"<script language='javascript'>alert('你填写过一次了');window.location.href='reg.asp';</script>"
end if
%>


session("zong")=0+a1+a2+a3+a4+a5+a6+a7+a8+a9+a10+a11+a12+a13+a14+a15+a16+a17+a18+a19+a20+a21+a22+a23+a24+a25+a26
这句话报错
12 回复
#2
multiple19022008-05-21 20:29
是不是有的an,n=1,2,3,...,26是空字符串?
vbscript里的加法,如果能转换为数值就按数值计算的,这里你已经写了个0它就一定要转换为数值计算的对吧?但是空字符串没法转换为数值计算.你可以在an,n=1,2,3,...,26前面并上一个"0",这样就可以计算了,但是对于负数无法处理.

更建议你不要利用vbscript对于语法的宽松,这样写是给自己找麻烦.
#3
hxfly2008-05-21 20:54
取过来的值应该是被认为是字符串类型的,而你第一个相加的是0 是数字类型的
如果你保证你的a1,a2,a3,a4所输入的全是数字但还是有问题,那就强制把a1,a2,a3等转换成数字类型
#4
guaishi2008-05-21 21:23
有负数呀。强转化成整形也报错呀
#5
guaishi2008-05-21 21:24
为空是不可能的前一个页面做了JS检测
#6
guaishi2008-05-21 21:25
是不是正常的时候没有负数呀,有负的情况下如何做
#7
live142008-05-21 21:27
fuunction sz(str)
if IsNumeric(str) then
sz=cint(str)
else
sz=0
end if
end function


session("zong")=0+sz(a1)+sz(a2)。。。。。

这样测试一下
#8
guaishi2008-05-21 21:33
负数会不会变成0
#9
live142008-05-21 21:57
不会
负数也是NUM类型的
#10
guaishi2008-05-22 09:15
谢谢通过了,谢谢你们了
#11
google2008-05-22 10:33
注意一下运行结果是不是正确,如果你确保每个输入都不为空,并且每个输入都是数字类型的话,那sz这个函数起到的作用就是cint,如果你输入的错误了,比如你输入了字母,sz这个函数强制把字母转换成了0,虽然程序没有报错,但是计算结果可能就不是你想的那个计算结果了
#12
yms1232008-05-22 14:59
如果是这种整数加法的ASP运算代码楼主可以使用循环来做
<%
   Dim NumAry(26),i,Total,IsError,temp,rs
   IsError=False
   For i=1 To 26
       temp=Request.Form("a"&CStr(i))
       NumAry(i)=CInt(temp)
       Total=Total+CInt(Temp)
   Next
   session("zong")=Total
   set rs=server.CreateObject("adodb.recordset")
   rs.open "select * from [check] where xing='"&session("xing")&"'",conn,1,3
   Response.Write "<script language=javascript >"
   IF rs.EOF Then
      rs.addNew
      For i=1 To 26
          Dim FieldName
          FieldName="a"&CStr(i)
          rs(FieldName)=NumAry(i)
      Next
     rs("zong")=session("zong")
     rs("user")=session("user")
     rs("xing")=session("xing")
     rs("arress")=session("arress")
     rs.update
     rs.close
     set rs=nothing
     conn.close
     set conn=nothing
     Response.Write "alert('记录完成');"
     Response.Write "window.location.href='reg.asp';"
else
     Response.write "alert('你填写过一次了');"
     Response.Write "window.location.href='reg.asp';"
end if
Response.Write "</script>"
%>
这种情况下应该使用循环或数组来完成操作。
#13
guaishi2008-05-24 08:48
有负数存在,第一次我也是用数组来做的,负数存在搞的老是报错
1