www.clarioneros.com

El rincón de los desarrolladores
Fecha actual Mar Feb 20, 2018 1:52 pm

Todos los horarios son UTC




Nuevo tema Responder al tema  [ 9 mensajes ] 
Autor Mensaje
NotaPublicado: Jue Ago 01, 2013 2:26 pm 
Desconectado

Registrado: Vie Sep 07, 2012 11:15 pm
Mensajes: 18
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.


Arriba
 Perfil Email  
 
NotaPublicado: Vie Ago 02, 2013 5:16 pm 
Desconectado
Avatar de Usuario

Registrado: Dom Feb 06, 2011 9:34 am
Mensajes: 1018
Ubicación: España
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.

_________________
Mauricio, básicamente usando Clarion 6.3
www.tdcsoftware.com y www.clarioneros.com/blog


Arriba
 Perfil Email  
 
NotaPublicado: Vie Ago 02, 2013 7:07 pm 
Desconectado

Registrado: Vie Sep 07, 2012 11:15 pm
Mensajes: 18
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.


Arriba
 Perfil Email  
 
NotaPublicado: Sab Ago 03, 2013 4:02 pm 
Desconectado
Avatar de Usuario

Registrado: Dom Feb 06, 2011 9:34 am
Mensajes: 1018
Ubicación: España
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.

_________________
Mauricio, básicamente usando Clarion 6.3
www.tdcsoftware.com y www.clarioneros.com/blog


Arriba
 Perfil Email  
 
NotaPublicado: Lun Ago 05, 2013 12:18 pm 
Desconectado

Registrado: Vie Sep 07, 2012 11:15 pm
Mensajes: 18
Muchas gracias Mauricio. Espero tu respuesta.
Saludos.


Arriba
 Perfil Email  
 
NotaPublicado: Lun Ago 05, 2013 12:54 pm 
Desconectado
Avatar de Usuario

Registrado: Dom Feb 06, 2011 9:34 am
Mensajes: 1018
Ubicación: España
Solo para estar seguro que entendí las relaciones, está esto bien?
http://screencast.com/t/2RZXXymVkN1

_________________
Mauricio, básicamente usando Clarion 6.3
www.tdcsoftware.com y www.clarioneros.com/blog


Arriba
 Perfil Email  
 
NotaPublicado: Lun Ago 05, 2013 1:22 pm 
Desconectado
Avatar de Usuario

Registrado: Dom Feb 06, 2011 9:34 am
Mensajes: 1018
Ubicación: España
Veamos, si no entendí mal las relaciones, esto es lo que tenés que hacer.

1) Actualizar el precio de un material
Código:
UPDATE Materiales
SET PrecioMat = 20
WHERE CodMat = 1

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)
Código:
UPDATE ProdMat
SET Precio = MAT.PrecioMat,
TotalRenglon = Cantidad * MAT.PrecioMat
FROM ProdMat PM
INNER JOIN Materiales MAT ON PM.IdMat = Mat.IdMat


Y por último, actualizo el precio del producto.
Código:
UPDATE Productos
SET PrecPro = (SELECT SUM(TotalRenglon) FROM ProdMat PM WHERE PM.IdPro = PRO.IdPro)
FROM Productos PRO


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.
Código:
UPDATE Materiales
SET PrecioMat = PrecioMat * 1,2
WHERE IdCat = (categoría buscada)


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.

_________________
Mauricio, básicamente usando Clarion 6.3
www.tdcsoftware.com y www.clarioneros.com/blog


Arriba
 Perfil Email  
 
NotaPublicado: Lun Ago 05, 2013 2:01 pm 
Desconectado

Registrado: Vie Sep 07, 2012 11:15 pm
Mensajes: 18
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.


Arriba
 Perfil Email  
 
NotaPublicado: Lun Ago 05, 2013 4:00 pm 
Desconectado
Avatar de Usuario

Registrado: Dom Feb 06, 2011 9:34 am
Mensajes: 1018
Ubicación: España
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.

_________________
Mauricio, básicamente usando Clarion 6.3
www.tdcsoftware.com y www.clarioneros.com/blog


Arriba
 Perfil Email  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 9 mensajes ] 

Todos los horarios son UTC


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Saltar a:  
Powered by phpBB® Forum Software © phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com