日期:2014-05-16  浏览次数:20884 次

sub之间的数据如何引用?
有两个SUB

sub sub1()

set rs=server.createobject("adodb.recordset")
sql="select * from aa "
rs.open sql,conn,1,1
if not (rs.bof and rs.eof) then
 do while not rs.eof
  select case left(rs("wf2"),4)
   case "ds"
    dszjjg()
   case "zx3"
    zx3zjjg()
  end select
  rs.movenext
 loop
 Rs.close
 Set Rs = Nothing
 Conn.close
 Set conn = Nothing
end if
end sub

sub dszjjg()
tzhm=split(rs("tzhm"))
end sub

当满足条件运行到 sub dszjjg()时,系统提示:

Microsoft VBScript 运行时错误 错误 '800a000d' 

类型不匹配: 'rs' 

/wdwj/tet.asp,行 240 

也就是说在 sub dszjjg()中无法取到 sub1() 中 数据库rs("tzhm")中字段的值,请问是怎么回事?子sub不能引用上级sub中的rs变量吗?


------解决方案--------------------
sub内部变量是独立,你只能传值或定义为公共变量。
------解决方案--------------------
不可以


'应该把值传入sub中
...
case "ds"
     dszjjg(rs)
...

sub dszjjg(rs)
    tzhm=split(rs("tzhm"))
end sub
 

------解决方案--------------------
定义一个全局变量,在SUB1中赋值,在SUB2中就能使用了
------解决方案--------------------
变量改为全局的,要不就修改sub过程,增加参数传递
dim rs''''''
sub sub1()

set rs=server.createobject("adodb.recordset")
sql="select * from aa "
rs.open sql,conn,1,1
if not (rs.bof and rs.eof) then
 do while not rs.eof
  select case left(rs("wf2"),4)
   case "ds"
    dszjjg()
   case "zx3"
    zx3zjjg()
  end select
  rs.movenext
 loop
 Rs.close
 Set Rs = Nothing
 Conn.close
 Set conn = Nothing
end if
end sub

sub dszjjg()
tzhm=split(rs("tzhm"))
end sub