Foros del Web » Programando para Internet » ASP Clásico »

ayuda con funcion que devuelve un recordset

Estas en el tema de ayuda con funcion que devuelve un recordset en el foro de ASP Clásico en Foros del Web. hola! a ver necesito asignar un recordset como resultado de una función. Lo estoy intentando y no se porqué no funciona.. si alguien m echa ...
  #1 (permalink)  
Antiguo 08/06/2005, 13:39
 
Fecha de Ingreso: noviembre-2002
Mensajes: 224
Antigüedad: 21 años, 7 meses
Puntos: 1
ayuda con funcion que devuelve un recordset

hola!
a ver necesito asignar un recordset como resultado de una función. Lo estoy intentando y no se porqué no funciona.. si alguien m echa una mano lo agradeceré eternamente. Gracias

Bueno el codigo q utilizo es el siguiente, a ver si alguien m dice donde me equivoco...

<%

Function BuscarInmuebles()
Set Conexion = Server.Createobject("ADODB.Connection")
Set Rs = Server.Createobject("ADODB.Recordset")
CadenaConexion = "..."
Conexion.Open CadenaConexion
SQL = "..."
Rs.Open SQL,Conexion
set BuscarInmuebles = Rs
set Conexion = nothing
End Sub
%>
...
<%
set RsInmuebles = Server.Createobject("ADODB.Recordset")
set RsInmuebles = BuscarInmuebles
%>

ahmm... he omitido ciertos datos pero tened en cuenta q son correctos.. la consulta funciona, pero lo de devolver el recordset me da el error: Error de Microsoft VBScript en tiempo de ejecución (0x800A000D)
No coinciden los tipos: 'BuscarInmuebles'
  #2 (permalink)  
Antiguo 08/06/2005, 14:08
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 2 meses
Puntos: 9
Hola, la función la tenés que terminar con End Function, no End Sub. Lo segundo que veo es que si bien vos estás creando el RS, no le estás devolviendo nada a la función, porque no lo estás recorriendo, ni estás ejecutando ninguna acción sobre el mismo. Lo que podrías hacer es con el método getRows, hacer que la función te devuelva el array correspondiente que guarda los registros del RS. Sería algo así:


Function BuscarInmuebles()

Dim RSArray 'Aca va guardado el array del RS

set conexion = Server.CreateObject("ADODB.Connection")
set RS = Server.CreateObject("ADODB.RecordSet")
conexion.Open strConn
RS.Open SQL, conexion
RSArray = RS.getRows()
RS.Close
conexion.Close()
set RS = Nothing
set conexion = Nothing

Return RSArray

End Function

Saludos, y espero que alguien abunde más en esto.
Suerte!.
  #3 (permalink)  
Antiguo 08/06/2005, 14:22
 
Fecha de Ingreso: noviembre-2002
Mensajes: 224
Antigüedad: 21 años, 7 meses
Puntos: 1
gracias por responder mariano!
lo de end function ya lo arreglé, ni m había fijado.. pero sigue dando el mismo error. Me extraña que de error aunque no haga nada sobre el recordset despues de abrirlo... esto lo he hecho en visual basic muchas veces y nunca he tenido ningun problema. En cuanto a que me devuelva un array.... necesito tener un recordset, porque lo recorro en diferentes lugares de la web.
como lo ves?
  #4 (permalink)  
Antiguo 08/06/2005, 15:52
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 2 meses
Puntos: 9
Hola, lo veo bien lo que quieres hacer, o mejor dicho, queda a tu criterio. Si me preguntas que haría yo personalmente, yo siempre prefiero utilizar getRows, ya que me permite por un lado cerrar la conexion con la base, cerrar el RS y limpiar ambos objetos, al instante de haberlos creado, mientras que de la otra forma, el recorrido de los registros del RS se hace con la conexion abierta, con el RS abierto, para luego cerrarlos y limpiarlos al final del recorrido. Pero eso, como dije antes, es una visión particular.
Y en cuanto al error, la verdad que no se en donde puede estar. Probaría tu código a ver que resulta, pero hace unos cuantos dias ya que no puedo hacer funcionar las paginas ASP en mi computadora porque ni siquiera me deja conectarme a la base de datos ya.
Te dejo un saludo y espero que lo soluciones, ya sea con uan respuesta desde aquí o por otro lado.
Suerte!.
  #5 (permalink)  
Antiguo 08/06/2005, 16:02
 
Fecha de Ingreso: noviembre-2002
Mensajes: 224
Antigüedad: 21 años, 7 meses
Puntos: 1
Hola mariano! Pues ya que no he encontrado la manera devolviendo el recordset, he probado con getrows, que en serio ni lo conocia, y si ocupa menos recursos, mejor que mejor. El caso es que me sigue dando el mismo error, asi que ya no se que hacer...

hola! he modificado el código tal y como indico a continuación, y me sigue dando el mismo error... ya no se que hacer.. alguien puede ayudarme please?

<%
dim MatrizBusqueda
MatrizBusqueda = BuscarInmuebles("w","ws","ss")
...
%>
...
<%
Function BuscarInmuebles(IdCategoria,IdSubcategoria,IdLocal idad)
dim Conexion,Rs,SQL,ResBusqueda
Set Conexion = Server.Createobject("ADODB.Connection")
Set Rs = Server.Createobject("ADODB.Recordset")
CadenaConexion = "..."
Conexion.Open CadenaConexion
SQL = "SELECT * FROM Immuebles "
Rs.open SQL,Conexion
ResBusqueda = Rs.getRows
Rs.close
Conexion.close
set Rs= nothing
set Conexion = nothing
Return ResBusqueda
End Function
%>


He probado con Return ResBusqueda, y BuscarInmuebles = ResBusqueda, pero no hay manera.... da el mismo error --> No coinciden los tipos: 'BuscarInmuebles'
Alguien sabe que está pasando?
  #6 (permalink)  
Antiguo 08/06/2005, 16:15
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
La linea que devuelve una funcion debe ser

Function BuscarInmuebles()
BuscarInmuebles = algun_valor
End Function

salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #7 (permalink)  
Antiguo 08/06/2005, 16:39
 
Fecha de Ingreso: noviembre-2002
Mensajes: 224
Antigüedad: 21 años, 7 meses
Puntos: 1
buenas otra vez...
en el mensaje anterior ya puse que tb habia sustituido Return resBusqueda por BuscarInmuebles = ResBusqueda, y tampoco va!


.... toy perdiendo la paciencia... que estará pasando?
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:37.