Actualizando varias tablas
-
- Novato
- Mensajes: 24
- Registrado: Vie Sep 07, 2012 11:15 pm
- Contactar:
Actualizando varias tablas
Buen dia, mi consulta surge ya que como comente anteriormente , hace varios años que estoy con clarion, pero muy poco tiempo que estoy intentando enlazarlo con SQL.
Debido a esto, mi penzamiento para resolver los problemas es muy clarionero(TPS), es decir recorriendo tablas con loops...
Presentando el panorama: Tengo las sig. tablas en SQL
--Productos--
IDPro
CodPro
DescrPro
PrecioPro (suma de los renglones de ProdMat)
--Materiales--
IDMat
CodMat
DescrMat
IDCat
PrecioMat
--Categorias--
IDCat
DescrCat
--ProdMat--
IDPro
Renglon
IDMat
Cantidad
Precio
TotalRenglon (es igual a Cantidad * Precio)
(todos los archivos tienen sus indices y relaciones)
(ProdMat seria los materiales que forman un Producto)
Consultas (como serian las sentencias sql para dicha actualización)
1) Actualizar el precio de un material, teniendo en cuenta que se deben actualizar todos los registros que tengan este material en ProdMat, y que a la vez se actualice el precio del Producto.
2) Deseo actualizar en un % los valores de los Materiales que pertenecen a una determinada Categorias, teniendo en cuenta que no solo se debe actualizar PrecioMat en Materiales, sino tambien Precio y TotalRenglon en ProdMat y PrecioPro en Productos.
Espero que se alla comprendido que es lo que deseo realizar.
Se puede realizar esto en una sola consulta SQL o tengo que realizar loops como en TPS?
Gracias.
Saludos.
Debido a esto, mi penzamiento para resolver los problemas es muy clarionero(TPS), es decir recorriendo tablas con loops...
Presentando el panorama: Tengo las sig. tablas en SQL
--Productos--
IDPro
CodPro
DescrPro
PrecioPro (suma de los renglones de ProdMat)
--Materiales--
IDMat
CodMat
DescrMat
IDCat
PrecioMat
--Categorias--
IDCat
DescrCat
--ProdMat--
IDPro
Renglon
IDMat
Cantidad
Precio
TotalRenglon (es igual a Cantidad * Precio)
(todos los archivos tienen sus indices y relaciones)
(ProdMat seria los materiales que forman un Producto)
Consultas (como serian las sentencias sql para dicha actualización)
1) Actualizar el precio de un material, teniendo en cuenta que se deben actualizar todos los registros que tengan este material en ProdMat, y que a la vez se actualice el precio del Producto.
2) Deseo actualizar en un % los valores de los Materiales que pertenecen a una determinada Categorias, teniendo en cuenta que no solo se debe actualizar PrecioMat en Materiales, sino tambien Precio y TotalRenglon en ProdMat y PrecioPro en Productos.
Espero que se alla comprendido que es lo que deseo realizar.
Se puede realizar esto en una sola consulta SQL o tengo que realizar loops como en TPS?
Gracias.
Saludos.
- Mauricio
- Desarrollador de Clarion
- Mensajes: 1125
- Registrado: Dom Feb 06, 2011 9:34 am
- Ubicación: España
- Contactar:
Re: Actualizando varias tablas
Por qué el precio del producto está en Productos y en ProdMat? No entendí esa parte.
Y por qué en tu diseño tenés TotalRenglon? Eso no está muy normalizado.
Y por qué en tu diseño tenés TotalRenglon? Eso no está muy normalizado.
Mauricio, básicamente usando Clarion 6.3
www.tdcsoftware.com y www.clarioneros.com/blog
www.tdcsoftware.com y www.clarioneros.com/blog
-
- Novato
- Mensajes: 24
- Registrado: Vie Sep 07, 2012 11:15 pm
- Contactar:
Re: Actualizando varias tablas
Hola Mauricio.
El precio decidi ponerlo en ambos archivos por si en algun momento deciden no tomar el precio que figura en Materiales para un ProdMat determinado. Pero se podria sacar el precio del archivo ProdMat.
Con respecto a TotalRenglon para ahorrar un calculo ProdMat.Cantidad * ProdMat.Precio. Pero podria obviarse tambien.
Aveces repetir un campo en algun archivo te ayuda para no tener que acceder a otras tablas, y obtener el resultado de manera mas practica, aunque para la actualizacion se complica.
Replanteando, me gustaria saber como se resolveria con esta mueva estructura.
--ProdMat--
IDPro
Renglon
IDMat
Cantidad
El Problema se me plantea para recalcular el Producto.PrecioPro.
El precio decidi ponerlo en ambos archivos por si en algun momento deciden no tomar el precio que figura en Materiales para un ProdMat determinado. Pero se podria sacar el precio del archivo ProdMat.
Con respecto a TotalRenglon para ahorrar un calculo ProdMat.Cantidad * ProdMat.Precio. Pero podria obviarse tambien.
Aveces repetir un campo en algun archivo te ayuda para no tener que acceder a otras tablas, y obtener el resultado de manera mas practica, aunque para la actualizacion se complica.
Replanteando, me gustaria saber como se resolveria con esta mueva estructura.
--ProdMat--
IDPro
Renglon
IDMat
Cantidad
El Problema se me plantea para recalcular el Producto.PrecioPro.
- Mauricio
- Desarrollador de Clarion
- Mensajes: 1125
- Registrado: Dom Feb 06, 2011 9:34 am
- Ubicación: España
- Contactar:
Re: Actualizando varias tablas
Javier, no me olvidé, estoy tratando de armar la estructura de tablas en una base de datos para enviarte la respuesta correcta.
Apenas la tenga la publico.
Apenas la tenga la publico.
Mauricio, básicamente usando Clarion 6.3
www.tdcsoftware.com y www.clarioneros.com/blog
www.tdcsoftware.com y www.clarioneros.com/blog
-
- Novato
- Mensajes: 24
- Registrado: Vie Sep 07, 2012 11:15 pm
- Contactar:
Re: Actualizando varias tablas
Muchas gracias Mauricio. Espero tu respuesta.
Saludos.
Saludos.
- Mauricio
- Desarrollador de Clarion
- Mensajes: 1125
- Registrado: Dom Feb 06, 2011 9:34 am
- Ubicación: España
- Contactar:
Re: Actualizando varias tablas
Solo para estar seguro que entendí las relaciones, está esto bien?
http://screencast.com/t/2RZXXymVkN1
http://screencast.com/t/2RZXXymVkN1
Mauricio, básicamente usando Clarion 6.3
www.tdcsoftware.com y www.clarioneros.com/blog
www.tdcsoftware.com y www.clarioneros.com/blog
- Mauricio
- Desarrollador de Clarion
- Mensajes: 1125
- Registrado: Dom Feb 06, 2011 9:34 am
- Ubicación: España
- Contactar:
Re: Actualizando varias tablas
Veamos, si no entendí mal las relaciones, esto es lo que tenés que hacer.
1) Actualizar el precio de un material
En este caso actualizamos el precio del material cuyo CodMat = 1
Luego, actualizo los ProdMat que utilizan ese material (no solo el precio sino también el TotalRenglon)
Y por último, actualizo el precio del producto.
Obviamente no vas a poder actualizar todo en un solo query sino que vas a necesitar 3 pero al menos no vas a tener que hacer ningún loop.
La actualización del precio en función de la categoría es similar.
Un detalle. En la primera parte, en los queries 2 y 3, estás actualizando toda la tabla. Lo lógico sería actualizar solo los registros cuyo código corresponde al del material actualizado pero para eso solo tenés que agregar un WHERE.
Si no te quedó claro, avisá.
Saludos.
1) Actualizar el precio de un material
Código: Seleccionar todo
UPDATE Materiales
SET PrecioMat = 20
WHERE CodMat = 1
Luego, actualizo los ProdMat que utilizan ese material (no solo el precio sino también el TotalRenglon)
Código: Seleccionar todo
UPDATE ProdMat
SET Precio = MAT.PrecioMat,
TotalRenglon = Cantidad * MAT.PrecioMat
FROM ProdMat PM
INNER JOIN Materiales MAT ON PM.IdMat = Mat.IdMat
Código: Seleccionar todo
UPDATE Productos
SET PrecPro = (SELECT SUM(TotalRenglon) FROM ProdMat PM WHERE PM.IdPro = PRO.IdPro)
FROM Productos PRO
La actualización del precio en función de la categoría es similar.
Código: Seleccionar todo
UPDATE Materiales
SET PrecioMat = PrecioMat * 1,2
WHERE IdCat = (categoría buscada)
Si no te quedó claro, avisá.
Saludos.
Mauricio, básicamente usando Clarion 6.3
www.tdcsoftware.com y www.clarioneros.com/blog
www.tdcsoftware.com y www.clarioneros.com/blog
-
- Novato
- Mensajes: 24
- Registrado: Vie Sep 07, 2012 11:15 pm
- Contactar:
Re: Actualizando varias tablas
Agradezco mucho tu ayuda Mauricio, es exactamente lo que necesitaba saber. Gracias por tu interes en darnos una mano, y hacer mucho mas simple una implementacion sobre un motor como sql. Intentaré cambiar el pensamento TPSero que hace años tengo incorporado.
Nuevamente gracias.
Saludos.
Nuevamente gracias.
Saludos.
- Mauricio
- Desarrollador de Clarion
- Mensajes: 1125
- Registrado: Dom Feb 06, 2011 9:34 am
- Ubicación: España
- Contactar:
Re: Actualizando varias tablas
De nada.
Dijiste algo importante, cambiar el pensamiento TPSero, es lo primero que tenés que hacer cuando trabajás con SQL. Pero te aseguro que una vez que le encontrás la mano no querés volver más a TPS.
Cualquier duda, seguí preguntando.
Saludos.
Dijiste algo importante, cambiar el pensamiento TPSero, es lo primero que tenés que hacer cuando trabajás con SQL. Pero te aseguro que una vez que le encontrás la mano no querés volver más a TPS.
Cualquier duda, seguí preguntando.
Saludos.
Mauricio, básicamente usando Clarion 6.3
www.tdcsoftware.com y www.clarioneros.com/blog
www.tdcsoftware.com y www.clarioneros.com/blog
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 9 invitados