Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   ¿Como realizar bien un UPDATE? (https://www.clubdelphi.com/foros/showthread.php?t=344)

judoboy 12-05-2003 18:57:02

¿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.

judoboy 12-05-2003 19:01:33

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.

roman 12-05-2003 19:44:49

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

judoboy 13-05-2003 09:14:14

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.

__cadetill 13-05-2003 09:48:13

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

judoboy 13-05-2003 10:11:16

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.

__cadetill 13-05-2003 10:25:18

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

judoboy 13-05-2003 10:45:13

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?

__cadetill 13-05-2003 13:23:27

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 :D

jceluce 13-05-2003 13:36:44

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;

judoboy 13-05-2003 13:59:06

Jceluce, te quiero, ya me funciona bien :D :D :cool:

judoboy 13-05-2003 14:02:38

Por cierto no os pongais celosos los demás: cadetill, roman..;)


La franja horaria es GMT +2. Ahora son las 00:30:59.

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