Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-10-2006
Analia29 Analia29 is offline
Registrado
 
Registrado: oct 2006
Ubicación: Santa Fe
Posts: 5
Poder: 0
Analia29 Va por buen camino
Question Sumar montos a medida que se ingresa

Hola, les consulto lo siguiente:
Trabajo con Delphi 7, y Firebird 1.5, y resulta que tengo una consulta que me arroja un listado de personas, donde uno de los campos es un monto al cual se ingresa a través de un DBGrid, hasta ahí todo bien, mi duda es como hacer para ir sumando los valores que se ingresan y así ir mostrando un total y que se actualize a medida que se ingresa o se modifica un valor. El total no se necesita almacenar en ningún lado, es simplemente para ir controlando a medida que se ingresa.

Espero haber sido clara.
Saludos y gracias.

Analía
Responder Con Cita
  #2  
Antiguo 25-10-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
La verdad no entiendo muy bien:
Se despliega el campo en un dbgrid:
Pregunto: quieres sumar lo que aparece en el dbgrid o vas cambiando o poniendo tu los datos en este y quieres que se sumen estos, osea los que pones tu.?
Saludos
Responder Con Cita
  #3  
Antiguo 25-10-2006
Analia29 Analia29 is offline
Registrado
 
Registrado: oct 2006
Ubicación: Santa Fe
Posts: 5
Poder: 0
Analia29 Va por buen camino
A ver si puedo explicar mejor .
Tengo en un dbgrid un campo que se va cargando con valores de montos. Yo lo que necesito es ir sumando esos montos que se van cargando para que me vaya arrojando un total, puede ser en un Edit, eso es lo de menos, la idea es que el usuario que carga pueda ir viendo el monto total a medida que va cargando los montos en el dbgrid. Los datos que se muestran en ese dbgrid son resultado de una consulta que está en un dataset, y que luego se actualiza en la base de datos.

Espero haber sido más clara.

Gracias y saludos
Responder Con Cita
  #4  
Antiguo 25-10-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Bueno Analia29, creo que ya me aclaro, perdon la ingnorancia.
Creo que ya se lo que quieres, prueba esto:
En un query temporal pones esto:
Código Delphi [-]
      QTemp.SQL.Text := 'SELECT DISTINCTROW Sum([TuTabla.TuCampo]) AS [Suma] From TuTabla';
      QTemp.Open;
      Edit1.Text  := IntToStr(QTemp.Fields[0].AsInteger);
Por supuesto su tabla y tu campo lo entiendes? o te aclaras.
Espero te sirva y me aclare .
Saludos
Responder Con Cita
  #5  
Antiguo 26-10-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Siendo Firebird, se podría abordar el problema desde otro frente.

Una idea: usando Eventos del SGBD, en el afterInsert y/o Update de la tabla a modificar, lanzas un evento. La ventana de tu programa registra ese evento y cuando recibe notificación, ejecuta (una consulta, procedimiento almacenado, etc) que te devuelva ese total y se asigne a un label.

Otra idea: Para actualizar o modificar una tabla, llamas a un procedimiento almacenado de seleccion, al cual le pasas todos los campos a modificar más uno extra donde el propio SP te devuelve ese monto, al ser "un campo más del SP", se usaría un DBEdit para ver el monto.

Así siempre tendrías el valor actualizado, sin tener que abrir y cerrar la consulta cada dos por tres.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #6  
Antiguo 27-10-2006
Analia29 Analia29 is offline
Registrado
 
Registrado: oct 2006
Ubicación: Santa Fe
Posts: 5
Poder: 0
Analia29 Va por buen camino
Hola, estoy intentando resolver el problema y lo estoy haciendo con procedimientos almacenados, les transcribo el código.
Código SQL [-]
CREATE PROCEDURE SUMATOTAL (
    PER INTEGER,
    EST INTEGER)
RETURNS (
    TOTAL FLOAT,
    CODAFILIADO INTEGER,
    FECHAMOD DATE,
    MONTO FLOAT,
    MOTNOPAGO INTEGER,
    PAGO VARCHAR(1),
    USUARIO INTEGER,
    CODIGO INTEGER,
    NOMBREYAPELLIDO VARCHAR(50),
    NRODOC INTEGER,
    APORTA VARCHAR(1),
    CUIL VARCHAR(25),
    CODPERIODO INTEGER,
    NROESTAB INTEGER)
AS
begin
total = 0;
For SELECT DISTINCT APORTESAFI.Codafiliado, APORTESAFI.Fechamod, APORTESAFI.Monto, APORTESAFI.Motnopago, aportesafi.Codperiodo,
Aportesafi.Pago, APORTESAFI.Usuario, APORTESAFI.Codigo, aportesafi.Nroestab, AFILIADOS.NOMBREYAPELLIDO , AFILIADOS.NRODOC, AFILIADOS.APORTA, AFILIADOS.CUIL
FROM APORTESAFI
   INNER JOIN AFILIADOS ON (APORTESAFI.CODAFILIADO = AFILIADOS.CODIGOAFILIADO)
WHERE 
   (
      (APORTESAFI.CODPERIODO = :PER)
   and 
      (APORTESAFI.NROESTAB = :EST)
   )
ORDER BY APORTESAFI.NROESTAB, NOMBREYAPELLIDO
INTO :Codafiliado, :Fechamod, :Monto, :Motnopago, :codperiodo, :Pago, :Usuario, :Codigo, :nroestab, :NOMBREYAPELLIDO , :NRODOC, :APORTA, :CUIL DO
BEGIN
total = :total + :monto;
suspend;
end
end
El resultado aún no es lo deseado, ya que el total lo va sumando bien, solo que en cada registro, y yo lo necesito que se vaya actualizado en el dbedit la sumatoria o sea el campo total.

Gracias por la ayuda, creo que ahora voy en mejor camino que antes, pero aún no he podido , seguro que debe ser una pavada.

Saludos
Responder Con Cita
  #7  
Antiguo 27-10-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Código SQL [-]
CREATE PROCEDURE SUMATOTAL (
    PER INTEGER,
    EST INTEGER)
RETURNS (
    TOTAL FLOAT,
    CODAFILIADO INTEGER,
    FECHAMOD DATE,
    MONTO FLOAT,
    MOTNOPAGO INTEGER,
    PAGO VARCHAR(1),
    USUARIO INTEGER,
    CODIGO INTEGER,
    NOMBREYAPELLIDO VARCHAR(50),
    NRODOC INTEGER,
    APORTA VARCHAR(1),
    CUIL VARCHAR(25),
    CODPERIODO INTEGER,
    NROESTAB INTEGER)
AS
begin
total = 0;
For SELECT DISTINCT APORTESAFI.Codafiliado, APORTESAFI.Fechamod, APORTESAFI.Monto, APORTESAFI.Motnopago, aportesafi.Codperiodo,
Aportesafi.Pago, APORTESAFI.Usuario, APORTESAFI.Codigo, aportesafi.Nroestab, AFILIADOS.NOMBREYAPELLIDO , AFILIADOS.NRODOC, AFILIADOS.APORTA, AFILIADOS.CUIL
FROM APORTESAFI
   INNER JOIN AFILIADOS ON (APORTESAFI.CODAFILIADO = AFILIADOS.CODIGOAFILIADO)
WHERE 
   (
      (APORTESAFI.CODPERIODO = :PER)
   and 
      (APORTESAFI.NROESTAB = :EST)
   )
ORDER BY APORTESAFI.NROESTAB, NOMBREYAPELLIDO
INTO :Codafiliado, :Fechamod, :Monto, :Motnopago, :codperiodo, :Pago, :Usuario, :Codigo, :nroestab, :NOMBREYAPELLIDO , :NRODOC, :APORTA, :CUIL DO
BEGIN
total = :total + :monto;
end
suspend;
end

Tan fácil como cambiar el suspend del bucle, así realiza la sumatoria de todos los registros y solo devuelve datos al finalizar, cuando ya se tiene el monto total.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
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
transporte de montos santiago14 Impresión 2 19-12-2005 13:31:40
Reporte detallado por montos de fecha en qReport.... uper Impresión 2 20-10-2005 15:36:07
Botones a la Medida Vlady Varios 5 26-08-2005 20:54:27
Para todos aquellos que desarrollan aplicaciones a medida ... kinobi Noticias 37 23-02-2005 15:43:35


La franja horaria es GMT +2. Ahora son las 20:29:27.


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