FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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. |
#2
|
|||
|
|||
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
__________________
Guía de Estilo |
#3
|
|||
|
|||
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 |
|
|
|