Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Ordenar en un grid (https://www.clubdelphi.com/foros/showthread.php?t=4987)

vetustas 05-11-2003 00:41:17

Ordenar en un grid
 
Cómo hago para ordenar los datos en un grid segun un campo concreto? no uso consultas sql.

Ruben_Cu 05-11-2003 01:14:15

Hola vetustas, si no usas sql y usas ttable tienes que crear índices secundarios para los campos que quieras ordenar y entonces asociar estos índices en tiempo de ejecusión a la propiedad IndexFieldNames, por ejemplo:
Código:

TuTabla.IndexFieldNames:=nombre del índice declarado;
Se ordenará de acuerdo al campo asociado al índice.
Saludos y suerte

vetustas 05-11-2003 20:12:56

He estado leyendo sobre eso. Yo trabajo con bases de datos Paradox y al parecer lo que me dices solo funciona con bases de datos sql (interbase,etc.) y claro, no me funciona. Me desaparece la información del grid al hacer eso.

Ruben_Cu 06-11-2003 18:27:30

Hola vetustas, no se donde leistes pero lo que esta claro es que la ordenación de registros se logra de la manera que te comente, funciona con perfectamente TTable en paradox.
Leete la ayuda de delphi y fijate que tambien lo puedes hacer con la propiedad IndexName obteniendo el mismo resultado.
Saludos

fortran 19-11-2003 13:03:35

A mi con D5 y Paradox me ha funcionado perfectamente. Gracias Ruben_Cu.

Osorio 19-11-2003 14:44:41

Teniendo en cuenta que en las tablas paradox es muy frecuente encontrarse problemas de corrupcion cuando se trabaja con indices secundarios (sobre todo si tienes problemas de fluido electrico) lo mejor seria que realices una consulta para mostrar los datos en el DBGrid.


Al realizar la consulta la puedes traer ordenada por el campo que necesites.


Buena suerte...

SLAKE 19-11-2003 15:04:59

Si el table, query o ClientDataset es detalle, ¿funciona?

fortran 19-11-2003 16:56:37

Hola Osorio:

Gracias por la contestación (y sobre todo por la aclaración). La verdad es que el tema de las Query no lo domino. No obstante me surge una duda ¿Es recomendable hacer una query sobre toda una tabla?, en caso de hacerla ¿como se haría?, ¿me podrías dar un ejemplo sencillo?

Gracias por anticipado.

roman 19-11-2003 17:24:09

Cita:

fortran comentó:
No obstante me surge una duda ¿Es recomendable hacer una query sobre toda una tabla?, en caso de hacerla ¿como se haría?, ¿me podrías dar un ejemplo sencillo?

Ejemplo:

Código:

Query1.Sql.Text := 'select * from tabla';
Query1.Open;

Si la tabla es muy grande tardará bastante en reunir todos los datos.

Para el problema específico yo me quedaría con los índices. Personalmente he trabajado con Paradox y muchos índices secundarios sin haber tenido ningún problema significativo.

Paradox trabaja mucho mejor con componentes Table que con Query. En este caso la reordenación mediante un query requiere volver a consultar la base y eso se nota bastante al momento de dar el click en la columna. Mucho más rápido si sólo cambiamos de índices.

// Saludos

fortran 19-11-2003 17:30:00

Muchas gracias Román por tu pronta respuesta. Me has confirmado lo que solamente intuía. :).

En caso de esa corrupción de los índices de la que tanto oigo hablar ¿se pueden recuperar los contenidos de algún modo? ¿o se pierden irremisiblemente?.

Un saludo

roman 19-11-2003 17:55:14

Cita:

fortran comentó:
En caso de esa corrupción de los índices de la que tanto oigo hablar ¿se pueden recuperar los contenidos de algún modo? ¿o se pierden irremisiblemente?.

La pérdida de índices no es, en realidad nada grave ni dramático más allá de tener que suspender momentáneamente a los clientes para regenerar los índices. Para ello únicamente hay que borrar manualmente los archivos *.xg* y *.yg0 y volverlos a definir con el Database desktop o similar. Desde luego conviene tener, como mínimo, apuntados cuáles son estos índices ya que la mayoría de veces no podrás siquiera ver la estructura de la tabla cuando un índice se daña. Lo mejor sería crear unas rutinas en Delphi que se encarguen de crear los índices para que sea sólo cosa de oprimir un botón.

La pérdida de índices no implica la pérdida de datos. Los registros siguen ahí, sólo que no los puedes acceder con índices corruptos. En cuanto borras los archivos de índices puedes volver a abrir las tablas.

Y como te comenté anteriormente, es cierto que alguna vez he tenido que rgenerar los índices pero si ha sido un par de veces en cuatro años ya es mucho decir.

// Saludos

fortran 20-11-2003 09:46:12

Muchas gracias Roman, no sabes lo que me alivia que la solución a la corrupción de los índices sea tan sencilla. Lo de crear la rutina en Delphi para regenerar los índices creo que se me queda un poco grande para mi aunque me parece una idea muy interesante. Lo único que se me ha ocurrido es tener los ficheros *.xg* e *.yg0 respaldados con otro nombre y cuando se corrompan los índices borrar los originales y renombrar los respaldos ¿es correcto eso?. :( . Seguro que hay maneras mejores de hacerlo ¿verdad?.

Un saludo y gracias nuevamente.

roman 21-11-2003 17:03:35

Cita:

fortran comentó:
Lo de crear la rutina en Delphi para regenerar los índices creo que se me queda un poco grande para mi aunque me parece una idea muy interesante.

Cuando te lo propones no hay nada demasiado grande como para no hacerlo.

Cita:

fortran comentó:

Lo único que se me ha ocurrido es tener los ficheros *.xg* e *.yg0 respaldados con otro nombre y cuando se corrompan los índices borrar los originales y renombrar los respaldos ¿es correcto eso?. :( . Seguro que hay maneras mejores de hacerlo ¿verdad?.

Esto no te servirá ya que difícilmente los índices del respaldo estarán sincronizados con los registros actuales y lo más seguro es que obtengas un error "Index Out Of Time" (algo así).

Lo de la rutina para regenerar los índices no es nada complicada. Aquí te pongo un ejemplo:

Código:

Table1.AddIndex('', 'id', [ixPrimary], '');
Table1.AddIndex('ix_nombre', 'nombre', [ixCaseInsensitive], '');

La primera línea agrega el índice primario. Los índices primarios no tienen nombre y deben construirse antes que los demás.

La segunda línea agrega un índice secundario llamado 'ix_nombre' con la opcíon de se insensible a mayúsculas y minúsculas.

Realmente es muy sencillo. Consulta la ayuda de Delphi acerca de este método (AddIndex) para ver qué es lo que se pone en los parámetros.

// Saludos

roman 21-11-2003 17:17:40

¡Vaya! Pues casos de la vida real.

Recién expuse el comentario anterior me hablaron para informarme que había un problema con el sistema, ¿cuál crees?

"Index out of Date"

:D

Contrario a lo que recomiendo yo no tengo hecha la rutina para regenerar los índices.

:D

Pero no he perdido mi trabajo ni mucho menos. Me tomó diez minutos regenerarlos manualmente.

// Saludos

Osorio 23-11-2003 05:19:52

Comentario:


Yo sigo pensando que es mejor hacer la consulta desde el Query o el ClientDataset, sobre todo desde este ultimo ya que no requiere la conexion constante con la BD.

Asi, le exijo un poquito mas al el PC pero no me meto en lios con los indices corruptos. Sucede que a veces fallan justo cuando la empresa está trabajando en procesos criticos y estan de mucho afan (ley de morphy) ahhh y ademas ese dia no te encuentras en la ciudad (jejeje otra ley mas de morphy).


saludos

fortran 27-11-2003 10:03:05

Está claro que tengo que optar por la solución de Osorio o por hacer la rutina, ya que el programa que estoy haciendo se va a utilizar a unos 980 Km de mi casa por lo que la segunda ley de Murphy que anunció Osorio se va a cumplir casi siempre.
Cita:

Román comentó:
Recién expuse el comentario anterior me hablaron para informarme que había un problema con el sistema, ¿cuál crees?
jajaja, ya sabes Román, lo mejor es no hablar (o como decimos por aquí... no escupir "parriba", que siempre termina cayendo).

:D


La franja horaria es GMT +2. Ahora son las 11:12:30.

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