Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   hacer un SUM de una consulta ya hecha (https://www.clubdelphi.com/foros/showthread.php?t=56651)

egarc 23-05-2008 00:13:52

hacer un SUM de una consulta ya hecha
 
Buenas amigos, les platearé mi problema: Tengo una consulta en un MSQuery que me devuelve 5,000 registros mas o menos, dentro de esa consulta hay un campo que se llama MONTO, lo que quiero es mostrar en un edit la suma de todos estos campos.
Lo se hacer en QuickReport con el QRExpresion, y en la propiedad expresion le pongo SUM(msquery1.monto).

Pero en este caso quiero mostrar la suma en un edit de un formaulario.

Gracias anticipadas!!

Casimiro Notevi 23-05-2008 05:50:59

Si lo he entendido, quieres algo así como esto:
Código:

Select campo1, campo2, monto, sum(monto) as Total from .....
Luego asocias el campo Total al dbedit que quieras.

enecumene 23-05-2008 13:05:19

A ver, intenta lo siguiente:

Código Delphi [-]
Var
Suma: Double;
Campo:  TField; 
Begin
     Suma:=0;
     Try
        With query1 Do Begin
             DisableControls;
             ElCampo := fieldbyname('Field');
             First;
             While Not EoF Do Begin
                   Suma := Suma + Campo.AsFloat;
                   Next;
             End;
        End;
     Finally
        query1.EnableControls;
     End;
     Edit1.Text := Floattostr(Suma);
End;

Saludos.

egarc 26-05-2008 13:55:09

Gracias por sus respuestas.
De la manera que tengo el codigo ahora es haciendo un ciclo desde el principio del Query hasta el final y acumulando en una variable el valor del campo monto. Necesito saber si hay alguna forma que no sea tan lenta, ya que un ciclo que va desde 1 hasta 50,000 es un poco lento.

Gracias...:(

Casimiro Notevi 26-05-2008 19:21:17

¿Y no te sirve ninguna de las respuestas?

Aclara un poco más lo que haces, adjunta tu código, etc.

egarc 26-05-2008 22:24:38

Ok, Trabajo con SQL 2005 y Delphi 2007

Hago la siguiente consulta

Código SQL [-]
Select CodigoCliente, Numero, Fecha, Monto 
from FACTURAS
 
where fecha between :Fecha1 and :Fecha2

Luego paso los parámetros, etc.etc.

La consulta me devuelve mas o menos 5,000 registros, y ejecuto el siguiente codigo para sacar el total de la suma del campo MONTO

Código Delphi [-]
Var Total:real;
Begin     total:=0;     
Try        With query1 Do 
Begin             
First;             
While Not EoF Do Begin                 
  Total := Total+ Query1.fielbyName('Monto').AsFloat;                   
Next;             
End;        
End;     Finally    
End;     
Edit1.Text := Floattostr(Total);
End;

Entonces, en el calculo que deseo poner en el edit1 me tarda mucho tiempo, ya que mientras mas registros tenga la consulta, mas tiempo tardará en dar el resultado.

Gracias anticipadas

Casimiro Notevi 26-05-2008 23:15:47

¿Pero por qué no haces la suma en el select?

Código:

Select CodigoCliente, Numero, Fecha, Monto, sum(Monto) as Total
from FACTURAS
where fecha between :Fecha1 and :Fecha2


egostar 26-05-2008 23:25:23

Cita:

Empezado por Casimiro Notevi (Mensaje 289232)
¿Pero por qué no haces la suma en el select?

Código:

Select CodigoCliente, Numero, Fecha, Monto, sum(Monto) as Total
from FACTURAS
where fecha between :Fecha1 and :Fecha2


Pero eso te va a dar un error amigo Casimiro, requieres el Group by, yo creo que lo mas facil es hacer un campo calculado y mostrarlo cuando y donde lo requieras.

Salud OS

Edito

Suponiendo que el campo Calculado sea Total

En el evento OnCalcFields se hace esto

Código Delphi [-]
    Query1TOTAL.Value := Query1TOTAL.Value + Query1Monto.Value;

Casimiro Notevi 27-05-2008 08:39:16

je, je... ¿en qué estaría pensando yo?, por supuesto que lo que he puesto no sirve :o

Casimiro Notevi 27-05-2008 09:10:43

También puedes lanzar la consulta de suma por separado con los mismos parámetros de fecha, será muy rápido.


La franja horaria es GMT +2. Ahora son las 13:54:15.

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