下面这个函数中
Public Function SelectSQL(ByVal SQLStr As String, ByRef msg As String) As ADODB.Recordset
'执行SQL语句,返回ADODB.Recordset
    Dim Conn As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim sTokens() As String
    '出错处理
    On Error GoTo ErrorHandle
    '判断SQL语句
    sTokens = Split(SQLStr)
    If InStr("SELECT", UCase((sTokens(0)))) Then
        '打开数据库连接
        If OpenConn(Conn) Then                      '如果打开连接成功,就进行查询操作
            Set rst = New ADODB.Recordset
            rst.CursorLocation = adUseClient
            rst.Open Trim$(SQLStr), Conn, adOpenDynamic, adLockOptimistic     '执行查询操作
            Set SelectSQL = rst
            msg = "查询到" & rst.RecordCount & " 条记录! "
        End If
    Else
        msg = "SQL语句有误:" & SQLStr
    End If
Finally_Exit:
    Set rst = Nothing
    Set Conn = Nothing

    Exit Function
ErrorHandle:        '如果SQL语句执行出错,提示出错信息并转到Finally_Exit
    MsgString = "查询错误: " & Err.Description
    Resume Finally_Exit
End Function问题如下:
1、Set SelectSQL = rst   作用是什么?
2、Finally_Exit:
    Set rst = Nothing
    Set Conn = Nothing
   以上三句执行完后,SelectSQL岂不是什么也没有了?

解决方案 »

  1.   

    1、Set SelectSQL = rst  作用是什么? 
    让函数返回一个rst的引用。
    2、Finally_Exit: 
        Set rst = Nothing 
        Set Conn = Nothing 
      以上三句执行完后,SelectSQL岂不是什么也没有了? 
    不会,set rst = Nothing 是将当前函数内的变量rst引用计数-1。SET obj = Nothing只是负责减少引用计数。当且仅当引用计数减为0时,SET Nothing才会触发释放对象的事件。
      

  2.   

    直接用
    set SelectSQL = Conn。execute()
    免了rst那部分。
      

  3.   

    1、同1樓所講,把結果通過函數返回。
    2、因為已經前面執行,Set SelectSQL = rst,所以即使rst變量釋放,SelectSQL的值不會跟著釋放。
      

  4.   

    1.将对象rst的引用赋给SelectSQL
    2.只有当Set SelectSQL =nothing  ,Conn才会=nothing 
    不会因为  Set rst = Nothing  或 Set Conn = Nothing  而使SelectSQL=nothing
    理解的方向换一下
      

  5.   


    如你所说,那RST和CONN这两个变量如何注销了,除了函数自己运行结束外。
      

  6.   


    那您是说 
        Set rst = Nothing
        Set Conn = Nothing
    是将这两个变量释放了,对吧。还是再就是SELECTSQL将RST获得的记录集复制了一份,不是简单的引用对吗?
      

  7.   


    怪怪的,这么多人回答了,我还没找到一个可意的。CSDN这么多能人、高手,你说怪不怪。
      

  8.   

    函数的一开始就定义了RST和CONN这两个局部变量,当SELECTSQL函数执行完毕后,这两个局部变量应该就寿终正寝了,怎么还说是什么变量rst引用计数-1。真是看不明白呀。
      

  9.   

    http://download.csdn.net/source/1498324
      

  10.   


    你的函数返回值在哪里使用,使用后再set obj = nothing