PDA

Ver la Versión Completa : orden en un listado


vetustas
14-12-2003, 20:05:20
Hola,
trabajo con Paradox y delphi 5. Tengo una tabla "alumno" cuyo indice es un código. Tengo también un dbgrid donde muestro la lista de alumnos. Lo que quiero es que el orden de los alumnos venga dado por el nombre y no por el codigo. Cómo hago eso? Es que claro, al insertar por ejemplo un nuevo alumno, me lo coloca en el ultimo lugar de la lista y yo quiero que quede colocado por orden alfabetico. Cómo puedo hacerlo?
Muchas gracias

marcoszorrilla
14-12-2003, 20:08:34
Lo primero tendrás que crear si aún no lo tienes un índice por apellidos y activarlo antes de mostrar la rejilla.

MiTabla.IndexName:='Apellidos';

Con esto al dar un alta se colocará en donde le corresponda por apellidos.

Un Saludo.

vetustas
14-12-2003, 20:12:12
se me olvido decir que la tabla alumno es una tabla detalle que depende de una tabla curso. En indexname tengo puesto "curso" para que me enseñe los alumnos de cada curso. Entonces...como lo hago? hay alguna forma? :confused:

marcoszorrilla
14-12-2003, 20:16:08
Pues mientras sea detalle no porque el índice activo obligatoriamente tiene que ser el que case con la tabla maestra que según dices es código.

Si sueltas la relación maestro detalle, entonces podrías ordenarla como quisieras en este caso podrías simular la relación maestro detalle por ejemplo mediante un filtro.

Un Saludo.

vetustas
14-12-2003, 20:19:57
se un poco más concreto porfa :) estoy muy perdida con lo que dices. Entendi eso de que no puede haber otro indice activo que no sea el que lo relacione con la tabla maestro pero entonces como lo hago sin perder esa relación maestro/detalle? cuanto más concreto seas mejor.
muchas graciassss

marcoszorrilla
14-12-2003, 20:27:39
Lo que quiero decir es que desactives la relación maestro-detalle y entonces simulas dicha relación mediante un filtro:

MiTablaAlumnos.Filter:='Codigo ='+ QuotedStr(MiTablaMaestraMiCampo.Value)
MiTablaAlumnos.Filtered:=True;

Un Saludo.

__cadetill
14-12-2003, 22:22:03
otra opción sería utilizar un Inner Join de SQL para hacer el listado y, en el Order By de la sentencia, poner la ordenación deseada

vetustas
14-12-2003, 22:49:18
Cadetill gracias por contestar. Y con eso que me propones tendria que quitar también la relacion maestro/detalle? Me puedes poner especificamente el código sql q tengo que usar?

Muchas gracias

__cadetill
14-12-2003, 22:57:21
veamos

necesitas un TQuery (o el componente de conexión que utilices)
luego, en su propiedad SQL pones algo así


select campo1, campo2,...,campoN
from tabla1 t1 inner join tabla2 t2 on (t2.relacion = t1.relacion)
where
t1.campoX = loQueSea and/or MasCondiciones

Lepe
16-12-2003, 11:44:59
con la venia de cadetill, me permito la osadia de añadir algo más


select campo1, campo2,...,campoN
from tabla1 t1 inner join tabla2 t2 on (t2.relacion = t1.relacion)
where
t1.campoX = loQueSea and/or MasCondiciones
ORDER BY t1.codigo, t1.campo1 Asc ,t2.campo2 Desc;


Asc = orden ascendente
Desc = orden descendente

Lógicamente si ordenas por un campo único (como el código) no hará caso al resto de ordenación ;)

Saluditos

__cadetill
16-12-2003, 15:25:19
Lepe comentó:
con la venia de cadetill, me permito la osadia de añadir algo más
Faltaría más!!! Muy bien añadido ;)