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 12-05-2003
judoboy judoboy is offline
Miembro
 
Registrado: may 2003
Ubicación: Valencia
Posts: 139
Poder: 22
judoboy Va por buen camino
¿Como realizar bien un UPDATE?

Hola tengo problemas a la hora de hacer un UPDATE.
El asunto es el siguiente, quiero actualizar el stock de unos artículos. El UPDATE lo hago cogiendo los datos de un DBGrid.

Yo hago esto

Código:
 Data:=DBGLineasPedido.DataSource.DataSet;
             Data.First;

while not (Data.Eof) do

begin
//HAGO en UPDATE

Data.Next;

end;

Pero me pasa lo siguiente en lugar de actualicar el stock de cada artículo con su correspondiente cantidad,me suma las cantidades de todos los artículos y con esa misma cantidad me actualiza el stock de todos los artículos.

No sé si me he explicado bien.

Seguramente se podrá hacer de otra forma mediante TRIGGERs o algo, pero es que mediante triggers no me entero.

Un Saludo.
Responder Con Cita
  #2  
Antiguo 12-05-2003
judoboy judoboy is offline
Miembro
 
Registrado: may 2003
Ubicación: Valencia
Posts: 139
Poder: 22
judoboy Va por buen camino
El update lo hago así
Código:
'UPDATE ARTICULOS SET STOCK=STOCK+"'+DBGLineasPedido.Fields[2].Value+'"';
donde Cantidad ocupa la tercera posición en el dbgrid.
Responder Con Cita
  #3  
Antiguo 12-05-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Posteado originalmente por judoboy
El update lo hago así
Código:
'UPDATE ARTICULOS SET STOCK=STOCK+"'+DBGLineasPedido.Fields[2].Value+'"';
donde Cantidad ocupa la tercera posición en el dbgrid.
¿Y no le falta una cláusula WHERE a tu instrucción? Sin ella el UPDATE se hace sobre todos los registros.

// Saludos
Responder Con Cita
  #4  
Antiguo 13-05-2003
judoboy judoboy is offline
Miembro
 
Registrado: may 2003
Ubicación: Valencia
Posts: 139
Poder: 22
judoboy Va por buen camino
Ya pero que pongo en la cláusula WHERE, porque yo quiero que me hago los artículos como digo que estan en el DBGrid.

Es que no se que puedo poner para que identifique a un artículo y luego al otro.
Responder Con Cita
  #5  
Antiguo 13-05-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Quiza el codigo del articulo que tienes en la linea de detalle?

Vamos, no se como habras hecho las relaciones entre las tablas, pero es lo mas logico que se me ocurre
Responder Con Cita
  #6  
Antiguo 13-05-2003
judoboy judoboy is offline
Miembro
 
Registrado: may 2003
Ubicación: Valencia
Posts: 139
Poder: 22
judoboy Va por buen camino
He probado esto

Código:
 SentenciaSqlStock:='UPDATE ARTICULOS SET
 STOCK_OBRA_RECIBIR=STOCK_OBRA_RECIBIR-
"'+UModuloDatos.TL_P_ProvCANTIDAD.AsString+'" 
WHERE CODIGO_ARTICULO="'+UModuloDatos.TableArticulosCODIGO_ARTICULO.Value+'"';
Y lo que me hace es actualizarme el útimo articulo con la suma de las cantidades de los otros. Mientras que los demás no actualiza nada.

Última edición por judoboy fecha: 13-05-2003 a las 10:27:37.
Responder Con Cita
  #7  
Antiguo 13-05-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Buff, pos ahora creo que me he perdido yo. No se lo que quieres hacer exactamente

A ver si nos lo puedes explicar un tanto mejor

P.D. : mira de editar tu mensaje anterior y poner en varias lineas el codigo que has puesto, que lo de la barra de desplazamiento horizontal es un coñazo para seguir en codigo. Gracias
Responder Con Cita
  #8  
Antiguo 13-05-2003
judoboy judoboy is offline
Miembro
 
Registrado: may 2003
Ubicación: Valencia
Posts: 139
Poder: 22
judoboy Va por buen camino
Intentaré explicarme mejor.
Quiero actualizar el stock de mis artículos cuando estén servidos.
Pero no consigo hacerlo bien.

Muestro en un DBGrid los artículos para que el usuario los vea.
Y a continuación filtro por el pedido para realizar solo el UPDATE de los artículos de dicho pedido.

Ejemplo: tengo un pedido con 2 artículos uno tiene cantidad 4 y el otro tiene cantidad 5.

Si hago el UPDATE sin la clausula where me actualiza ambos artículos con la suma de las dos cantidades es decir, en 9 artículos más.

Mientras que si hago el UPDATE con la clásula where que puesto antes, solo me actualiza el 2º artículo pero con la suma de las dos cantidades, es decir, me suma 9 al stock del 2º artículo, pero en el 1º no hace nada.

Lo que quiero es que me actualice 4 en el 1º artículo y 5 en el 2º,
en este ejemplo claro está.


Me he explicado mejor?
Responder Con Cita
  #9  
Antiguo 13-05-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Si utilizas un SGBD, te recomiendo los triggers. Si no, no te quedara mas remedio que hacer un bucle recorriendo todo el detalle del pedido y, por cada linea, lanzar el SQL de Update con la clausula where del codigo del articulo. Pero claro, este bucle no puedes (un consejo mio, claro) ponerlo en ningun evento del TDataSet o TDataSource, mejor ponlo en un boton o al validar la pantalla o algo por el estilo.

Espero que ahora si arreglemos tu problema

P.D. : gracias por editar el post
Responder Con Cita
  #10  
Antiguo 13-05-2003
jceluce jceluce is offline
Miembro
 
Registrado: may 2003
Ubicación: Mar del Plata - Argentina
Posts: 29
Poder: 0
jceluce Va por buen camino
Yo haría algo así:

Data:=DBGLineasPedido.DataSource.DataSet;
Data.First;

while not (Data.Eof) do

begin
//HAGO en UPDATE

//Supongo que es CODIGO de Articulo está en la primer columna
//del DBGrid (DBGLineasPedido.Fields[0].Value)

Query1.Sql.Text := 'UPDATE ARTICULOS SET STOCK=STOCK+"'+DBGLineasPedido.Fields[2].Value+'"' +
'WHERE CODIGO_ARTICULO = "'+DBGLineasPedido.Fields[0].Value+'"';




Data.Next;

end;
__________________
Saludos

Javier
Responder Con Cita
  #11  
Antiguo 13-05-2003
judoboy judoboy is offline
Miembro
 
Registrado: may 2003
Ubicación: Valencia
Posts: 139
Poder: 22
judoboy Va por buen camino
Jceluce, te quiero, ya me funciona bien
Responder Con Cita
  #12  
Antiguo 13-05-2003
judoboy judoboy is offline
Miembro
 
Registrado: may 2003
Ubicación: Valencia
Posts: 139
Poder: 22
judoboy Va por buen camino
Por cierto no os pongais celosos los demás: cadetill, roman..
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


La franja horaria es GMT +2. Ahora son las 02:50:16.


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