FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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. |
#2
|
||||
|
||||
Hola
Acuerdate de usar las etiquetas.
Saludos |
#3
|
||||
|
||||
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.
Si es en Mysql con ZEOS u otra base de datos o componentes : Saludos.
__________________
Mi BLOG - ¡Joder, leanse la guia de estilo! Las Palabras son enanas, los ejemplos gigantes. |
#5
|
||||
|
||||
__________________
Mi BLOG - ¡Joder, leanse la guia de estilo! Las Palabras son enanas, los ejemplos gigantes. |
#7
|
|||
|
|||
Muchas gracias por la respuesta, uso Paradox 7 (disculpad por no haberlo dicho antes), he añadido esto a la función:
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. |
#8
|
||||
|
||||
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: Asi veremos quien es el que tiene la informacion, supongo. Saludos |
#9
|
|||
|
|||
import = 0
y genera el error 'Invalid variant type conversion' Muchas gracias Caral |
#10
|
||||
|
||||
Hola
Segun me dicen ST tiene un valor NULL, por eso manda el error. No se a que se debe, se supone que es la suma del campo importe y si este contiene datos no deberia dar ese problema. Para mi por alguna razon no esta reconociendo ST como un campo. Quedo un poco corto en la apreciacion del problema, no lo termino de entender. Espero lo puedas solucionar, o esperar a un maestro, ya vendrán. Saludos |
#11
|
||||
|
||||
total:=QSuma.FieldByName('ST').AsFloat;
Ya que trabajas con paradox, usa AsFloat, te convertirá el dato NULL por un cero (y no muestra error). .Value es de tipo Variant, y si no tiene nada asignado o tiene el valor especial NULL, devolverá Unassigned o NULL, y como esos valores no tienen correspondencia con un real, delphi lanza la excepción. las propiedades Asxxxxx si realizan la conversión. Por cierto, dale una visual a la ayuda "data types", puede que un Float se más grande que un real, y obtengas errores en ejecución. (Mira el valor máximo que puede guardar cada tipo de dato). Saludos Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#12
|
|||
|
|||
Muchas gracias lepe, lo he cambiado pero creo que es la sql la que no la realiza bien, ¿como puedo mostrar el resultado de la query por pantalla antes de convertirla a float y asignarla a una variable?
Gracias. |
#13
|
|||
|
|||
Creo que el tema va por aquí, cuando doy de alta un presupuesto mediante formulario inserto 1 producto, calculo el importe y me da 850,00 y despues calculo el total:
creo que la sql no la realiza bien, en Importe en teoría debe contener 850,00 con lo cual al haber un solo producto este deberia ser el resultado de la query. Gracias por vuestra ayuda. |
#14
|
||||
|
||||
El sql ten por seguro que funciona, la función Sum lleva "un par de días inventada" .
quizás aun no hayas guardado el presupuesto y por ello el valor de idpres es igual a cero o null. Ten en cuenta los posibles valores nulos, si existe un importe a Null, la función Sum devuelve null según el standard del SQL. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. Última edición por Lepe fecha: 16-02-2008 a las 13:41:01. |
#15
|
||||
|
||||
Hola
Lo mas seguro es que me equivoque, pero: 1- La sentencia sql seguro la tienes dentro del query y en la pantallita tendras el campo?. 2- Si ves la secuencia que usas, veras que cierras la tabla antes de darle el parametro (QSuma.Close eso no es correcto. Yo lo haria por codigo asi: Saludos |
#16
|
|||
|
|||
Siendo que 'presprod' es una tabla detalle de 'presupuestos' con los cual los campos id deben coincidir, ¿estará mal la sql? a la hora de calcular la suma las tablas están en modo appen y no se ha realizado un post por si el usuario no quiere confirmar el presupuesto y desea cancelar. No lanza ningun error y la aplicacion funciona, la suma siempre es 0, pero si que hay un linea (record) con importe 850,00 creo al menos sum deberia ser 850
Muchas gracias. Última edición por teclilla fecha: 16-02-2008 a las 16:49:52. Razón: la letra de la etiqueta es muy pequeña |
#17
|
||||
|
||||
Cita:
La suma la hace bien, pero no encuentra nada que sumar. Paradox no copia automáticamente el valor de las claves de la tabla Maestra a la detalle, debes hacerlo tú por código. Me da la impresión de que le das un valor a presid de la tabla maestra, pero no lo asignas a la tabla detalle (codpres). Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#18
|
|||
|
|||
idpre y codpres son de tipo longint, al dar de alta un presupuesto le pongo por codigo el idpres y en la tabla detalle al dar de alta el primer detalle tambien codpres tiene el valor correcto el mismo de idpres (el cual se muestra en el dbgrid) con lo cual esto lo asigna bien a la sql, ¿no será que las dos tablas estan en modo edicion y se deberia haber realizado el post?
Gracias. |
#19
|
||||
|
||||
La de detalle debería estar guardada.
Otra posibilidad es usar el evento OnCalcFields mientras se está editando, cambiará inmediatamente los totales. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#20
|
|||
|
|||
Queria probar esto ultimo que me has comentado, ya que estoy un poco desesperada, ¿podrias indicarme un ejemplo de como usar el evento OnCalcFields?
Muchas gracias por todo. |
|
|
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 |
|