Clase que devuelve un Recordset
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
=====================================
=====================================
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
=====================================
=====================================
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
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
"NO" es una constanten tipo boolean que es false, uso eso para que sea mas legible.
If ReturnRecorset = NO Then Exit Function
salu2
If ReturnRecorset = NO Then Exit Function
salu2
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.
Much铆simas gracias.
Saludos, Mat铆as.
