PDA

Ver la Versión Completa : Problemas con un acumulador?


danytorres
18-09-2003, 21:28:03
Hola a todos los del foro. Tengo un query que me da un total ese total lo quiero ir acumulando en una variable previamente declarada el codigo es el siguente:


code:
__________________________________
AcumPeso :=Datamodule2.TotalesTrakingSalidaTotalPeso.Value;

TotalPeso:=TotalPeso +AcumPeso;

Carga.CurrencyEdit6.Value:= TotalPeso ;
_____________________________________

Pero no me acumula nada se que es algo muy sencillo pero no me da. agradesco quien pueda ayudarme.

_________________________
Un saludo a todos....

Viet
18-09-2003, 22:30:32
Hola

La solucion la puedes plantear de dos formas:

- En una consulta a la DB, por medio de Sql (lo que me parece optimo, ya que el trabajo de calculo se lo dejas al motor de la base de datos)

- O bien por codigo como planteaste vos.... pero hay que ver cuando incrementas el valor acumulado osea si es cuando el usuario hace algo o si debes recorrer los registros de tu consulta para eso, seria algo como:


QueryX.open;
While not QueryX.eof do
begin
aux := QueryX.fieldbyName('resultado').asfloat;
QueryX.next;
end;


y listo !


Suerte ;)

danytorres
18-09-2003, 22:42:03
Gracias por responder Viet. El detalle esta en que no es una sola consulta son varia veces que tengo que ejecutarla y por cada una debo ir guardando el valor (acumularlo) como hago.

guillotmarc
18-09-2003, 23:05:47
Hola

¿ Puede ser que alguna vez la consulta devuelva Null ?. Recuerda que un valor + Null es igual a Null.Para asegurarte, mejor coge el valor de esta forma :


AcumPeso :=Datamodule2.TotalesTrakingSalidaTotalPeso.AsFloat;

TotalPeso:=TotalPeso +AcumPeso;

Carga.CurrencyEdit6.Value:= TotalPeso ;


De esta forma te aseguras de que en caso de valer Null, como mínimo sumas un 0.

Saludos.

danytorres
21-09-2003, 05:10:42
Gracias por responmder guillotmarc, pero el codigo que me diste no me funciona:


code:----------------------------------------------------------------------------

AcumPeso :=Datamodule2.TotalesTrakingSalidaTotalPeso.AsFloat;

TotalPeso:=TotalPeso +AcumPeso;

Carga.CurrencyEdit6.Value:= TotalPeso ;
--------------------------------------------------------------------------------


el procedimiento almacenado siempre me trae un valor no se da el caso el me de un valor nulo( en micaso), el detalle esta que no me realiza la acumulacion siempre me actualiza al ultimo valor que me da el procedimiento mas no me lo suma como hago agradeceria que me ayudaran.


_________________________________
un saludo a todos...

__cadetill
21-09-2003, 10:50:38
que te de siempre el último valor es raro. No estarás inicializando la variable TotalPeso en algún lado??

danytorres
21-09-2003, 17:02:31
Gracias por responder cadetill, solamente declaro la variable al principio del procedimiento no entiendo porque me toma siempre el ultimo valor del procedimiento mas no me lo acumula?

andres1569
21-09-2003, 23:20:12
Hola:

En estos casos sería muy conveniente que pusieras todo el código que usas (ponlo entre las marcas code y /code para que sea lea mejor).

Hay algo qe no entiendo en el código que has puesto, y es por qué almacenas en AcumPeso el total que devuelve la consulta, y el acumulado en TotalPeso, me refiero a que el nombre de las variables no encaja ..., a ver si resulta que es eso y que estás inicializando la variable TotalPeso en algún sitio, que es la que usas para almacenar el acumulado.

Saludos

danytorres
22-09-2003, 03:41:43
Gracias por rsponder Andres, el codigo que utilizo es el siguiente:


code:
__________________________________

procedure TForm1.Button1Click(Sender: TObject);
Var
TotalPeso : Integer
begin


TotalPeso:=TotalPeso + Datamodule2.TotalesTrakingSalidaTotalPeso.Value;;

Carga.CurrencyEdit6.Value:= TotalPeso ;


End; // Fin del procedimiento..
_____________________________________

y no estoy inicializando la variable en otra parte de la aplicacion lo que no entiendo es porque no efectua la suma (el procedimiento nunca devuelve valores nulos), agradesco la ayuda.


_____________________________
Un saludo a todos...

andres1569
22-09-2003, 08:56:19
Hola:

Lo que ocurre es que la variable TotalPeso la declaras de forma local, dentro de ese procedimiento, y por lo tanto se crea y se destruye durante la ejecución del mismo, y no sirve para acumular cantidades que quiereas tener al volver a llamar a dicho procedimiento.

Para que funcione adecuadamente, debes declararla de forma global, o bien en una claúsula var fuera de cualquier procedimiento / función, o bien, si estás trabajando en un formulario / DataModule, dentro de la declaración del mismo:


Var
TotalPeso : Integer;

// llamar este procedure al empezar cualquier cálculo de acumulados
procedure TForm1.InicializaValores;
begin
TotalPeso := 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
TotalPeso:=TotalPeso + Datamodule2.TotalesTrakingSalidaTotalPeso.Value;;
Carga.CurrencyEdit6.Value:= TotalPeso ;
End; // Fin del procedimiento..

danytorres
22-09-2003, 16:40:39
Gracias por responder andres tienes toda la razon tengo que declarar la variable fuera del procedimiento. gracias..

________________________
Un saludo a todos...