![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#7
|
|||
|
|||
|
Aqui tengo una nueva opcion, pero tienes que seguir algunas instrucciones:
1. Que los niveles no superen a los 15. Porque en el procedimiento GET_ARBOLRUBROS se agrega dos espacios en blanco por c/nivel. 2. Que la estructura este en el orden adecuado para que pueda funcionar. 3. En el IBDataSet llamar al procedimiento GET_ARBOLRUBROS asi: SELECT NOMBRE FROM GET_ARBOLRUBROS(0). /*Este procedimiento devuelve el Nª de nivel del registro.*/ CREATE PROCEDURE GET_NIVEL(ID INTEGER) RETURNS(NIVEL INTEGER) AS DECLARE VARIABLE OID INTEGER; DECLARE VARIABLE PADRE INTEGER; BEGIN NIVEL:=0; OID:=:ID; WHILE (:OID > 0) DO BEGIN SELECT ID_PADRE FROM RUBROS WHERE ID=:OID INTO :PADRE; OID:=:PADRE; NIVEL:=:NIVEL+1; END SUSPEND; END /*Ten en cuenta el tamaño de tu campo NOMBRE*/ CREATE PROCEDURE GET_ARBOLRUBROS(ID_PADRE INTEGER) RETURNS(NOMBRE VARCHAR(80)) AS DECLARE VARIABLE ID INTEGER; DECLARE VARIABLE NOMB VARCHAR(50); DECLARE VARIABLE NIVEL INTEGER; BEGIN FOR SELECT ID, NOMBRE FROM RUBROS WHERE ID_PADRE=:ID_PADRE ORDER BY ID INTO :ID, :NOMB DO BEGIN NOMBRE:=''; EXECUTE PROCEDURE GET_NIVEL(:ID) RETURNING_VALUES(:NIVEL); WHILE (:NIVEL > 1) DO BEGIN NOMBRE:='__' || :NOMBRE; /*'__'=espacios en blanco*/ NIVEL:=:NIVEL - 1; END NOMBRE:=:NOMBRE || :NOMB; SUSPEND; /*AQUI SE USA LA RECURSIVIDAD PARA OBTENER LOS HIJOS.*/ NOMBRE:=''; FOR SELECT NOMBRE FROM GET_ARBOLRUBROS(:ID) INTO :NOMBRE DO BEGIN SUSPEND; END END END Ojala te sirva, saludos. Última edición por JulioGO fecha: 27-08-2004 a las 00:43:25. |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|