Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Sumar campo cuando este asi actualizado (https://www.clubdelphi.com/foros/showthread.php?t=68160)

rufo 28-05-2010 00:58:05

Sumar campo cuando este asi actualizado
 
Que tal amigos espero que me echen la mano en esto que no se por donde empezar resulta que tengo un campo en mi BD que es no. de piezas en el cual le ingreso datos ahora cuando me llegan de nuevo piezas tengo que actualizar la informacion pero lo que en si yo quiero que cuando yo actualize me sume las piezas ya existentes con las que acabo de ingresar, la verdad nose como hacerle, ya que esto lo quiero hacer cuando actualizo este campo. Que se vaya sumando por medio de una consulta o que se yo pero al momento de agregar nuevas entradas, bueno espero me echen la mano y de antemano gracias.

Casimiro Notevi 28-05-2010 01:57:40

Código:

update tabla
set piezas = piezas + new.piezas

¿Es eso lo que quieres?, con más información se te puede ayudar mejor.

rufo 28-05-2010 18:02:57

Gracias amigo por responder pero me he quedado igual, en si quiero hacer algo parecido asi:

PIEZAS
10

PIEZAS (ingresadas)
5

PIEZAS
15

En si es lo que quiero hacer es que en mi tabla ya tengo el campo PIEZAS con datos entonces cuando ingreso en un edit las PIEZAS que acaban de llegar que cuando almacene esta actualizacion me sume con las que ya tengo mas con las que acabo de introducir para que mas adelante me sirvan para ver sus existencias reales, de antemano gracias.

Casimiro Notevi 28-05-2010 18:16:55

Es como te he mostrado antes. ¿Qué parte es la que no sabes hacer?, ¿qué llevas hecho y cómo?

rufo 28-05-2010 18:22:05

Gracias amigo de nuevo por responder, te pongo mi codigo que tengo

Código Delphi [-]
procedure TENTRADAS.sButton4Click(Sender: TObject);
begin
 if messagedlg('Los datos son correctos?',mtconfirmation,[mbok,mbcancel],0)=mrok then
   begin
      with dm1.T_productos do
      begin
         active:=true;
         SetKey;
         FieldByName('id_productos').Asinteger := strtoint(slabel9.Caption);
         GotoNearest;
         edit;
         fieldbyname('id_productos').asinteger:=strtoint(slabel9.Caption);
         fieldbyname('fecha_entrada').asstring:=sedit2.Text;
         fieldbyname('piezas).asstring:=sedit1.Text;
         fieldbyname('id_proveedor').asinteger:=v_idproveedor;
         post;
         refresh;
      end;
      begin
       update;
       dm1.T_productos;
       set dm1.T_productos.FieldByName('piezas')= dm1.T_productos.FieldByName('piezas') + dm1.T_productos.FieldByName('new.piezas');
      end;
   end;
Te pongo todo este codigo por que es en el boton que actualiza mi informacion, ahora asi como me lo pusiste anteriormente me marcaba error de codigo entonces lo puse asi como te lo muestro pero me marcar igual el error ya que mi tabla la tengo en Datamodule por esa razon es como yo llamo a la tabla bueno espero que me ayudes o me comentes en donde esta mi error y gracias de nuevo.

Lenny 28-05-2010 18:39:03

Primero, Eliges la Tabla a editar:
Código Delphi [-]
Table1.Edit;

Luego Seleccionas de donde y con que editaras la Info:
Si apuntas a un DBEdit, con un Edit donde ingresaras la cantidad a ingresar:
Código Delphi [-]
DBEdit1.Text:= FloatToStr (StrToFloat(DBEdit1.Text) + StrToFloat (Edit1.Text));

Directo a la Tabla:
Código Delphi [-]
Table1.FieldbyName('PIEZAS').AsFloat := StrToFloat (Edit1.Text);

Luego Ingresas el Registro:
Código Delphi [-]
Table1.Post;

O sea quedaria algo asi:
Código Delphi [-]
 
Table1.Edit;
DBEdit1.Text:= FloatToStr (StrToFloat(DBEdit1.Text) + StrToFloat (Edit1.Text));
Table1.Post;

Al menos asi lo hago yop, y me resulta impecable sin errores.

Saludos!!!

rufo 28-05-2010 19:07:21

Gracias amigo por responderme, tengo una duda en respecto como le hago directo a la tabla como le hago para sumar ya que en los ejemplos que me mostraste no aparece la suma o es la misma linea de codigo que aparece al ejemplo que me muestras:

Código:


DBEdit1.Text:= FloatToStr (StrToFloat(DBEdit1.Text) + StrToFloat (Edit1.Text));

Tambien te mando mi codigo como va quedando para que me digas si esta bien.

Código:

  begin
      dm1.T_productos.Edit;
      dm1.T_productos.FieldbyName('piezas').AsString := sEdit1.Text;

      dm1.T_productos.Post;
      end;

Gracias de antemano.

ecfisa 28-05-2010 20:04:59

Hola rufo.
Sumar las piezas ingresadas en el Edit al campo piezas, es tán sencillo
como lo expuso casimiro (stock_anterior:= stock_anterior + cantidad_ingresada)

En tu caso creo que sería:
Código:

  with dm1.T_productos do
    FieldByName('piezas'):= FieldByName('Piezas')+
      IntToStr(EditX.Text);  // donde, EditX = Piezas ingresadas

Veo en tu código algo que te va a ocasionar problemas, supongamos que estas
manejando un stock de una farmacia.

Estas usando GotoNearest para posicionarte en el registro que buscas.
Supongamos ahora que te equivocas al ingresar el id_producto del producto.
GotoNearest se situará en el registro que más se acerque al buscado sin avisar de ningún error.

Esto puede ocasinar por ejemplo, que ingresar una compra de Aspirina te incremente
las existencias de Viagra (ocasionando un irremediable paro del programa :D )

Saludos.

Lenny 28-05-2010 20:16:14

Sorry, no deje el ejemplo completo, seria algo asi:

Código Delphi [-]
procedure TForm1.Guardar(Sender: TObject);
begin
Table1.Edit;
Table1.FieldbyName('TOTAL').AsFloat:= Table1.FieldbyName('TOTAL').AsFloat +  StrToFloat (Edit1.Text);
Table1.Post;
end;

Tu Código deveria quedar asi:

Código Delphi [-]
procedure TForm1.Guardar(Sender: TObject);
begin
dm1.T_productos;
dm1.T_productos.FieldbyName('piezas').AsFloat:= dm1.T_productos.FieldbyName('piezas').AsFloat +  StrToFloat (sEdit1.Text);
dm1.T_productos.Post;
end;

Prueba y nos cuentas!!!, quizás la respuesta es algo "Caníbal" o "Rebuscado", no pretendo reinventar la rueda, pero soy de los que Código que resulta, Repite y esta forma hasta el día de hoy no me ha dado ningún problema, si alguien tiene alguna mejor forma (obviamente hay alguna mejor y menos rebuscado) que nos ilumine y así aprendemos todos...

Saludos...

rufo 28-05-2010 20:34:10

Hijole amigos pues resulta que ya ingrese el codigo pero al momento de oprimir el boton actualizar me hace el calculo mal es decir si yo tengo 100 piezas me aparece 20 les pongo en si el codigo de nuevo para que vean si estoy cometiendo un error

Código:

procedure TENTRADAS.sButton4Click(Sender: TObject);
begin
 if messagedlg('Los datos son correctos?',mtconfirmation,[mbok,mbcancel],0)=mrok then
  begin
      with dm1.T_productos do
      begin
        active:=true;
        SetKey;
        FieldByName('id_productos').Asinteger := strtoint(slabel9.Caption);
        GotoNearest;
        edit;
        fieldbyname('id_productos').asinteger:=strtoint(slabel9.Caption);
        fieldbyname('fecha_entrada').asstring:=sedit2.Text;
        fieldbyname('piezas').asstring:=sedit1.Text;
        fieldbyname('id_proveedor').asinteger:=v_idproveedor;
        post;
        refresh;
      end;
      begin
      dm1.T_productos.Edit;
      dm1.T_productos.FieldbyName('piezas').AsFloat:= dm1.T_productos.FieldbyName('piezas').AsFloat +  StrToFloat(sEdit1.Text);
      dm1.T_productos.Post;
      end;
  end;

De antemano gracias.

rufo 28-05-2010 20:45:47

Amigos ya quedo resuelto, les explico que estaba mal al momento de actualizar ya que estaba sumando el mismo registro con el mismo, les pongo como ya quedo mi codigo ya correcto.

Código:

procedure TENTRADAS.sButton4Click(Sender: TObject);
begin
 if messagedlg('Los datos son correctos?',mtconfirmation,[mbok,mbcancel],0)=mrok then
  begin
      with dm1.T_productos do
      begin
        active:=true;
        SetKey;
        FieldByName('id_productos').Asinteger := strtoint(slabel9.Caption);
        GotoNearest;
        edit;
        fieldbyname('id_productos').asinteger:=strtoint(slabel9.Caption);
        fieldbyname('fecha_entrada').asstring:=sedit2.Text;
        //fieldbyname('piezas').asstring:=sedit1.Text;  //Aqui es donde estaba mal ya que estaba sumando asi mismo
        fieldbyname('id_proveedor').asinteger:=v_idproveedor;
        post;
        refresh;
      end;
      begin
      dm1.T_productos.Edit;
      dm1.T_productos.FieldbyName('piezas').AsFloat:= dm1.T_productos.FieldbyName('piezas').AsFloat +  StrToFloat(sEdit1.Text);
      dm1.T_productos.Post;
      end;
  end;

Gracias de antemano por sus contestacion.

Lenny 28-05-2010 20:56:00

Edito el comentario, solucionaste el problema antes de darte una solución, Cualquier duda estaré atento...

Saludos...

rgstuamigo 28-05-2010 21:17:03

Me alegro que lo hubieras solucionado amigo rufo,;). Pero creo que hubiera sido mejor hacer la actualizacion usando un Trigger.;).
Saludos...:)


La franja horaria es GMT +2. Ahora son las 07:53:02.

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