Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ayuda con este codigo (https://www.clubdelphi.com/foros/showthread.php?t=85539)

kurono 29-03-2014 02:33:44

ayuda con este codigo
 
hola amigos como estan les cuento que e hecho un codigo el cual me recorre una tabla de principio a fin con el objetivo que en cada registro que alla en esa tabla me escoja un valor X de un campo y me lo sume con un numero Y y luego me lo agrege en otra tabla

el codigo funciona sin error el problema esta que me esta sumando y agregando solo el ultimo registro de esa tabla no se que esta mal aqui esta el codigo que utilizo

Código Delphi [-]
while not DM.tbl_Ventas.Eof do
     begin
      DM.Pro_Existencia.Active:=False;          //esto es un procedimiento almacenado
      DM.Pro_Existencia.Parameters.ParamByName('@ARTI').Value:=DM.tbl_Ventas.FieldValues['ARTICULO'];
      DM.Pro_Existencia.Active:=True;
      DM.Pro_Existencia.ExecProc; 

      DM.tbl_Compras.Locate('ARTICULO',DM.tbl_Ventas.FieldValues['ARTICULO'],[]);// este es la tabla donde agrego la suma
      DM.tbl_Compras.Edit;
      DM.tbl_Compras.FieldByName('CantAlmacen').Value:=IntToStr(StrToInt(DM.Pro_Existencia.FieldValues['EXISTENCIA'])+    StrToInt(DM.tbl_Ventas.FieldValues['CANTIDAD']));
      DM.tbl_Compras.Post;

      DM.tbl_Ventas.Next;
      end;

kurono 29-03-2014 02:49:24

amigos e resuelto el problema con solo agregar DM.tbl_ventas.first antes del bucle while do pero acepto cualquier otra sugerencia

Código Delphi [-]
 DM.tbl_Venta.First
while not DM.tbl_Ventas.Eof do
     begin
      DM.Pro_Existencia.Active:=False;          //esto es un procedimiento almacenado
      DM.Pro_Existencia.Parameters.ParamByName('@ARTI').Value:=DM.tbl_Ventas.FieldValues['ARTICULO'];
      DM.Pro_Existencia.Active:=True;
      DM.Pro_Existencia.ExecProc; 

      DM.tbl_Compras.Locate('ARTICULO',DM.tbl_Ventas.FieldValues['ARTICULO'],[]);// este es la tabla donde agrego la suma
      DM.tbl_Compras.Edit;
     DM.tbl_Compras.FieldByName('CantAlmacen').Value:=IntToStr(StrToInt(DM.Pro_Existencia.FieldValues['EXISTENCIA'])+      StrToInt(DM.tbl_Ventas.FieldValues['CANTIDAD']));
      DM.tbl_Compras.Post;

      DM.tbl_Ventas.Next;
      end;

Casimiro Notevi 29-03-2014 11:26:56

¿Por qué no usas SQL?
Algo así (desconozco nombre de tabla y campos):
Código SQL [-]
update tabla set cantalmacen = existencias + cantidad
where articulo= ?

kurono 31-03-2014 02:49:17

porque el procedimiento que utilizo debe complir algunos criterios antes de realizar la operacion de suma pero tomare en cuenta tu sugerencia para en algun momento optimizar el codigo por ahora lo dejare tal como esta ya que funciona perfectamente

QuiqueSalamanca 31-03-2014 16:44:05

Hola Koruno:

¿Por qué no haces el update dentro del procedimiento almacenado que ejecutas? Será más rápido que por código.

Algo así:

Código SQL [-]
DECLARE @iExistencias   INT,
        @iCantidad      INT,
        @sArticulo       VARCHAR(X)


DECLARE cVentas CURSOR FOR SELECT Articulo,
                           FROM tbl_Ventas

OPEN cVentas

FETCH cVentas INTO @sArticulo

WHILE @@FETCH_STATUS = 0 
BEGIN

    --Aqui haces las comprobaciones rutinarias para hacer el UPDATE
    --e inicializas la variable @iExistencias...

    
    UPDATE tbl_Compras
       SET CantAlmacen = @iExistencias + @iCantidad
    WHERE Articulo = @sArticulo


    FETCH cVentas INTO @sArticulo  

END

CLOSE cVentas
DEALLOCATE cVentas

Saludos,
Quique.

kurono 02-04-2014 00:25:11

amigo QuiqueSalamanca muy bueno el codgo, tambien lo tomare en cuenta


La franja horaria es GMT +2. Ahora son las 14:34:11.

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