Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   actualizar un campo de una tabla en sql desde delphi (https://www.clubdelphi.com/foros/showthread.php?t=54163)

josi 10-03-2008 23:28:22

actualizar un campo de una tabla en sql desde delphi
 
tengo un campo que se llama exsistencia de una tabla ARTICULOS como hacer para que en el campo exsistencia se le vaya sumando las cantidades de entradas de la tabla ENTRADA D ARTICULOS.

mamaro 10-03-2008 23:43:59

Hola
 
Yo normalmente utilizo Firebird, y en estos casos incluyo un disparador en la tabla Entradas, como te lo detallo:

Tabla Articulo:
Ident integer (clave primaria)
Nombre varchar(30)
Existencia integer

Tabla Entrada:
ident integer (clave primaria)
Fecha timestamp
Articulo integer (clave foránea a tabla Articulo)
Cantidad integer

Agrego el siguiente disparador para ésta última tabla en el evento AFTERINSERT:
Código SQL [-]
begin
  update ARTICULO
  set existencia=existencia+new.cantidad;
end

.. y si se permiten modificar las entradas se puede crear éste disparador en el evento AFTERUPDATE:
Código SQL [-]
begin
  update ARTICULO
  set existencia=existencia+(new.cantidad-old.cantidad);
end

.. y si se permite eliminar entradas, en el evento BEFOREDELETE:
Código SQL [-]
begin
  update ARTICULO
  set existencia=existencia-old.cantidad;
end

Yo normalmente pongo en la base de datos todo aquel código que representa una "regla del negocio" (eso que nunca cambia y que probablemente lo voy a utilizar desde varios lugares).

Bueno saludos y espero te sirva. :)

josi 11-03-2008 00:00:01

dime
 
este cod es en delphi?
lo que pasa es soy un bebe en esto escusame

jachguate 11-03-2008 05:37:20

El código es SQL y mamaro sugería que usaras triggers.

Si queres hacerlo desde delphi, podrías poner un componente TQuery (o el equivalente de la capa de acceso a datos que uses, por ejemplo TADOQuery si conectas con ADO) y poner en su propiedad SQL:

Código SQL [-]
update articulo
  set existencia = existencia + :delta
 where IdArticulo = :id

Y ejecutarlo cada vez que te sea necesario con delphi así:

Código Delphi [-]
procedure TdmInventario.ActualizaExistencias(AIDArticulo: Integer; ADelta: Double);
begin
  qActualizaExistencia.ParamByName('id').AsInteger := AIDArticulo;
  qActualizaExistencia.ParamByName('delta').AsFloat := ADelta;
  qActualizaExistencia.ExecSQL;
end;

Algunas bibliotecas no publican un método ParamByName en el query directamente, sino dentro de su propiedad Params.

Hasta luego.

;)


La franja horaria es GMT +2. Ahora son las 05:29:26.

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