Delphi - Problema con ordenacion

   
Vista:

Problema con ordenacion

Publicado por beto (7 intervenciones) el 15/12/2009 21:04:21
Saludos
Necesito representar la informacion de una tabla en un TTreeView

Tabla
Id IdPadre Descripcion
1 0 Acceso al sistema
2 0 Modulo Ventas
3 0 Modulo Compras
4 1 Fecha
5 3 Orden de Compra
6 3 Costear Productos
7 3 Provedores
8 2 Facturacion
9 2 Listas de Precios
10 8 Lista General
11 8 Lista Especial
etc...

TTreeView
Acceco al sistema
---Fecha
Modulo Ventas
---Facturacion
---Listas de Precios
------Lista Especial
------Lista
Modulo Compras
---Orden de Compra
---Costear Productos
---Provedores

No tengo problemas para editar el TTreeView mi problema es que no logro ordenar los datos para ingresarlos al TTreeView
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema con ordenacion

Publicado por E.T. (1108 intervenciones) el 16/12/2009 01:49:30
Jugando un poco con sql, he logrado ordenar la lista, solo que lo hice con access, no se en que base de datos estes usando tu programa, pero es cuestion de modificar solo algunas cosas, te dejo la consulta que hice para ver que puedes hacer

esto solo funciona con tres niveles, con cuatro ya no lo hace bien

select tt.id, tt.idpadre, tt.descripcion,iif(tt.idpadre<>0,
iif(t.idpadre<>0, cstr(t.idpadre)+cstr(t.id)+cstr(tt.idpadre), cstr(t.id)+cstr(tt.id)+cstr(tt.idpadre)),
(cstr(tt.id)+cstr(tt.idpadre)))
as campo from tabla t
right outer join tabla tt on tt.idpadre=t.id
order by iif(tt.idpadre<>0,
iif(t.idpadre<>0, cstr(t.idpadre)+cstr(t.id)+cstr(tt.idpadre), cstr(t.id)+cstr(tt.id)+cstr(tt.idpadre)),
(cstr(tt.id)+cstr(tt.idpadre))) , tt.id

la función cstr, es como el cast de mysql, si usas algo como mysql, solo cambialo por el cast, por lo demás creo que es lo mismo, para que veas su funcionamiento crea una base de datos en access con los datos que pones en tu nota y prueba, pero como te habia dicho, ESTO SOLO FUNCIONA CON 3 NIVELES, agregando más IF en la consulta tal vez se pueda arreglar, pero te dejo eso como comienzo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con ordenacion

Publicado por beto (7 intervenciones) el 17/12/2009 16:12:29
ok gracias voy a probarlo y te comento
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con ordenacion

Publicado por beto (7 intervenciones) el 17/12/2009 21:31:35
Excelente E.T. me funciona bien aunque llego a tener hasta 10 niveles solo jugare con los if como indicaste , por cierto estoy usando mysql 5 por lo que tuve que cambiar un poquito la consulta:

select
tt.id,
tt.idpadre,
tt.descr,
if(tt.idpadre<>0,
if(t.idpadre<>0,
concat(Cast(t.idpadre as char),cast(t.id as char),cast(tt.idpadre as char)),
concat(cast(t.id as char),cast(tt.id as char),cast(tt.idpadre as char))),
concat(cast(tt.id as char),cast(tt.idpadre as char)))
as campo
from tabla t
right outer join tabla tt on tt.idpadre=t.id
order by
if(tt.idpadre<>0,
if(t.idpadre<>0,
concat(cast(t.idpadre as char),cast(t.id as char),cast(tt.idpadre as char)),
concat(cast(t.id as char),cast(tt.id as char),cast(tt.idpadre as char))),
concat(cast(tt.id as char), cast(tt.idpadre as char)))
, tt.id
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con ordenacion

Publicado por Antonio Ewok (2 intervenciones) el 17/12/2009 20:13:11
Que tipo de datos usas para los campos ID y IDPadre, si son integer basta que los ordenes por el Id entonces haces un recorrido a la tabla y lo insertas en treeview. si son strings entonces tienes que insertar el ID como 001, 002, 003, 004, etc. para ordenarlos de forma correcta o en un caso formatear el ID previo a su ordenamiento.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar