下面这个函数中
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岂不是什么也没有了?
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岂不是什么也没有了?
解决方案 »
- vbs如何批量压缩文件夹里的多个文件
- 记住重新打开的richtextbox的位置?
- 如何去看别人的程序 请有经验的程序员指教
- 發現一個絕對免費的FTP空間
- vb操作的基本小问题。比如打开记事本阿之类的!大家指点一下
- 请问:如何使执行后的程序 在按Ctrl+Alt+Del弹出的关闭程序列表中看不到?
- 怎样得到计算机的驱动器列表和各驱动器的文件夹列表?
- 在VB程序中怎样设置版本信息,并让程序读取。
- 为什么我在录入数值型字段内容时,系统总是把小数进行四舍五入(Access数据库)
- 紧急求助!!!怎样用VB调用存储过程??
- VB如何控制某个EXE文件中的文本框及按钮
- VB如何使用Ftp方式下载服务器端指定目录下的所有文件?请高手指教!谢谢!
让函数返回一个rst的引用。
2、Finally_Exit:
Set rst = Nothing
Set Conn = Nothing
以上三句执行完后,SelectSQL岂不是什么也没有了?
不会,set rst = Nothing 是将当前函数内的变量rst引用计数-1。SET obj = Nothing只是负责减少引用计数。当且仅当引用计数减为0时,SET Nothing才会触发释放对象的事件。
set SelectSQL = Conn。execute()
免了rst那部分。
2、因為已經前面執行,Set SelectSQL = rst,所以即使rst變量釋放,SelectSQL的值不會跟著釋放。
2.只有当Set SelectSQL =nothing ,Conn才会=nothing
不会因为 Set rst = Nothing 或 Set Conn = Nothing 而使SelectSQL=nothing
理解的方向换一下
如你所说,那RST和CONN这两个变量如何注销了,除了函数自己运行结束外。
那您是说
Set rst = Nothing
Set Conn = Nothing
是将这两个变量释放了,对吧。还是再就是SELECTSQL将RST获得的记录集复制了一份,不是简单的引用对吗?
怪怪的,这么多人回答了,我还没找到一个可意的。CSDN这么多能人、高手,你说怪不怪。
你的函数返回值在哪里使用,使用后再set obj = nothing