Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-05-2008
egarc egarc is offline
Miembro
 
Registrado: jul 2006
Posts: 60
Poder: 18
egarc Va por buen camino
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!!
Responder Con Cita
  #2  
Antiguo 23-05-2008
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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.
Responder Con Cita
  #3  
Antiguo 23-05-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
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.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #4  
Antiguo 26-05-2008
egarc egarc is offline
Miembro
 
Registrado: jul 2006
Posts: 60
Poder: 18
egarc Va por buen camino
Unhappy

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...
Responder Con Cita
  #5  
Antiguo 26-05-2008
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Y no te sirve ninguna de las respuestas?

Aclara un poco más lo que haces, adjunta tu código, etc.
Responder Con Cita
  #6  
Antiguo 26-05-2008
egarc egarc is offline
Miembro
 
Registrado: jul 2006
Posts: 60
Poder: 18
egarc Va por buen camino
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
Responder Con Cita
  #7  
Antiguo 26-05-2008
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿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
Responder Con Cita
  #8  
Antiguo 26-05-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
¿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;
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney

Última edición por egostar fecha: 26-05-2008 a las 23:28:46.
Responder Con Cita
  #9  
Antiguo 27-05-2008
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
je, je... ¿en qué estaría pensando yo?, por supuesto que lo que he puesto no sirve
Responder Con Cita
  #10  
Antiguo 27-05-2008
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
También puedes lanzar la consulta de suma por separado con los mismos parámetros de fecha, será muy rápido.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema al hacer consulta SQL pabliyo SQL 6 29-01-2008 10:56:17
hacer una consulta de eliminacion JODELSA SQL 6 07-06-2005 16:01:36
Problema con una consulta hecha de 3 formas VRO Firebird e Interbase 5 24-01-2005 19:02:11
Hacer una consulta uniendo dos BD's jdiazan Firebird e Interbase 3 28-10-2004 16:39:10


La franja horaria es GMT +2. Ahora son las 18:37: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
Copyright 1996-2007 Club Delphi