Clase que devuelve un Recordset

airmatt23
15 de Septiembre del 2005
Hola a todos. Soy nuevo en este foro, y tengo la esperanza de que me den una mano con un problema que estoy teniendo. Estoy programando una aplicación en VB6, que se conecta a una BD Access 2000. Trabajo con dos clases. La clase clslogin y la clase clsdatos. La idea es que la clase clslogin haga la validación de usuario y password, mientras que la conexión con la BD la realice la clase clsdatos.

Todo va bien, hasta que la clase clslogin llama al método leer de la clase clsdatos de la forma "r = d.leer(sql)" pasando la sentencia sql como parámetro (con la variable de nombre sql) para que clsdatos devuelva un recordset.

En esta línea, resaltando la variable r, el sistema me informa el error "USO NO VALIDO DE LA PROPIEDAD".

Por favor, podrían ayudarme a solucionar este problema.

Desde ya, les agradezco a todos...

Adjunto el código:

=====================================
=====================================

Option Explicit
Public rs As New ADODB.Recordset
Public cn As New ADODB.Connection
__________________

Public Function leer(ByVal sql As String) As ADODB.Recordset
Set rs = New ADODB.Recordset
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & App.Path & "\DBCG.mdb"
\'cn.CursorType = adOpenDynamic
cn.Open
rs.Open sql, cn
If rs.EOF And rs.BOF Then
MsgBox ("No hay registros")
Else

rs.MoveFirst

Set leer = rs

End If

\'rs.Close
\'cn.Close

Exit Function
End Function


=====================================


option Explicit

Public sql As String
Public r As ADODB.Recordset
Public d As clsdatos
__________________

Public Function validar()

Set d = New clsdatos
Set r = New ADODB.Recordset
sql = "SELECT * FROM usuarios"
r = d.leer(sql) \' EN ESTA LINEA, PUNTUALMENTE SOBRE LA VARIABLE r ME DICE "USO NO VALIDO DE LA PROPIEDAD"


End Function

=====================================
=====================================

Pablo Mereles
15 de Septiembre del 2005
Hace una cosa.
desde la parte del programa que necesitas el recordset, declara un recorset y pasalo como parametro, vas a necesitar cambial la funcion de la clase, bueno la clase recibe el recorset, hace la operacion y listo.
aca te mando la funcion que uso yo para este tipo de casos
fijate que "returnrecorset es para setear si requiere debolucion de recorset o no, en tu caso particular si la va a requerir, pero cuando tengas ke hacer algun UPDATE no va s a necesitar enviar recorset.
la funcion anda barabro, espero te sirva


Public Function ConsultaSQL(Query As String, ReturnRecorset As Boolean, Optional Recorset As ADODB.Recordset) As Boolean
'
Dim cmd As New ADODB.Command
On Error GoTo error
'
ConsultaSQL = True

With cmd
Set .ActiveConnection = Conn
.CommandText = Query
.CommandType = adCmdText
.Execute
End With

If ReturnRecorset = NO Then Exit Function

Recorset.CursorType = adOpenKeyset
Recorset.LockType = adLockOptimistic
Recorset.CursorLocation = adUseClient

Recorset.Open cmd

Exit Function
'
error:
'
ConsultaSQL = False
MsgBox Err.Description
'
End Function

Pablo Mereles
15 de Septiembre del 2005
"NO" es una constanten tipo boolean que es false, uso eso para que sea mas legible.

If ReturnRecorset = NO Then Exit Function

salu2

airmatt23
15 de Septiembre del 2005
Gracias Pablo!! Me re sirvió lo que pasaste. Anda muuuy bien! Le hice algunas adaptaciones en la forma de conexión, ya que quería mantener las líneas de código que tenía para este fin, pero en cuanto a la devolución del recordset, lo implementé de la forma en que vos decís, y anda perfecto!!

Muchísimas gracias.

Saludos, Matías.