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)
-   -   StackOverFlow pero no lo entiendo. (https://www.clubdelphi.com/foros/showthread.php?t=5614)

Letty 27-11-2003 14:26:40

StackOverFlow pero no lo entiendo.
 
Hola!:
Mi problema es el siguiente:
Tengo una tabla llamada producción:
- NIF_Empleado
-Cod_Encargo
-Fecha
estos tres eran clave
-Cantidad
-Precio
-Importe

Con los campos que ahí véis. Resulta que en onChange de Cantidad puse el siguiente código:

with DtMod_Calculados.Cons_Ejecuciones do
begin
SQL.Clear;
SQL.Add('Update Produccion set Importe = Cantidad*Precio where NIF_Empleado = :Empleado and Cod_Encargo = :Encargo and Fecha = :Fecha');
ParamByName('Empleado').AsString:= DtMod_Adail.Tb_ProduccionNIF_Empleado.Value;
ParamByName('Encargo').AsString:= DtMod_Adail.Tb_ProduccionCod_Encargo.Value;
ParamByName('Fecha').AsDateTime:= DtMod_Adail.Tb_ProduccionFecha.Value;
DtMod_Adail.Tb_Produccion.CachedUpdates:= true;
DtMod_Adail.Tb_Produccion.active := true;
ExecSQL;
DtMod_Adail.Tb_Produccion.CachedUpdates:= false;
DtMod_Adail.Tb_Produccion.active := true;
end;

Si no pongo lo de CachedUpdates no me guarda los cambios, no sé por qué razón, y si lo pongo, al insertar una producción no pasa nada (aunk a veces no me la inserta bien) pero al modificar cantidad, me pone stackoverflow y lo k hace es volver a llamarse, como si el campo cantidad volviera a cambiar de valor... alguien sabe por qué hace esto? Como puedo arreglarlo¿? Muchas gracias por adelantado y hasta pronto.

marcoszorrilla 27-11-2003 15:48:09

Lo que tienes es una llamada recursiva, por lo tanto comienza a llamarse a si misma hasta desborda la pila, por un mal planteamiento.

Lo que debes de hacer calculado es el Importe que sería igua a Cantidad por precio, por lo tanto en el OnChange de Cantidad y precio habría que llamar a un procedimiento o función que devolviera dicho resultado, por lo tanto un cambio en cualquiera de los dos campos motivaría un recalculo del importe, claro que si utilizas SQL, podrías evitar programar el evento OnChange y calcularlo en la propia sentencia SQL.

Un Saludo.

Letty 27-11-2003 19:17:07

Muchas gracias por contestar, pero es que Importe me hace falta tenerlo y no como campo calculado por otras razones y cuando hago esto mismo en otra tabla me funciona perfectamente.

"Lo que debes de hacer calculado es el Importe que sería igua a Cantidad por precio, por lo tanto en el OnChange de Cantidad y precio habría que llamar a un procedimiento o función que devolviera dicho resultado, por lo tanto un cambio en cualquiera de los dos campos motivaría un recalculo del importe, claro que si utilizas SQL, podrías evitar programar el evento OnChange y calcularlo en la propia sentencia SQL." K haría realmente esa función¿? en sql... como podría hacer k cambiara el importe sin ser asi?


¿alguien podría plantearme otra solución?, ¿cual es el motivo de que haya recursividad? ¿hay otra forma de k me guarde los cambios sin el cached updates? Muchas gracias.


La franja horaria es GMT +2. Ahora son las 07:35:59.

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