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

Preguntas similare

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



Respuesta Responder a este mensaje
#2 Onix
09/11/2006 - 07:56 | Informe spam
Buenas:

Esto no sería posible, da un error de variable redefinida, ya que al ser una
función recursiva pasa por el Dim más de una vez.

De todos modos, lo que haré será una consulta a la BD cada vez que se meta
en la función y listo.

La idea era poder crear un Recordset genérico e ir aplicando filtros, para
evitar tantos accesos a la base de datos, pero lo veo complicado, por no
decir imposible.

Un saludo,

Onix


"Matias Iacono" escribió en el
mensaje news:
O sea (supuestamente), con hacer un DIM RS dentro de tu funcion, se
arreglaría.
Respuesta Responder a este mensaje
#3 Matías Iacono
09/11/2006 - 10:40 | Informe spam
Extraño que te de ese error.

Ya que a pesar de que efectivamente, es la misma variable, en realidad es
otro "hilo" de funcion. La logica seria que por cada llamada, esta funcion
tiene sus propias variables, y puede crearlas a gusto.

Saludos.

Matías Iacono
Microsoft MVP
Orador Regional INETA
"Onix" escribió en el mensaje
news:%
Buenas:

Esto no sería posible, da un error de variable redefinida, ya que al ser
una función recursiva pasa por el Dim más de una vez.

De todos modos, lo que haré será una consulta a la BD cada vez que se meta
en la función y listo.

La idea era poder crear un Recordset genérico e ir aplicando filtros, para
evitar tantos accesos a la base de datos, pero lo veo complicado, por no
decir imposible.

Un saludo,

Onix


"Matias Iacono" escribió en el
mensaje news:
O sea (supuestamente), con hacer un DIM RS dentro de tu funcion, se
arreglaría.




email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida