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 13-11-2012
DOS DOS is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 173
Poder: 13
DOS Va por buen camino
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
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.
Responder Con Cita
  #2  
Antiguo 13-11-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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
Responder Con Cita
  #3  
Antiguo 13-11-2012
DOS DOS is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 173
Poder: 13
DOS Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 13-11-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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
Responder Con Cita
  #5  
Antiguo 13-11-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 13-11-2012
DOS DOS is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 173
Poder: 13
DOS Va por buen camino
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
Responder Con Cita
  #7  
Antiguo 13-11-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 13-11-2012
DOS DOS is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 173
Poder: 13
DOS Va por buen camino
Ok, me tira un error en 'CustNo', cual es su significado?
tal vez ayude esta imagen
Responder Con Cita
  #9  
Antiguo 13-11-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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 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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 13-11-2012 a las 20:42:39.
Responder Con Cita
  #10  
Antiguo 13-11-2012
DOS DOS is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 173
Poder: 13
DOS Va por buen camino
jajaja, ok, pasa
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;
Responder Con Cita
  #11  
Antiguo 13-11-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 28-11-2012 a las 07:10:49.
Responder Con Cita
  #12  
Antiguo 13-11-2012
DOS DOS is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 173
Poder: 13
DOS Va por buen camino
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.
Responder Con Cita
  #13  
Antiguo 14-11-2012
DOS DOS is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 173
Poder: 13
DOS Va por buen camino
Gracias ecfisa, excelente ayuda.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Sumar campo de una tabla daragor MySQL 2 14-09-2012 00:50:59
cantidad de decimales en campo float look SQL 5 04-10-2010 18:53:54
Campo seleccionado y sumar sisne SQL 0 06-04-2010 04:42:37
Sumar campo que no existe... HombreGordo Conexión con bases de datos 4 05-08-2008 17:01:32
Sql sumar campo sum() teclilla SQL 27 17-02-2008 18:50:15


La franja horaria es GMT +2. Ahora son las 16:05:39.


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