Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Error Stack Overflow al almacenar un valor 0 (cero) en MySQL (https://www.clubdelphi.com/foros/showthread.php?t=88415)

JoAnCa 03-06-2015 23:17:09

Error Stack Overflow al almacenar un valor 0 (cero) en MySQL
 
Hola a todos
Me ha sucedido algo raro que no entiendo porque es

Estoy programando en Delphi7 y conectado a MySQL con Zeos, y mediante un boton actualizo los datos en una consulta actualizable
Para actualizar los datos, segun el numero de fila, hace un calculo y alamacena el resultado, que cuando es diferente de 0, se almacena sin problemas, pero si es 0 me salta el error "Error Stack Overflow ....."

Para descartar posible error en la formula, le asigno directamente cero y tambien salta el error
Sin embargo en MySQL (usando Navicat) le escribo 0 y lo acepta como es de esperar

Alguna idea de por que sucederá esto?

Casimiro Notevi 03-06-2015 23:21:32

Podemos especular y tratar de adivinar, será mejor que pongas tu código y des más datos.

JoAnCa 03-06-2015 23:41:50

Este es el segmento de codigo del boton calcular

Código Delphi [-]
  with ModBD_Global, ModBD_Global.ztIndicadEfic do
  begin
    First;      //--- Calcular el Plan ---
    while not Eof do
    begin
      Edit;
      case ztIndicadEficFila.Value of
        2:IngPlan:=ztIndicadEficPlan.Value;   //--- Total Ingresos  ---
        3:VNPlan:=ztIndicadEficPlan.Value;    //--- Ventas Netas  ---
        4:GastPlan:=ztIndicadEficPlan.Value;  //--- Total Gastos  ---
        5:if VarIsNull(ztIndicadEficPlan.Value) then SalPlan:=0
          else SalPlan:=ztIndicadEficPlan.Value; //--- Salario ---
        6:CMPlan:=ztIndicadEficPlan.Value;    //--- Costo de Mercancias ---
        7:GMPlan:=ztIndicadEficPlan.Value;    //--- Gasto Material ---
        8:SCPlan:=ztIndicadEficPlan.Value;    //--- Servicios Comprados ---
        9:begin                               //--- VAB ---
            VAPlan:=VNPlan-(GMPlan + CMPlan + SCPlan);
            if VarIsNull(VAPlan) then VAPlan:=0;
            ztIndicadEficPlan.Value:=0.00;//VAPlan;      <--- Aqui da el error de stack overflow
          end;
       10:if (VAPlan = 0) or (VarIsNull(VAPlan)) then ztIndicadEficPlan.Value:=0      <-- y Aqui tambien si el anterior es <> de cero
          else ztIndicadEficPlan.Value:=SalPlan/VAPlan;         //--- IngMon / VAB ---
       17:ztIndicadEficPlan.Value:=(SalPlan*12.5)/100;    //--- 12.5% Seg. Soc. ---
       18:ztIndicadEficPlan.Value:=(SalPlan*12)/100;      //--- 12% Imp. Fza Trab ---
       19:ztIndicadEficPlan.Value:=SalPlan/100;           //--- 1% Imp. Territorial ---
       20:ztIndicadEficPlan.Value:=SalPlan*0.0295;        //--- Financmto OSDE ---
       23:begin                                           //--- Promedio Trabajadores  ---
           PromTrab:=ztIndicadEficPlan.Value;
           if VarIsNull(PromTrab) then PromTrab:=0;
          end;
       26:if PromTrab = 0 then ztIndicadEficPlan.Value:=0
          else ztIndicadEficPlan.Value:=VAPlan/PromTrab;  //--- Productividad ---
       27:if PromTrab = 0 then ztIndicadEficPlan.Value:=0
          else ztIndicadEficPlan.Value:=SalPlan/PromTrab; //--- Salario Medio ---
       28:if VAPlan = 0 then ztIndicadEficPlan.Value:=0
          else ztIndicadEficPlan.Value:=SalPlan/VAPlan;   //--- Salario / VAB ---
      end;
      Post;
      Next;
    end;

  end;

Pero ya les digo, si todos los valores son diferentes de cero, funciona bien

Casimiro Notevi 04-06-2015 01:25:59

¿Lo has seguido paso a paso para ver qué valor tiene en ese punto?

JoAnCa 04-06-2015 14:18:40

Pues si, lo he seguido
Y cuando es 0 salta el error, si es diferente sigue el curso normal y no da error

La verdad me tiene bastante intrigado este problemita

JoAnCa 04-06-2015 14:48:49

Solucionado
 
Ya encontre el origen del problema
Es que uso un campo calculado y tenia puesto esto

Código Delphi [-]
  if Dataset['Plan'] <> 0 then Dataset['Pcto']:=(Dataset['Real'] / Dataset['Plan'])*100
  else Dataset['Plan']:=0;

en lugar de esto

Código Delphi [-]
  if Dataset['Plan'] <> 0 then Dataset['Pcto']:=(Dataset['Real'] / Dataset['Plan'])*100
  else Dataset['Pcto']:=0;

Me di cuenta porque el problema comenzo cuando cree ese campo, revisé el codigo del evento y encontre el problema


La franja horaria es GMT +2. Ahora son las 02:38:02.

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