使用全局临时记录集模块内的交换信息vba
我想开发一个函数,执行所有查询到数据库并将结果存储在全局记录集中以便在其他函数中使用它,但是当函数或子结束时,全局记录集变空(超出范围)。我怎样才能解决这个问题?使用全局临时记录集模块内的交换信息vba
模块内容:
Global rsResultado As ADODB.Recordset
Sub main()
sql = "query works ok, I get data"
realizarConsulta (sql)
Debug.Print "Check result: " & rsResultado.Fields(0) 'Here I lost data setted in function
End Sub
Public Function realizarConsulta(sql As String) As Recordset
conectarBD
Debug.Print "SQL Ejecutada -->" & sql
Set rsResultado = New ADODB.Recordset
rsResultado.Open sql, Conn
'Set realizarConsulta = rs
'Set rsResultado = rs
Do While Not rsResultado.EOF
Debug.Print "Registro: " & rsResultado.Fields(0)
rsResultado.MoveNext
'Here I can see the content of the global recordset
Loop
'rs.Close
Conn.Close
End Function
有没有什么办法来解决这个问题?我究竟做错了什么?
全球Recordset
得到空的,因为你Function
内紧密联接,该Recordset
while循环后,花光了所有的记录,并且必须从Function
设置记录:
1-像主子设置Recordset
对象: Set rsResultado = realizarConsulta(sql)
2-初始化与rsResultado.MoveFirst
3-集函数对象Recordset
对象内部功能的:Set realizarConsulta = rsResultado
4,请不要关闭连接对象Conn
Sub main()
'..
Set rsResultado = realizarConsulta(sql)
rsResultado.MoveFirst
Debug.Print "Check result: " & rsResultado.Fields(0)
End Sub
Public Function realizarConsulta(sql As String) As Recordset
conectarBD
Debug.Print "SQL Ejecutada -->" & sql
Set rsResultado = New ADODB.Recordset
rsResultado.Open sql, Conn
Do While Not rsResultado.EOF
Debug.Print "Registro: " & rsResultado.Fields(0)
rsResultado.MoveNext
Loop
Set realizarConsulta = rsResultado
'rs.Close
'Conn.Close
End Function
您还需要设置到数据库的连接是Global
。否则,当连接关闭时,您的RecordSet
会重置。所以,如果你添加
Global conDataBaseConnection As ADODB.Connection
那么它应该工作(我的系统上测试)。
由于我没有看到您的ADODB.Connection
声明,我刚刚通过示例进行了命名。显然,你必须改变代码以符合你的编程。
我错了,因为我关闭了BD连接,当你这样做时,你失去了存储在取决于该连接的记录集中的任何数据。无论如何感谢您的时间。 – Carol
我有一个模块的全局记录集,我想设置(把它的信息)该记录集函数或子内,然后在该函数(或子)以外使用它。但是,当取出函数(或子)时,该记录集脱离了上下文。如果它是一个全局变量,它的值被设置在一个函数内,它怎么会这样?它应该保持de函数(或子函数)之外的数据。 – Carol