Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Recorrer Registros de dos Tablas comprobando STOCK (https://www.clubdelphi.com/foros/showthread.php?t=71916)

Lenny 18-01-2011 17:06:13

Recorrer Registros de dos Tablas comprobando STOCK
 
Buenas, espero puedan orientarme con una duda.

Utilizo este codigo (Algo rebuscado, pero hace bien la pega):

Código Delphi [-]
While Not BDatos.PRODUCTOSTAB.Eof do
begin
BDatos.PRODUCTOSTAB.Edit;
BDatos.PRODUCTOSTAB.FieldbyName('STOCK').AsFloat:=
BDatos.PRODUCTOSTAB.FieldbyName('STOCK').AsFloat -
BDatos.PRODUCTOSFTAB.FieldbyName('STOCK').AsFloat;
BDatos.PRODUCTOSTAB.Next;
BDatos.PRODUCTOSFTAB.Next;
end;
BDatos.PRODUCTOSTAB.First;
BDatos.PRODUCTOSFTAB.First;
end;
end;

Lo que hace es recorrer todos los registros de dos TABLAS los cuales pueden ser varios (previamente filtrados en ambas TABLAS, siendo identicos) de la TABLA1 (STOCK Disponible) descontando la cantidad indicada en la TABLA2 (cantidad necesaria), esto lo utilzo para formulas y descuento de materias primas en el STOCK, funciona perfecto, la pregunta, ¿Como puedo saber antes de ejecutar el descuento si el STOCK es suficiente? Por ejemplo, de 5 materias primas la tercera es inferior a lo solicitado me lanse algun mensaje de aviso, se entiende???

y la segunda, cuando recorro los registros y se vuelve a posicionar en el primero, se ve como desciende y vuelve a subir, hay alguna manera de que esto no sea visible???

Gracias de antemano...

PD: Utilizo Delphi 2010, Zeos 7.0.0, MySQL

Lenny 18-01-2011 18:25:19

Solcucionado 1/2
 
Me autorrespondo:

Código Delphi [-]
procedure TPRODUCCION.Button1Click(Sender: TObject);
begin
While not BDatos.PRODUCTOSTAB.Eof Do
Begin
if BDatos.PRODUCTOSTAB.FieldbyName('STOCK').AsFloat <
   BDatos.PRODUCTOSFTAB.FieldbyName('STOCK').AsFloat then begin
    ShowMessage('El STOCK no es suficiente, elija una cantidad menor.');
    BDatos.PRODUCTOSTAB.First;
    BDatos.PRODUCTOSFTAB.First;
    abort;
 end;
BDatos.PRODUCTOSTAB.Next;
BDatos.PRODUCTOSFTAB.Next;
end;
BDatos.PRODUCTOSTAB.First;
BDatos.PRODUCTOSFTAB.First;

While Not BDatos.PRODUCTOSTAB.Eof do
begin
BDatos.PRODUCTOSTAB.Edit;
BDatos.PRODUCTOSTAB.FieldbyName('STOCK').AsFloat:=
BDatos.PRODUCTOSTAB.FieldbyName('STOCK').AsFloat -
BDatos.PRODUCTOSFTAB.FieldbyName('STOCK').AsFloat;
BDatos.PRODUCTOSTAB.Next;
BDatos.PRODUCTOSFTAB.Next;
end;
BDatos.PRODUCTOSTAB.First;
BDatos.PRODUCTOSFTAB.First;
end;

El primer Bucle compara entre las dos tablas (independiente de la cantidad de registros) si la cantidad solicitada en la TABLA2 (FORMULA) es mayor al valor en la TABLA1 (STOCK), si la cantidad es mayor, se aborta, si la cantidad es inferior sigue con el siguiente bucle, el cual descuenta entre tablas las materias primas (STOCK) necesarias...

Solo me queda que no sean visibles los recorridos por la tabla.

No se si estoy reinventando la rueda, no dudo que existan mejores formas de hacer lo expuesto, al menos me resulta perfecto y sin errores...

Atento ante cualquier comentario estare atento, Gracias!!!!


La franja horaria es GMT +2. Ahora son las 00:19:48.

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