retornar un recordset desde una clase

juanweston
05 de Septiembre del 2003
mi problema es que quiero retornar un recordset ejecutando un metodo de una clase, pero cuando me lo devuelve esta cerrado y no me lo deja abrir.
me esta faltando algo?
envio un codigo resumido como ejemplo. Gracias.

Private Sub Form_Load()
Dim rs As New ADODB.Recordset
Dim Consulta As New cConsulta

Set rs = Consulta.Ejecutar("SELECT * FROM clientes")

// AQUI ESTA MI PROBLEMA. ya me dice que el recordset no se puede abrir

Set rs = Nothing
Set Consulta = Nothing
End Sub

Public Function Ejecutar(consulta as string) As ADODB.Recordset
Dim cn As New cConexion

cn.Inicializar App.path & "base de datos.mdb", ClaveBD
cn.SQL consulta

Set Ejecutar = cn.rs // hasta aqui todo OK. el recordset devuelve registros
Set cn = Nothing
End Function

Juan
05 de Septiembre del 2003
Te expongo mi hipótesis. Creo que el problema está
en que el objeto cn es destruido al terminar la función
Ejecutar porque ese objeto está declarado dentro de
la mismafunción y cuando esta termina sus variables
son liberadas.

Después de eso es normal que lo que devuelve la función
no sea correcto, ya que el valor de retorno es una referencia
a un objeto destruido.

Yo en tu lugar declararía el objeto cn a nivel de módulo,
de forma que exista mientras existe el objeto consulta.