Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Recorriendo un arbol de jerarquias Interbase (https://www.clubdelphi.com/foros/showthread.php?t=41464)

Naxoman 15-03-2007 22:40:29

Recorriendo un arbol de jerarquias Interbase
 
A ver... Tengo un pequeño problema. Tengo una tabla Temas con 3 campos, CodTema NomTema y Contenedor, siento Contenedor el TemaPadre de dixo tema.
Como puedo, tan solo usando sql, recorrer la tabla para que me muestre de un tema todos sus temas padres de manera recursiva???

Exadme un cablecillo anda...;)

Lepe 16-03-2007 12:58:53

Antes de nada Bienvenido a ClubDelphi.

Podrías implementarlo con dos Querys en relación Maestra-Detalle:
QryMaestra:
Código SQL [-]
select CodTema, NomTema, Contenedor from temas 
order by contenedor

QryDetalle:
Código SQL [-]
  select Contenedor
  from temas
  Where Contenedor = :Contenedor
  order by contenedor

QryDetalle.MasterSource := QryMaestra;

Esa última línea es fundamental, le estas diciendo que los datos de QryDetalle dependen de los resultados de QryMaestra.

QryDetalle tiene un parámetro "Contenedor" que tiene el mismo nombre que en QryMaestra, así hará la relación Maestra-detalle.

Hasta donde veo, siempre necesitarás dos consultas, una para seleccionar el tema y otra para ver los contenedores de ese tema. Puedes usar Store Procedures, por ejemplo.

Saludos

ArdiIIa 16-03-2007 13:23:33

Perdón por la intrusión.
Lepe: En el primer Query también saldrían los registros "detalle" ????

Yo tengo un ejemplo de tabla recursiva y lo arreglo haciendo un solo query, pero luego recorriendo la tabla y asígnando "maestro / detalle" que es en realidad donde creo que está la cuestión, en la representación de lo datos de una misma tabla.

El Query:
Código SQL [-]
select * from EMP_CONTACTOS_CARPETAS
ORDER BY CODIGO

El desarrollo de ese query está aquí... donde introduzco los datos en un Treeview

Lepe 16-03-2007 13:34:39

Intromisión niguna hombre, todo lo que se pueda aportar, mejor que mejor.

Ya ni me meto, verás que he editado mi mensaje (no concuerda con tus citas), así que mejor no reviso nada :D.

Saludos y gracias por tu aporte.

ArdiIIa 16-03-2007 13:57:30

Cita:

Empezado por Lepe
Ya ni me meto, verás que he editado mi mensaje (no concuerda con tus citas), así que mejor no reviso nada :D.
Saludos y gracias por tu aporte.

Yo también he editado, porque realmente esa cita se correspondía a otro mensaje del hijo que he enlazado anteriormente...:D

Al o que iba... que en tu propuesta de los dos querys, el fallo que yo veo es que en el primer query se muestran todos los registros, es decir "maestro / detalle"..
Tal vez añadiendo una clausula semejante a:
Código SQL [-]
 Where Contenedor = is null
de este modo descartaríamos a los registros que tienen alguna dependencia. Sin embargo, también susceptible de ser erróneo porque el regístro podría depender de otro y a su vez tener otras dependencias.... por eso mi planteamiento es que para operar sobre una tabla recursiva, es recorrerla de principio a fin e ir asignando los diferentes nodos...


La franja horaria es GMT +2. Ahora son las 22:08:28.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi