Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-09-2003
JROMAN JROMAN is offline
Miembro
 
Registrado: sep 2003
Posts: 11
Poder: 0
JROMAN Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 17-09-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 21
andres1569 Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 18-09-2003
jacanche jacanche is offline
Miembro
 
Registrado: may 2003
Ubicación: Campeche,Campeche,Mexico
Posts: 137
Poder: 21
jacanche Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 18:31:16.


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
Copyright 1996-2007 Club Delphi