Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Sumar a un campo una cantidad (https://www.clubdelphi.com/foros/showthread.php?t=81422)

DOS 13-11-2012 15:03:26

Sumar a un campo una cantidad
 
Seguramente lo que solicito es algo tan simple como el titulo, pero me canse de googlear y probar opciones y no encuentro al solución, asi que vamos al punto.
Tengo dos tablas creadas en Paradox, producto y stocK(tomese como cantidad total de un producto)

productos:
Cod_prod
Cod // este lo pone el cliente, solo para identificarlo
Descripcion
importecompra
importeventa

stock:
Cod-stock
Cod_proucto //relacionada con producto
Cantidad //cantidad total del producto en almacén

En Delphi7, tengo un formulario con ambas tablas, un DBGrid donde muestro todos los datos mas un campo relacionado donde se ve la cantidad de cada producto. tambien tengo un Query.

En el formulario puse un Edit y un boton, para que cargue, lo que se pone en el Edit osea seria incrementar la cantidad del stock de un producto en particular.
Hasta ahora intente cosas como estas :o
Código Delphi [-]
procedure TForm5.Button6Click(Sender: TObject);
var
a:real;
begin
Table3.First;
  while table3.Eof <> true do
    begin
    a:=StrToFloat(Edit1.Text);
    if table3Cod_producto.Value = Table1Cod_prod.Value then
     begin
      table3.Edit;
      table3.FieldByName('Cantidad').AsFloat:= table3.FieldByName('cantidad').AsFloat+a;
      table3.Post;
      table3.Next;
      end;
     end;
end;
end.

o

Código Delphi [-]
var
    a:real;
begin
    a:=StrToFloat(Edit1.Text);
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add ('Select(sum(stock.Cantidad) + a)');
Query1.SQL.Add('From stock');
Query1.SQL.Add(' where stock.Cod_producto = producto.Cod_prod');  
Query1.Active:=true;
Query1.Open;

Despues hare un formulario para cuando venda un producto descontarlo, pero seria lo mismo pero inverso.
Gracias de antemano.

Casimiro Notevi 13-11-2012 16:27:56

Veo que no has leido nada del libro que te he recomendado en otras ocasiones ;)

Si tienes una tabla tbArticulos con los campos codigoarticulo y stock... y quieres aumentar en la cantidad que sea el stock, entonces:

Código SQL [-]
update tbArticulos set stock = stock + elvalorquequieras
where codigoarticulo= :elarticuloquequieras

DOS 13-11-2012 17:39:05

Gracias Casimiro, no es que reniegue de leer el libro pero en este momento no tengo tiempo y necesito una solucion y aveces en un libro, presenta un ejemplo como el tuyo, que no se corresponde con lo que yo necesito, entonces quedo estancado.
Lo necesito resolver con las condiciones que se me presentan, lamentablemente no puedo tener una sola tabla, que con tu ayuda ya lo hubiese resuelto. Si se puede aplicar esto a las dos tablas relacionadas, tal vez sea la solucion, saludos.

Casimiro Notevi 13-11-2012 18:11:50

El problema es que estás operando de corazón a un paciente, lo estás haciendo con una sierra, un martillo y un destornillador... y dices que no has tenido tiempo de estudiar cómo se realiza una operación de corazón, y por eso lo haces así.
Es una comparación similar, para que te hagas una idea :)

ecfisa 13-11-2012 18:14:15

Hola DOS.

Yo creo que no has expresado con claridad lo que deseas hacer, por que si se trata de sumar una cantidad a un campo, esta parte de tu código ya lo está realizando:
Código Delphi [-]
  table3.Edit;  
  table3.FieldByName('Cantidad').AsFloat := table3.FieldByName('cantidad').AsFloat + a;  
  table3.Post;
Pero sospecho que el problema no pasa por ahí...

Al existir un incremento de stock podemos suponer que se trata de una compra... Describe paso a paso la operación a realizar para poder sugerirte el modo de resolverlo.

Saludos.

DOS 13-11-2012 18:50:16

ecfisa
Se que a veces es complicado explicarlo, uno da por sentado muchas cosas y el que lee no tiene por que darlas por sabido.
Es esacto como tu lo mencionas, cuando se realiza la compra de un producto el cual ya posee stock, se le incrementa a este mediante la carga en un Edit de la nueva cantidad y se ejecuta con el boton.
Stock harina 10k, se compran 15k mas, total stock 35k de harina.
Es importante recordar que son dos tablas relacionadas, tal vez este mal el if?
no le encuentro la vuelta. Gracias

ecfisa 13-11-2012 19:19:43

Hola DOS.

Entonces, y si no te entendí mál, podrías hacer algo parecido a:
Código Delphi [-]
var
  a: Double;
begin
  if not TryStrToFloat(Edit1.Text,a) then
    raise Exception.Create('El valor ingresado no es válido');
  if table3.Locate('CustNo',table1Cod_prod.Value,[loCaseInsensitive]) then
  begin
    table3.Edit;
    table3.FieldByName('Cantidad').AsFloat := table3.FieldByName('Cantidad').AsFloat + a;
    table3.Post;
  end;
end;

Saludos.

DOS 13-11-2012 20:22:21

Ok, me tira un error en 'CustNo', cual es su significado?
tal vez ayude esta imagen

ecfisa 13-11-2012 20:29:54

Cita:

Ok, me tira un error en 'CustNo', cual es su significado?
:)

No uso regularmente BDE y para no contestar desatinos, hice una prueba con tablas que vienen en Delphi y se me pasó por alto :o cambiar CustNo por Cod_proucto que creo sería el nombre del campo en tu tabla según tu primer mensaje.

En definitiva sería el nombre del campo por el que relacionas las tablas y que se encuentra en la tabla que vas a realizar el incremento de stock.


Saludos.

DOS 13-11-2012 21:05:44

jajaja, ok, pasa :D
el asunto es que ahora no tira ningun error, pero no actualiza la informacion directamente, osea cargo el numero aprieto el boton y nad. salgo e ingreso nuevamente y sas aparece el cambio, ademas ademas si el producto la cantidad esta vacio no realiza nada. probare cargando por defecto 0, a ver que pasa. Gracias.

Muestro como esta la codificacion final del boton.
Código Delphi [-]
procedure TForm5.Button6Click(Sender: TObject);
var
   a : Double;

begin
   if not TryStrToFloat(Edit1.Text,a) then
    raise Exception.Create('El valor ingresado no es válido');
  if table3.Locate('Cod_producto',table1Cod_prod.Value,[loCaseInsensitive]) then
     begin
      table3.Edit;
      table3.FieldByName('Cantidad').AsFloat:= table3.FieldByName('cantidad').AsFloat+a;
      table3.Post;
      table3.Next;
      end;
end;

ecfisa 13-11-2012 21:34:42

Hola DOS.

Hice un ejemplo muy simple que te adjunto para que puedas mirarlo con tranquilidad, las tablas _PRODUCTOS y _STOCK están incluídas con algunos datos de muestra.

Crea una carpeta, descomprimí archivos fuentes y datos allí y no deberías tener problemas para ejecutarlo, cualquier dificultad no dudes en consultar.

Saludos. :)

DOS 13-11-2012 22:00:03

creo que el problema es mayor, la relacion en las tablas es el problema para mi, creo que voy a terminar poniendo una sola tabla como dijo Casimiro. no se que hacer.
Respondi antes de ver lo que hicistes, voy a probarlo y te cuento, saludos.

DOS 14-11-2012 03:49:20

Gracias ecfisa, excelente ayuda.^\||/


La franja horaria es GMT +2. Ahora son las 13:09:44.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi