Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   Ordenar tabla de paradox sin indice o_O?? (https://www.clubdelphi.com/foros/showthread.php?t=45892)

Forest 17-07-2007 20:48:43

Ordenar tabla de paradox sin indice o_O??
 
Bueno, sucede que necesito imprimir un reporte que tenga información de dos tablas distintas, es un estado de cuenta que jala registros tanto de abonos, como de salidas monetarias.
Lo que hice fue crear una tabla temporal en la que se insertan los datos de ambas tablas antes de mandar el preview al QuickReport donde será impreso el reporte.

Hasta este punto está todo bien, ya que el QuickReport si me muestra la información que requiero, el problema es que no está ordenada, y necesito ordenarla por fecha. Ni siquiera intenté hacer el campo 'fecha' como indice principal porque es obvio que me mandará un key violation, entonces lo utilicé como indice secundario, pero me manda el error 'index out of date'.

No se me ocurre como solucionar esto x_x.

Actualmente lo que me muestra es primero los registros de la tabla Abonos y después los de la tabla Salidas.

Si no me expliqué digánmelo, pero necesito que me ayuden U.U

Byes!

roman 17-07-2007 21:02:54

El error viene- me parece -porque paradox se confunde si pones un índice secundario si poner uno primario. Puedes usar un campo auto incremental para que haga de llave primaria. Pero a mi me da porque te ahorrarías problemas si usaras un consulta SQL en lugar de una tabla temporal. Aunque no conozco la estructura de tus tablas, por lo que mencionas, podría ser algo como:

Código SQL [-]
select fecha, otros campos from abonos

union all

select fecha, otros campos from salidas

order by fecha

Habría que pobar, pero creo que e este caso el order by se aplica sobre toda la unión, de manera que obtendrías los datos ordenados como quieres.

// Saludos

marcoszorrilla 17-07-2007 21:35:53

Tiene razón Román, al no tener un índice primario el índice secundario no puede ser mantenido por lo tanto no se actualiza.

Sino quieres cambiar nada lo que dice Román funcionara, o bien pones un Auotinc como Clave única o intentas la consulta de Union que yo he utilizado algunas veces y funciona perfectamente.

Un Saludo.

Forest 18-07-2007 18:24:08

Gracias por las respuestas, hice lo de poner el campo autoincremental como llave primaria pero ne me sirvió :S, me sigue mandando el index out of date.

Ahora mi problema es que nunca he utilizado SQL en Delphi y no tengo idea de como, es decir, he utilizado consultas SQL en visual foxpro, y la verdad ya no recuerdo bien... bueno en sí lo que necesitaría es que me explicaran como hago para que el Delphi me ejecute el código SQL, y como hacer para mostrar el resultado en el reporte, ya que actualmente el reporte lo relaciono con la tabla temporal y no se como se relacionaría con el resultado de la query.

Espero haberme explicado, y espero sus respuestas.
Byes!

roman 18-07-2007 19:31:39

Usa una componente TQuery. En su propiedad SQL pones la consulta que te indiqué, y al igual que con el Table, activas la consulta con Query.Active := true o Query.Open. El QuickReport lo enlazas directamente al Query con su propiedad DataSet.

// Saludos

Forest 19-07-2007 18:50:58

Bueno, la verdad no supe como utilizar el query xD, soy bastante novato en esto. Pero ya conseguí lo que buscaba por medio de unas cuantas condiciones y unos ciclos while.

Ahora tengo otra duda... ahora que mi tabla tiene un autoincremental como llave primaria, ¿cuando llegue al límite de valores que puede tener (un long int según leí), me va a mandar el error key violation al querer insertar registros en la tabla?
Como es una tabla temporal la solución sería simple, ya que con pegarle encima una copia en blanco de la tabla o abriendola con el Database Desktop podría reiniciar el counter... el problema es que yo pienso dejarle el sistema al cliente y no creo volverlo a ver xD, así que me gustaría dejarle el sistema funcionando de tal manera que no requieran de mi ayuda en el futuro (al menos en ese aspecto), entonces quería saber si existe algún código para poder reiniciar el counter de la tabla al abrir el sistema o algo parecido, es decir, que el cliente no se de cuenta de que se está haciendo este trabajo, y que todo funciona bien magicamente xD.

Espero sus respuestas, byes!


La franja horaria es GMT +2. Ahora son las 21:37:32.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi