PDA

Ver la Versión Completa : refresco de tabla


aladelta
25-01-2007, 00:38:04
Hola amigos:

Despues de dias de resfriado y de trabajo fuera de casa, vuelvo a la programación y con una duda...

Investigando mas sobre firebird 2.0 y usando los componente mercury, dispongo un dataset con lo siguiente:
select * from pago
order by fecha

Y en la sql del refresh esto otro
SELECT
CODIGO,
FECHA,
NOMBRE
FROM pago
WHERE
CODIGO = :CODIGO
ORDER BY FECHA

Ademas pongo un dbgrid, y comienzo a editar en el grid...y veo con horror que las modificaciones que hago en los campos fecha, no se ordenan...He hecho un refresh y tampoco se ordena, solo cerrar y abrir el dataset de nuevo, y esto me parece mal.

A alguien le ha pasado esto, o es que estoy haciendo algo mal....

Gracias por leer....

aladelta
26-01-2007, 00:53:32
Hola de nuevo:

Estoy haciendo pruebas y no consigo saber porque al escribir en un campo el cual esta en el "order by" del dataset no ordena ese registro...

Si alguien sabe porque, por favor que me heche una manilla...

Gracias...

Dracon
26-01-2007, 02:34:05
Hola. Q tal...

Necesitas ser un poco mas especifica en lo que quieres porque lo dejas muy al aire, dedicale un poco mas de tiempo y seguramente podremos ofrecerte una mejor ayuda...

Saludos!

Zeta
26-01-2007, 05:32:35
Es un problema de configuración de los componentes, mirate este PDF que tiene la solución:

http://www.clubdevelopers.com/delphi/articulos/sgbd/startfastfb/downloads/startfastfb.pdf

Igualmente si hacés una búsqueda por el foro vas a encontrar más.

Saludos

aladelta
26-01-2007, 17:33:32
Hola amigos...

Tengo el documento pdf que he releido pero no saco en claro nada para poder solucionar esto....Y tambien he buscado por el foro y por internet pero no encuentro nada, parece ser, o bien que no le pasa a nadie, o que nadie se ha dado cuenta...

Mi interes, es que teniendo un dbgrid editable, introducir un dato en un campo, y que ese campo sea en puesto en la clausula "order by", por ejemplo fecha, y al pulsar intro para hacer el post desde el dbgrid de esa fecha, el registro se ordene automaticamente en el mismo dbgrid, de forma que la vista quede ordenada por fecha...

Esto se hace automaticamente desde paradox, con componentes ttable, ya que al elegir el indice de ordenacion, cada vez que modificas el valor de un campo, la ordenacion de la vista se hace automaticamente...

No se si me explico, pero a veces pasa que por el interes de buscar una posible solucion se pierde el norte para poder ser mas claro....al contrario que cuando lees post de otros amigos con problemas que los entiendes y eres mas desarrollador para poder explicar una posible idea a ese problema...

Gracias...

aladelta
26-01-2007, 17:41:33
Hola de nuevo:

Aunque mirando, mirando, tengo la apreciacion que la clausula "order by ...", no actua como un indice de un ttable de paradox, a la hora de ordenar una vista en la que se ha modificado el valor de dicho campo "indice" que es el del "order by"...

En la base de datos, tengo un indice por el mismo campo que he puesto en la clausula "order by...", y para buscar con locate, pues muy rapido, pero una vez hecha la vista en el dbgrid, o cierro y abro el dataset o no se ordena por mucho que modifique valores en el dbgrid...

Gracias...

Lepe
26-01-2007, 19:55:17
En las ayudas de Interbase 6 de ibphoenix.com mira el apartado relacionado con las transacciones, commit, commitretaining, etc.

Incluso después del post, puedes cerrar y abrir de nuevo para que se vea los datos.

Saludos

aladelta
26-01-2007, 23:08:01
Hola amigos:

Pero imaginaos que no trabajo en multiusuario, solo en un ordenador y ademas no tiene red...

si estoy en un dbgrid e introduzco un valor en un campo y cierro el dataset y lo vuelvo a abrir, puede ser un suplicio poder introducir datos de esta manera.
Porque lo que yo pregunto no es el tema de refresco de datos desde la bd sino cuando una tabla esta ordenada por un campo, cuando modifico en el dbgrid el valor de ese campo, el registro se deberia reposicionar en su orden de nuevo sin tener que abrir y cerrar.
Ejemplo, tenemos una tabla con los campos:

fecha importe
----- -------
01/02/2006 1.000
05/03/2006 2.000
20/05/2006 3.000
si para obtener estos datos, utilizamos un sql como este:
select * from tabla
order by fecha
y ahora en un dbgrid, modificamos el valor fecha del segundo registro, y ponemos 01/01/2006, deberia el registro ponerse el primero de la tabla...pues no, que se sigue quedando el segundo...y eso me destroza todo el invento, ya que con paradox y los ttable no me pasaba...

Saludos...

aladelta
29-01-2007, 22:56:49
Hola de nuevo:

Pues que no hay manera, y no me gusta la idea de tener que cerrar y abrir un dataset cada vez que modifico el valor de un campo por el que se hace el "order by"...

Porras....

Y gracias...

Lepe
30-01-2007, 10:31:32
Ahh, ¿pero tú usas el grid para introducir datos? Para mí el suplicio es el propio DBGrid :D.

Yo pongo una serie de cajitas al lado del grid, autocompletado de datos, enter por tab y un boton Check en el Toolbar, de forma que si está presionado, al llegar al último Edit, hace un post, un insert y pone el foco en el primer Edit, (el usuario lo agradece).

Usa readcommited en la transacción para el tema de refresco. Aunque te sigo recomendando la lectura anterior.

Además, ¿quien ha dicho que la forma de trabajar tenga que ser la misma que en paradox? ;), si cambias de motor, debes cambiar de forma de pensar ;).

Saludos

RONPABLO
30-01-2007, 16:11:08
Recuerda la lectura... pon especial atencion en los commit, que como tal es el problema que tienes en el momento...
y de pronto para mas adelante (http://www.clubdelphi.com/foros/showthread.php?t=15836) shao y suerte

aladelta
30-01-2007, 20:45:39
Hola de nuevo:

Pos lo tengo claro, manque me cueste, pues tendre que cambiar, amigos, intentaba tener la misma forma de trabajar, pero veo que no puede ser...

Cada vez que se modifique el valor de un campo por el cual se realiza la ordenacion, pues hare un commit y abrire el dataset despues...

Porque, Lepe, en tu lectura veo la forma de insertar nuevos registros, pero cuando modificas el valor de una cajita y ese campo es por el que esta ordenada la vista del grid, por ejemplo, 1,2,3 y cambias el valor del segundo campo por un 4, la vista deberia tener 1,3,4 pero a mi me pone 1,4,3, y solo hago el post, ya que si hago el commit pues volvemos a empezar y si hago commitretaining no hace nada, y despues pongo un refresh y tampoco...

Bueno, gracias por todo y a seguir, que volvere....