La Web del Programador: Comunidad de Programadores
 
    Pregunta:  55831 - HACER UNA CONSULTA QUE ACTUALICE
Autor:  Angel I.V
Bueno, espero explicarme bien, porque es algo muy basico, pero intento hacerlo como en Access (sin escribir la sentencia SQL) porque no se porque poniendo la sentencia en SQL plus (el que me ha enseñado) no me funciona.

La cuestion es la siguiente:
Tengo las siguientes tablas

PARTIDA (id_partida, id_producto, stock, kgs_entrada, ....)
ALMACEN(id_producto, cantidad....)

bien, me guistaria que cuando meto una partida nueva...con su correspondientes kilos y todo (el campo stock es un booleano el cual esta a falso y que cuando sume en almacen los kgs_entrada de esa partida, el campo stock cambie a true y cantidad pase a ser cantidad + la cantidad de la entrada.

Pues bien, no se como hacerlo!!! soy torpe ya, pero no se...no puede ser asi?

UPDATE ALMACEN
SET ALMACEN.cantidad =
ALMACEN.cantidad +
SUM(SELECTPARTIDA.kgs_entrada
FROM PARTIDA
WHERE PARTIDA.stock = False)
WHERE PARTIDA.id_producto = ALMACEN.id_producto;

Se supone que eso debe de actualizar la cantidad de almacen para un producto en concreto , del cual puedo tener varias partidas con stock = false. Bueno lo del sumatorio es lo de menos, porque puedo hacer que se sume una a una, cada vez que introduzca la partida or el formulario y listo. Pues bien, esto no me funciona y no se como hacerlo. Como es la estructura para una acccion de actualizar???? Si hace falta decirme como es en modo diseño y como es en modo SQL.
Por otro lado, supongo que para cambiar posteriormente el campo stock a true, tendré que hacer otra consulta, no???

Bueno, perdon por el rollo pero como veis estoy muy verde os agradezco desde ya vuestra ayuda. M

MUchas gracias.

  Respuesta:  Nicolás Pailhé
Hola Angel.. te explico.. para lo que necesitas hacer necesitarás dos consultas.

Primero la consulta que actualiza la cantidad del almacen.. te paso el Código de SQL:

UPDATE ALMACEN INNER JOIN PARTIDA ON ALMACEN.id_producto = PARTIDA.id_producto SET ALMACEN.cantidad = [cantidad]+[kgs_entrada]
WHERE (((PARTIDA.sotck)=0));

Cuando pases la consulta a diseño podras ver que estan las dos tablas (Almacen y Partida VINCULADAS por el id_producto) y le pido que a los productos que tienen stock en 0 (destildado) le sume al campo cantidad los kgs que entraron.

Luego tendrías que ejecutar la otra consulta que simplemente pasa el campo stock de 0 a -1

Ambas consultas son "Consultas de Actualización"

Ojo!! es importante que los productos que pongas en la tabla PARTIDA ya figuren en la tabla ALMACEN.

Espero que te haya sido de ayuda, cualquier inconveniente avisame en esta página o enviame un email.

Saludos.. Nicolás