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)
-   -   campos calculado "Stack over Flow" (https://www.clubdelphi.com/foros/showthread.php?t=35106)

chileno 31-08-2006 18:02:00

campos calculado "Stack over Flow"
 
hola de nuevo!!!

esto se me escapa de mis manos asi que recurro a todos que me hechen una mano, la situcion es la sgte:

Código Delphi [-]
procedure TDM.tbPrecioCalcFields(DataSet: TDataSet);
begin
  if not (DataSet.State = dsInsert) then
  begin
    DataSet.FieldByName('Total_Cargos').Value :=       tbCargos.FieldByName('embalaje').Value +                                                tbCargos.FieldByName('comision').Value +
                                                  tbCargos.FieldByName('otros').Value    +
                                                  ObtenerValor(Dataset.FieldByName('id_tipo_precio').Value);
    DataSet.FieldByName('Precio_Venta').Value := ((tbUnidad_Venta.FieldValues['Costo'] * DataSet.FieldByName('Total_Cargos').Value)/100) +
                                                   tbUnidad_Venta.FieldValues['Costo'];
    DataSet.FieldByName('embalaje').Value     := (tbUnidad_Venta.FieldValues['Costo'] * tbCargos.FieldByName('embalaje').Value)/100;
    DataSet.FieldByName('comision').Value     := (tbUnidad_Venta.FieldValues['Costo'] * tbCargos.FieldByName('comision').Value)/100;
    DataSet.FieldByName('otros').Value        := (tbUnidad_Venta.FieldValues['Costo'] * tbCargos.FieldByName('otros').Value)/100;
    DM.miSQL.Close;
    DM.miSQL.SQL.Clear;
    DM.miSQL.SQL.Add('select transporte from tipo_precio where id_tipo_precio = ' + floattostr(Dataset.FieldByName('id_tipo_precio').Value));
    DM.miSQL.Open;
    DataSet.FieldByName('trasporte').Value   :=  (tbUnidad_Venta.FieldValues['Costo'] * DM.miSQL.Fields[0].Value)/100;
    DM.miSQL.Close;
    DM.miSQL.SQL.Clear;
    DM.miSQL.SQL.Add('select utilidad from tipo_precio where id_tipo_precio = ' + floattostr(Dataset.FieldByName('id_tipo_precio').Value));
    DM.miSQL.Open;
    DataSet.FieldByName('utilidad').Value     := (tbUnidad_Venta.FieldValues['Costo'] * DM.miSQL.Fields[0].Value)/100;
  end;

el problema surge cuando modifico el campo atravez de un campo de busqueda asoaciado a un dbgrid y me lanza el sgte mensaje "Stack over Flow".... cualquier sugerencia es de ayuda !!!

Héctor Randolph 31-08-2006 18:33:41

Seguramente el evento tbPrecio.OnCalcFields se está llamando recursivamente y se desborda la pila.

Una posible solución es que dentro del código desactives el evento para que no se dispare nuevamente al modificar la tabla de precios.

Código Delphi [-]
procedure TDM.tbPrecioCalcFields(DataSet: TDataSet);
begin
   tbPrecio.OnCalcFiels:=nil;//desactivas el evento para evitar recursividad
 
   {....tú código ....}

   tbPrecio.OnCalcFields:=tbPrecioCalcFields;//Lo activas nuevamente antes de salir
end;

Saludos

ramiretor 31-08-2006 18:50:07

Hola
¿Estás seguro de no hacer una división sobre cero o algo similar?

Saludos

chileno 31-08-2006 18:50:49

hola hector....

donde estas para invitarte una cerveza bien helada......:D

era justo lo que necesitaba...gracias:)

Héctor Randolph 31-08-2006 19:49:52

Cita:

Empezado por chileno
donde estas para invitarte una cerveza bien helada......

Gracias, tomaré una bien helada a tu salud. Así me la recetó el doctor ;)


La franja horaria es GMT +2. Ahora son las 08:25:17.

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