Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Lio Con Los Campos Calculados. (https://www.clubdelphi.com/foros/showthread.php?t=3717)

JROMAN 17-09-2003 19:28:08

Lio Con Los Campos Calculados.
 
Hola a todos, estoy intentando poner en un grid una columna con un importe y a su lado el saldo.

importe saldo
1 1
5 6
-3 3

Bien, el importe lo saco de una base de datos y el saldo es un campo calculado que dice a si:

acumulado:=acumulado+importe;
campo saldo:=acumulado

y la variable acumulado se pone a 0 cuando se crea el form;

Todo funciona bien, el mundo es maravilloso, el saldo se muestra correctamente en el grid, pero...

Cuando se navega por el grid, los campos se siguen calculando, con lo que el saldo empieza a enseñar cantidades muy raras.

¿alguien sabe como poder arreglar esto?

Gracias.

andres1569 17-09-2003 23:01:07

Hola:

Creo que todos alguna vez hemos pensado en usar de esa forma los campos calculados para mostrar un acumulado. El problema es que esos cálculos se disparan en muy diversas circunstancias, aunque la primera vez que muestras el Grid, se calculan en orden secuencial, según el orden en que esté el Dataset, y todo funciona bien. Luego, una vez que navegas y editas, insertas ...etc, se calcula cada vez ese valor para el resgitro correspondiente, de modo que no te sirve para tus fines.

Casi te aconsejaría que guardases ese valor acumulado en la misma tabla física, pero esto presenta el inconveniente de que debes actualizarlo cada vez que se modifica un registro y/o sus precedentes. O bien, si no va a resultar demasiado lento, en el OnCalcFields del campo que ahora tienes definido como calculado, lanzar una consulta SQL que te devuelva el acumulado, o recorrer otra tabla que tengas abierta, algo así como un Dataset adyacente y que actualices junto al que usas en el DBGrid, y hacer tú mismo ese recorrido y el sumatorio.

Otra cosa ahora no se me ocurre, a ver si te sirve. Por cierto, este tema pertenece al Hilo de Conexíón con Bases de Datos

Saludos

jacanche 18-09-2003 02:02:36

Hola
Intenta poniendo la propiedad AutoCalcFields de tu dataset en False, eso evita que el evento oncalcsfield se dispare cuando cuambies el foco de un control a otro o de una columna de grid a otra cuando editas, pero de todas maneras como dice andres1569 es bastante complicado controlar el calculo de un acumulado de esa manera, te aconsejaria probar con alguna de las opciones que explica.


Saludos

Alfredo


La franja horaria es GMT +2. Ahora son las 05:44:36.

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