Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-11-2008
NPIdea NPIdea is offline
Miembro
 
Registrado: feb 2005
Posts: 121
Poder: 20
NPIdea Va por buen camino
Sp para tabla recursiva.

Hola a todos.

He estado buscando en el foro y en la web la solución, pero no hay froma de solucionarlo.

Tengo una tabla con dos campos Principal, Secundario

Entonces puedo meter datos jerarquicos en los dos formando un arbol.
Código Delphi [-]
Principal  Secundario
1                 5
1                 3
2                 4
5                10

entonces lo que me gustaría es que elijiendo el registro Principal=1 me devolviese
3 filas, los dos primeros de principal=1 y anidar el Secundario=5 para devolverme la tercera fila como Principal=5 y Secundario =10.


El resultado sería
Código Delphi [-]
Principal    Secundario
1                5
1                3
5              10


He buscado sobre temas de recursividad pero me sale todo para Oracle y MSServer y no sé como trabnsformarlo a Interbase.


Muchas gracias.
Responder Con Cita
  #2  
Antiguo 21-11-2008
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Hola NPIdea,

No entiendo tu pregunta.

Para mostrar 3 registros de una base de datos:
Código SQL [-]
SELECT TOP 3
    PRINCIPAL
    ,SECUNDARIO
  FROM Tabla
  WHERE PRINCIPAL = 1
En tu caso solo mostrar 2 por que no cumple con WHERE,

Un saludo
Responder Con Cita
  #3  
Antiguo 21-11-2008
NPIdea NPIdea is offline
Miembro
 
Registrado: feb 2005
Posts: 121
Poder: 20
NPIdea Va por buen camino
Bueno, por fin tras horas de estudio por la web y el IBExpert

La solucián era:

Código Delphi [-]
CREATE PROCEDURE NEW_PROCEDURE (
    acometedor integer)
returns (
    id integer,
    acometido integer)
as
begin
    FOR SELECT id,acometido
     FROM MIA
     WHERE id = :acometedor
     INTO :id,:acometido
 DO BEGIN

     if (acometido is not null)
        then begin
               SUSPEND;
           for select id, acometido
               from NEW_PROCEDURE(:acometido)
           into :id,:acometido
           do begin
           if (acometido is not null)
              then SUSPEND;
           end
         end
    END
end^

De esta forma va buscando recursivamente y busca en los dos campos el orden jerarquico.

Gracias.

Perdón, sustituir id por PRINCIPAL y acometido por SECUNDARIO.
Responder Con Cita
  #4  
Antiguo 26-11-2008
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
Resp

Esto hace lo que quieres.
Código SQL [-]
Select "Principal", 
       "Secundario"
From "Tb" Where "Principal" = 1 Or "Principal" in (Select
       "Secundario"
      From "Tb" Where "Principal" = 1)

te digo si quieres formar un arbol el campo secundario deberia ser nulo cuando es un nodo raiz. De esta manera las consultas seria mas facil.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.

Última edición por rastafarey fecha: 26-11-2008 a las 13:18:44.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Función recursiva en un TreeView [Gunman] OOP 11 07-06-2010 03:53:51
busqueda binaria recursiva alba13 OOP 3 20-04-2009 01:36:14
Busqueda recursiva en disco desde java gulder JAVA 0 10-11-2006 19:02:37
Funcion Recursiva Aztaroth Varios 5 09-09-2004 18:37:19
Busqueda recursiva Descendents Varios 2 06-02-2004 17:40:19


La franja horaria es GMT +2. Ahora son las 01:03:48.


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
Copyright 1996-2007 Club Delphi