URGENTE: variable tipo object o de bloque with no esta establecida

projunior
30 de Enero del 2006
Saludos amigos del foro, tengo un problema en este punto: es una aplicacion en vb 6.0 con una conexion a una bd en access, tengo una funcion en un modulo de clase q tiene el siguiente codigo:
Function Query(ByVal cod As String) As ADODB.Recordset

Dim sql As String
On Error GoTo UnError

sql = "select codcli,nomcli from Clientes where CODCLI='" & cod & "'"

Set Query = cn.Execute(sql)
Exit Function

UnError:
MsgBox Err.Description, vbInformation

End Function
Y esta a su ves es llamada en el formulario con el boton consultar de la siguiente forma:
Private Sub cmdConsultar_Click()
Dim obj As clsClientes
Dim rs As ADODB.Recordset
Dim resp As String

Set obj = New clsClientes

resp = InputBox("Ingrese codigo a buscar", "Buscar")

Set rs = New ADODB.Recordset
Call Conecta
Set rs = obj.Query(resp)

If rs.EOF = True Then
MsgBox "El cliente no existe", vbInformation
Else
txtCod = rs!codcli
txtNom = rs!nomcli

End If
rs.Close
Call Cierra

Set rs = Nothing
Set obj = Nothing

End Sub
Ahora el problema es que cuando pulso el boton consultar e ingreso el dato en el inputbox acepto y me arroja el error: variable tipo object o de bloque with no esta establecida en la linea donde empieza el If con el rs.EOF esta linea se resalta en amarillo.
No se como llegar al asunto de esto asi que solicito su ayuda para resolver este problema, espero consideren mi mensaje, GRACIAS.

mvallejos
30 de Enero del 2006
No veo errores en tu código, prueba lo siguiente, en la funcion, escribe así

Set Query = New ADODB.Recordset
Set Query = cn.Execute(sql)

Saludos

projunior
30 de Enero del 2006
Gracias por la observacion, pero ahora el error es el siguiente: la operacion no esta permitida si el objeto esta cerrado en la fila If rs.EOF = True Then justo se resalta en amarillo.

Aunque la aplicacion si funciona si agrego la funcion en el General del formulario y la llamo con el boton de esta manera:
Function consultar(ByVal cod As String) As ADODB.Recordset
Dim sql As String
On Error GoTo UnError

sql = "select codigo,nombre from Clientes where codigo='" & cod & "'"
Set consultar = New ADODB.Recordset
Set consultar = cn.Execute(sql)
Exit Function

UnError:
MsgBox Err.Description, vbInformation

End Function
Y en el boton:
Private Sub cmdMostrar_Click()
Dim rs1 As ADODB.Recordset, resp As String
Set rs1 = New ADODB.Recordset
resp = InputBox("Ingrese codigo", "Buscar")
Call conecta
Set rs1 = consultar(resp)
If rs1.EOF = True Then
MsgBox "No se encontro", vbInformation, "Mensaje"
Else
txtCod.Text = rs1!codigo
txtNom.Text = rs1!nombre
End If
rs1.Close
Call cierra
Set rs1 = Nothing
End Sub
Aqui segui tu consejo y con esta codificacion si funciona de todas maneras quisiera que funcionara usando el modulo de clase, SALUDOS Y GRACIAS.