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 23-02-2010
Avatar de TrUnkS
TrUnkS TrUnkS is offline
Miembro
 
Registrado: dic 2005
Posts: 93
Poder: 19
TrUnkS Va por buen camino
Question sumar totales de detalle y asignarlo a un campo del maestro!!

Amigos ... estoy haciendo un procedimiento en Firebird que he logrado hacer a medias. Tengo una relacion maestro-detalle entre una tabla productos y otra de compuestos. Los compuestos también contienen datos de la misma tabla productos:

PRODUCTOS

IDPRODUCTO
PRECIO_COMPRA

COMPUESTOS

IDCOMPUESTO
IDPRODUCTO
ID
CANTIDAD
NOMBRE
PRECIO_COMPRA
TOTAL_PRECIO_COMPRA

La idea es que si se cambia un PRECIO_COMPRA de la tabla productos y ese producto se encuentra en la tabla compuestos (o sea es una composicion de otro producto), entonces que se cambie ese PRECIO_COMPRA de la tabla compuestos para que se actualize el TOTAL_PRECIO_COMPRA. Eso ya lo tengo:

Código SQL [-]
CREATE OR ALTER PROCEDURE ACTUALIZAR (
    COMPRA double precision)
as
begin
 UPDATE COMPUESTOS
 SET PRECIO_COMPRA = :COMPRA
 WHERE ID = :IDPRODUCTO;
 SUSPEND;


pero lo que necesito es que .... si existe un producto cuyo compuesto sea aquel al cual se le ha modificado su PRECIO_COMPRA, entonces el PRECIO_COMPRA de ese producto es igual a SUM(TOTAL_PRECIO_COMPRA).Lo que quiero es mantener actualizado siempre PRECIO_COMPRA de la tabla productos el cual depende de la suma de los totales de los compuestos.
Responder Con Cita
  #2  
Antiguo 23-02-2010
Avatar de juanlaplata
juanlaplata juanlaplata is offline
Miembro
 
Registrado: ene 2007
Ubicación: La Plata, Bs. As. (Argentina)
Posts: 212
Poder: 18
juanlaplata Va por buen camino
En 1er. lugar, creo que el PRECIO_COMPRA de la tabla COMPUESTOS, no deberia estar, si es q hace referencia al verdadero precio del producto, lo rescatas de la propia tabla y listo, para eso es una base de datos relacional.

2do. No me queda claro como se compone el TOTAL_PRECIO_COMPRA

3ro. en este codigo:
Código SQL [-]
 
UPDATE COMPUESTOS 
SET PRECIO_COMPRA = :COMPRA 
WHERE ID = :IDPRODUCTO;
no deberia igualar con
Código SQL [-]
 WHERE IDPRODUCTO = :IDPRODUCTO
Responder Con Cita
  #3  
Antiguo 23-02-2010
Avatar de TrUnkS
TrUnkS TrUnkS is offline
Miembro
 
Registrado: dic 2005
Posts: 93
Poder: 19
TrUnkS Va por buen camino
Hola juanlaplata y gracias por responder ....

1º El PRECIO_COMPRA de la tabla compuestos no puede hacer referencia a la tabla productos como llave foranea porque un producto puede tener muchos compuestos, entonces si se cambia el PRECIO_COMPRA de un producto, se van a cambiar todos los PRECIO_COMPRA de sus compuestos, siendo que cada compuesto tiene diferente PRECIO_COMPRA

2. El TOTAL_PRECIO_COMPRA es el producto de CANTIDAD * PRECIO_COMPRA. Todos son campos físicos de la tabla. Lo hice asi porque es necesario para calcular el total de cada columna con un campo Aggregate de un ClientDataSet.

3. En el código el IDPRODUCTO es primary key de la tabla producto y foreing key de la tabla COMPUESTOS, asi q estan enlazadas por este campo. El campo ID guarda la primary key de los productos que se van aagregando a la tabla COMPUESTOS.

Aqui hay algo pero no me ha resultado del todo bien

http://www.clubdelphi.com/foros/show...=sumar+columna

y aunque he trabajado con SQL me cuesta mas que el Delphi. Gracias cualquier ayuda.
Responder Con Cita
  #4  
Antiguo 23-02-2010
Avatar de juanlaplata
juanlaplata juanlaplata is offline
Miembro
 
Registrado: ene 2007
Ubicación: La Plata, Bs. As. (Argentina)
Posts: 212
Poder: 18
juanlaplata Va por buen camino
Ok, por la similitud de los nombres no comprendia bien el modelo.
En Oracle se q se puede hacer el SQL todo en uno.
Código SQL [-]
UPDATE PRODUCTOS  
     SET PRECIO_COMPRA = (select sum (TOTAL_PRECIO_COMPRA)                        
                                         from COMPUESTOS                        
                                       where ID = :IDPRODUCTO) 
 WHERE IDPRODUCTO = :IDPRODUCTO;
Lo que no se si es posible en Firebird, pero no seria mayor inconveniente hacerlo en dos pasos, recolectar 1ro. el monto a actualizar, y luego hacerlo ( update )

Rescatamos el total para ingresar como parametro :compra en el update
Código SQL [-]
select sum (TOTAL_PRECIO_COMPRA) 
  from COMPUESTOS  
where ID = :IDPRODUCTO;

Código SQL [-]
UPDATE PRODUCTOS  
     SET PRECIO_COMPRA = :COMPRA  
 WHERE IDPRODUCTO = :IDPRODUCTO;
Responder Con Cita
  #5  
Antiguo 23-02-2010
Avatar de TrUnkS
TrUnkS TrUnkS is offline
Miembro
 
Registrado: dic 2005
Posts: 93
Poder: 19
TrUnkS Va por buen camino
Gracias ... lo voy a probar y comento como me fue. Gracias mil
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
Saber si el DBGrid (Detalle) esta Vacio en Relacion Maestro/Detalle Adrian Murua Conexión con bases de datos 2 03-01-2009 13:48:46
Sumar totales en QReport flor Impresión 2 19-04-2008 16:50:19
Problema tabla Maestro-detalle en la q la pk de t.detalle formad por 2cods de la maes akinom38 Varios 1 09-11-2007 19:27:44
Sumar totales de una fecha rober_kobe SQL 2 22-10-2007 17:30:33
Como hago un campo calculado en un maestro detalle??? Bitbanner Conexión con bases de datos 1 04-02-2005 22:03:41


La franja horaria es GMT +2. Ahora son las 22:57:37.


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