| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 617 人关注过本帖
标题:有个问题请高手解释一下!
只看楼主 加入收藏
ordosit
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-10-21
收藏
 问题点数:0 回复次数:4 
有个问题请高手解释一下!
在写我的网站时遇到这样一个情况
就是我想统计数据库读取次数,而且呢当数据库有错误时进行详细提示,且简化代码,因为总是记不住set rs=???????
呵呵,于是想到了Function

与是在我自己写的类里面集成了这个Function

程序代码:
 Public Function Open(rsName,sqlName,a,b)

         If Not IsObject(Conn) Then OpenConn
        IF CE_Clng(a) = 0 or CE_Clng(b) = 0 Then
        ErrMsg = "记录集打开参数错误"
        Call WriteErrMsg(0,-1,"")
        End IF
        IF sqlName = "" or IsNull(sqlName) Then
        ErrMsg = "所需打开记录集为空"
        Call WriteErrMsg(0,-1,"")
        End IF
        On Error Resume Next
        Set rsName = Server.CreateObject("Adodb.Recordset")
        rsName.Open sqlName,Conn,a,b
        If Err Then
            Set rsName = Nothing
            Conn.Close : Set Conn = Nothing
            Response.Write "<span style='font-size:14px;'>执行查询代码时发现错误。<br />"&sqlName&"</span>"
            ExecuteErr            
        Else
        SqlQueryNum=SqlQueryNum+1
        End IF

 End Function


然后我在测试时是这样
Set CE               = New CE_Cache  '这个是调入类的
Dim rs,sql
sql = "selec * from config"
CE.Open rs,sql,1,1
response.write rs(0)
测试后尽然通过
但是百思不得其解的是我在过程里截断看rsName是否有值时确看到是空值
但是语名是没问题,我就是不明白这里的rs如何传到函数内的!是直接将rsname替换为rs?
盼高手说原理
搜索更多相关主题的帖子: 解释 
2008-10-04 16:12
yms123
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:209
帖 子:12488
专家分:19042
注 册:2004-7-17
收藏
得分:0 
Set rsName = Server.CreateObject("Adodb.Recordset")
        rsName.Open sqlName,Conn,a,b
rs在执行到这句之前肯定是Nothing的空值。
2008-10-04 17:17
yms123
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:209
帖 子:12488
专家分:19042
注 册:2004-7-17
收藏
得分:0 
这里rsName和rs是引用关系,原因在于用普通类型的变量作参数时是传递副本到函数内,而用rs这类复合类型变量作参数传递到函数内的是引用。
比如
<script language="vbscript">
Class A
   Public Test
End Class
Function VarA(A)
   A=A+1
   MsgBox A
End Function
Function ClsA(A)
   A.Test=A.Test+1
   MsgBox A.Test
End Function
Dim VA,CA
VA=0
VarA VA
MsgBox VA
ClsA CA
MsgBox CA.Test
</script>
2008-10-04 17:24
ordosit
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-10-21
收藏
得分:0 
还是有点不明白,因为这个东西测试通过了,只是不知道为什么会成功
2008-10-05 10:31
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
收藏
得分:0 
引用,就是说运行时函数里面的rsName跟输入的rs是一个东西,完全占一样的内存空间的东西。
你看你传进去的rs是什么,是一个新定义的空变量。于是刚刚传进去的rsName也是一个Nothing,于是在你Set rsName之前,rsName都是Nothing。
2008-10-05 12:23
快速回复:有个问题请高手解释一下!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015819 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved