Mostrar datos en Arbol

08/11/2006 - 11:04 por Onix | Informe spam
Buenos días:

He estado mirando el foro y veo que hay respuestas al respecto, pero al
intentar programar la función recursiva me da problemas.

Mi estructura de tabla es la siguiente:

idPost (autonumerico)
idPadre (relación a otros idPost de la misma tabla)
texto

La función que tengo ahora:

function getHijo(idPadre)
strSQL = "SELECT * FROM FORO_POST WHERE idPadre = " & idPadre & " Order By
fecha DESC"
Set RS = cn.Execute (strSQL)

While (Not RS.EOF)
Response.Write(RS("idPost") & "|" & RS("idPadre") & "|" & RS("titulo") &
"<br>")
Call getHijo(RS("idPost"))
Wend
end function

Call getHijo(0)

De manera que voy haciendo consultas a la BD sobre los idPost que van
apareciendo.

Lo que me ocurre es que sí que lo hace bien, pero únicamente llega a un
nivel, es decir:

PREGUNTA 1
RESPUESTA 1
RESPUESTA 1_1
RESPUESTA 1_1_1
RESPUESTA 1_2
RESPUESTA 2

Con esta función únicamente muestra:
PREGUNTA 1
RESPUESTA 1
RESPUESTA 1_1
RESPUESTA 1_1_1

Por lo que he podido mirar lo que está ocurriendo es que el Recordset que se
crea en la función al entrar en bucle y tener la función recursiva, está
cogiendo los últimos valores, es decir, RESPUESTA 1_1_1. No sé si me
explico.

Más gráficamente:

While (Not RS.EOF)
Response.Write(RS("idPost") & "|" & RS("idPadre") & "|" & RS("titulo") &
"<br>")
Call getHijo(RS("idPost"))
-> Al llegar aqui, y haber pasado por todas las subopciones, el RS
"primario" ya no mantiene los valores del primer SQL ejecutado. Es decir, es
como si cada vez que ejecuto la sql al entrar a la función el RS se reinicia
(como si fuese pasado ByRef).
Wend

Alguien sabe como solucionar este problema?

Gracias de antemano.

Un saludo
 

Leer las respuestas

#1 Matias Iacono
08/11/2006 - 18:26 | Informe spam
Una cosa similar me paso cuando cree una funcion similar.

La respuesta es que debes crear la instancia de la variable RS por cada
ciclo de tu funcion.

O sea (supuestamente), con hacer un DIM RS dentro de tu funcion, se
arreglaría.

Saludos.

Microsoft MVP
Orador Regional INETA


"Onix" wrote:

Buenos días:

He estado mirando el foro y veo que hay respuestas al respecto, pero al
intentar programar la función recursiva me da problemas.

Mi estructura de tabla es la siguiente:

idPost (autonumerico)
idPadre (relación a otros idPost de la misma tabla)
texto

La función que tengo ahora:

function getHijo(idPadre)
strSQL = "SELECT * FROM FORO_POST WHERE idPadre = " & idPadre & " Order By
fecha DESC"
Set RS = cn.Execute (strSQL)

While (Not RS.EOF)
Response.Write(RS("idPost") & "|" & RS("idPadre") & "|" & RS("titulo") &
"<br>")
Call getHijo(RS("idPost"))
Wend
end function

Call getHijo(0)

De manera que voy haciendo consultas a la BD sobre los idPost que van
apareciendo.

Lo que me ocurre es que sí que lo hace bien, pero únicamente llega a un
nivel, es decir:

PREGUNTA 1
RESPUESTA 1
RESPUESTA 1_1
RESPUESTA 1_1_1
RESPUESTA 1_2
RESPUESTA 2

Con esta función únicamente muestra:
PREGUNTA 1
RESPUESTA 1
RESPUESTA 1_1
RESPUESTA 1_1_1

Por lo que he podido mirar lo que está ocurriendo es que el Recordset que se
crea en la función al entrar en bucle y tener la función recursiva, está
cogiendo los últimos valores, es decir, RESPUESTA 1_1_1. No sé si me
explico.

Más gráficamente:

While (Not RS.EOF)
Response.Write(RS("idPost") & "|" & RS("idPadre") & "|" & RS("titulo") &
"<br>")
Call getHijo(RS("idPost"))
-> Al llegar aqui, y haber pasado por todas las subopciones, el RS
"primario" ya no mantiene los valores del primer SQL ejecutado. Es decir, es
como si cada vez que ejecuto la sql al entrar a la función el RS se reinicia
(como si fuese pasado ByRef).
Wend

Alguien sabe como solucionar este problema?

Gracias de antemano.

Un saludo



Preguntas similares