Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-02-2008
teclilla teclilla is offline
Miembro
 
Registrado: feb 2008
Posts: 41
Poder: 0
teclilla Va por buen camino
Sql sumar campo sum()

Hola! que tal? Necesito ayuda con el sql, estoy con una aplicacion para elaborar presupuestos a clientes mediante un formulario, tengo la tabla maestra Tpresupuestos y la tabla detalle TPresProdDetalle en la cual voy añadiendo productos para elavorar el presupuesto, esta última tabla contiene un campo 'Importe' que contiene el importe de cada linea de detalle, el total del presupuesto se encuentra en el campo 'SumaTotal' de Tpresupuestos.
Para realizar la suma utilizo una sql :

Select sum(Importe) as ST from presprod where Codpres= res

la funcion que ejecuta la sql es:

procedure TFormPresupuestos.CalcularTotal;
var
total: real;
begin
QSuma.Close;
QSuma.Params[0].AsInteger:=TPresupuestosIdpres.AsInteger;
QSuma.Open;
total:=QSumaST.AsFloat;
TPresupuestosSumaTotal.AsFloat:=total;
end;


se llama en los eventos TPresProdDetalleAfterInsert y TPresProdDetalleAfterDelete, es decir cada vez que modificamos el detalle de la factura para que la SumaTotal se actualice.

Mi problema es que se ejecuta todo bien y no obtengo ningun error, pero nunca me realiza la suma, es decir, la suma siempre es cero, aunque solo tenga un articulo, no se si sera la sql, espero que alguien pueda ayudarme.
Gracias.
Responder Con Cita
  #2  
Antiguo 15-02-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Acuerdate de usar las etiquetas.
Código SQL [-]
Select sum(Importe) as ST from presprod where Codpres= res

Código Delphi [-]
procedure TFormPresupuestos.CalcularTotal;
var
total: real;
begin
QSuma.Close;
QSuma.Params[0].AsInteger:=TPresupuestosIdpres.AsInteger;
QSuma.Open;
total:=QSuma.FileByName('ST').Value;
TPresupuestosSumaTotal.AsFloat:=total;
end;

Saludos
Responder Con Cita
  #3  
Antiguo 15-02-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 22
enecumene Va por buen camino
Hola, primero que todo deberias especificar que base de datos utilizas, Access, Mysql que componentes usas ADO, Zeos, BDE, etc., en fin, creo que el codigo debe ser asi:

Si es en Access.

Código Delphi [-]
procedure TFormPresupuestos.CalcularTotal;
var
total: real;
begin
QSuma.Close;
QSuma.Parameters.ParamByName('Pres').Value:=TPresupuestosIdpres.AsInteger;
QSuma.Open;
total:=QSuma.FileByName('ST').Value;
TPresupuestosSumaTotal.AsFloat:=total;
end;

Si es en Mysql con ZEOS u otra base de datos o componentes :

Código Delphi [-]
procedure TFormPresupuestos.CalcularTotal;
var
total: real;
begin
QSuma.Close;
QSuma.ParamByName('Pres').Value:=TPresupuestosIdpres.AsInteger;
QSuma.Open;
total:=QSuma.FileByName('ST').Value;
TPresupuestosSumaTotal.AsFloat:=total;
end;
Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #4  
Antiguo 15-02-2008
teclilla teclilla is offline
Miembro
 
Registrado: feb 2008
Posts: 41
Poder: 0
teclilla Va por buen camino
Hola Caral, muchas gracias por tu respuesta, (disculpa por las etiquetas soy nueva en el foro), he cambiado el siguiente codigo :

Código Delphi [-]
total:=QSuma.FieldByName('ST').Value;

y me da el siguiente error:
'Invalid variant type conversion'

Responder Con Cita
  #5  
Antiguo 15-02-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 22
enecumene Va por buen camino
Hola, tiene que ser asi:

Código Delphi [-]
total:=QSuma.Fields[0].Value;

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #6  
Antiguo 15-02-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
El campo es Real osea Double.
La suma es double, el nombre del campo es Importe conocido como ST, no veo el error, tal vez asi?
Código Delphi [-]
total:=QSuma.FileByName('Importe').Value;
No se, inténtalo, pero es extraño.
Saludos
Responder Con Cita
  #7  
Antiguo 15-02-2008
teclilla teclilla is offline
Miembro
 
Registrado: feb 2008
Posts: 41
Poder: 0
teclilla Va por buen camino
Muchas gracias por la respuesta, uso Paradox 7 (disculpad por no haberlo dicho antes), he añadido esto a la función:
Código Delphi [-]
procedure TFormPresupuestos.CalcularTotal;
var
        import, total: real;
begin
        import:=TPresProdDetalle.FieldByName('Importe').asFloat;
        QSuma.Close;
        QSuma.Params[0].AsInteger:=TPresupuestosIdpres.AsInteger;
        QSuma.Open;
        total:=QSuma.FieldByName('ST').Value;
        TPresupuestosSumaTotal.AsFloat:=total;
end;
y ejecuto paso a paso para depurar y resulta que el TPresProdDetalle es tabla detalle y hasta que no confirmo el presupuesto no realizo TPresProdDetalle, no se si el error puede venir por ahí, ya que si pruebo solo con un producto en el detalle el importe que recoge es un numero erroneo, a pesar de que a esta funcion se le llama en el evento TPresProdDetalleAfterInsert, no se si vosotros tendreis alguna idea. Muchas Gracias.
Responder Con Cita
  #8  
Antiguo 15-02-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
No dices si te da problemas o que problemas te da, cero que no da la informacion?.
Haz este y veras que dato envia:
Código Delphi [-]
procedure TFormPresupuestos.CalcularTotal;
var
        import, total: real;
begin
        import:=TPresProdDetalle.FieldByName('Importe').asFloat;
        QSuma.Close;
        QSuma.Params[0].AsInteger:=TPresupuestosIdpres.AsInteger;
        QSuma.Open;
        total:=QSuma.FieldByName('ST').Value;
        
        ShowMessage(import);
        ShowMessage(total);

        TPresupuestosSumaTotal.AsFloat:=total;
end;
Asi veremos quien es el que tiene la informacion, supongo.
Saludos
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
Sumar un campo al ser checkeado en un ListView Avellas OOP 3 15-11-2007 21:39:50
Como sumar un campo entero y un real Maury Manosalva OOP 2 31-05-2007 19:41:14
Sumar Label Caral Varios 1 07-10-2006 01:10:51
Sumar un campo en dos tablas Ignacio SQL 2 27-09-2004 01:00:38
Sumar Fechas inetplus Varios 1 18-03-2004 01:12:43


La franja horaria es GMT +2. Ahora son las 08:17:55.


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