Aplicacin se traba

que tal a todos en el foro,

Quiero comentarles el problema que tengo con una aplicacin desktop y ver si alguien me podra ayudar o indicarme a que se debe.

La aplicacin cuenta con base de datos SQLite, la accin que realizo hace que se trabe a cierto punto que no responde a nada y tengo que forzar a terminar la ejecucin, esto pasa una vez compilada la aplicacin.

Una vez ejecutada la aplicacin y yo cambio la fecha del sistema operativo (Windows o MacOS) es cuando se presenta el problema y no se a que se deba,
alguien sabe por que?

Gracias de antemano por la ayuda.

¿Cambia la fecha del sistema operativo?
Sospecho que para crear havic con cualquier software.

-Creado con el Traductor de Google-

Hola,

Aparte de lo de cambiar la fecha… ¿se traba sólo con la aplicación compilada o también cuando realizas esa misma operación desde el debugger en el IDE? ¿Has probado a cambiar la fecha del sistema y probar ejecutando la app desde el IDE para intentar encontrar el fallo?

Por lo general, cuando se quedan así de colgadas las aplicaciones (no responden) se suele deber a que en el código existe algún tipo de bucle infinito del que no se encuentra condición para salir.

Por lo demás, con los pocos datos que das… no creo que sea posible ayudar mucho más.

Javier

hola Javier,

He realizado a probar a cambiar la fecha del sistema ejecutando la app desde el IDE y no me causo problema, solo cuando esta compilada.

He descartado que se cuelgue debido al cdigo por algn tipo de bucle, ademas si no cambio la fecha del sistema con la ejecucin de la app compilada trabaja perfectamente.
No se que esta pasando.

Gracias por su apoyo

Tal vez el programa usa fechas para algún cálculo y a la hora que se cambia afecta su trabajo.
¿No tienes algún código que identifique si está corriendo en modo debug que sea diferente cuando esté compilado?

Alberto DePoo,

no entendi tu pregunta, sin embargo las fechas las uso para consultas a la Base de datos usandolas como parametros.

La pregunta se refera a que si tienes:

#If DebugBuild Then #Else #Endif
y por lo tanto tu app se comporte diferente en modo debug que al compilarla.

Si usas fechas para consultas en la base de datos y cambias la fecha de tu equipo, tal vez ests entrando a un caso no considerado en tu cdigo por la diferencia en las fechas de la base de datos y la fecha del sistema.

Estas son slo ideas generales, slo alguien con mas experiencia que pueda ver tu cdigo o una app demo que puedas hacer que tenga este problema podr comentar mas sobre otras cosas donde puedes buscar la falla.

gracias por las ideas Alberto DePoo, no cuento con cdigo que identifique si esta corriendo en modo debug

Mencionas originalmente que la accin que realizas hace que la aplicacin se trabe, es siempre en una accin particular? tal vez puedas pegar el cdigo de esa accin o tratarlo de reproducir en una pequea app demo y compartirla.

Seguro alguien podr darte alguna idea si puede consultar y revisar el cdigo.

por que cambia la fecha del sistema mientras la app est funcionando? si eso es lo que causa el error, por que no cancela la app, cambia la fecha del sistema y reinicia la app?

Alberto DePoo, no es una accin en particular, yo detecte que fue en el cambio de la fecha del sistema. lo que pudiese decir es que es cuando ejecuta alguna consulta a la base de datos

Bernardo, he realizado ese escenario de cerrar la app antes de cambiar la fecha y persiste el problema pero cabe resaltar que no en todos los casos, realizando una misma accin.

He revisado cada una de las consultas que tengo a la base de datos y he detectado donde se ha trabado…

dim ef as Double = 0
dim rscorte as RecordSet
rscorte=App.base.SQLSelect("select pagos.forma, sum(pagos.cantidad), pagos.fecha, paciente.nombre, pagos.cantidad from paciente,moroso,pagos where pagos.idpac=moroso.id and moroso.idpac=paciente.id and fecha = '" + fi + "' group by paciente.nombre, pagos.cantidad,pagos.forma,pagos.fecha")
if rscorte.EOF then
else
  While not rscorte.EOF
    if rscorte.IdxField(1).StringValue="Efectivo" then
       ef = ef + rscorte.IdxField(5).DoubleValue
       rscorte.MoveNext
    end if
  wend
  rscorte.Close
end if

al ejecutar la app paso a paso llega la linea de comparacin if rscorte.IdxField(1).StringValue="Efectivo" then
y al dar el siguiente paso ya no lo da y se traba.

He ejecutado la consulta en sqlite y trabaja bien, la columna 1 que me devuelve el query corresponde a la que estoy comparando, sin embargo a pesar que si tenga el valor “Efectivo” no realiza la comparacin y se traba.

No me manda ningun tipo de error, lo que tengo que hacer es terminar la ejecucin.

Probe en los escenarios de cambiar la fecha del sistema y sin cambiarla y ahi se traba, pudiese pensar en el bucle que dijo Javier, pero es en la comparacin

Mi conocimiento de base de datos y Xojo no estn a nivel para encontrar un problema que se pueda explicar con cambio de fechas. Lo nico que puedo ver que “me llama la atencin” es que en el cdigo tienes:

and fecha = '"

y las dems referencias las tienes como pagos.fecha

Ojal alguien te pueda dar otras ideas.

if rscorte.EOF then *** 1 else While not rscorte.EOF if rscorte.IdxField(1).StringValue="Efectivo" then <-------- 2 ef = ef + rscorte.IdxField(5).DoubleValue rscorte.MoveNext end if wend rscorte.Close end if

Por dar un par de “palos de ciego”:

[code]dim ef as Double = 0
dim rscorte as RecordSet

rscorte=App.base.SQLSelect(“select pagos.forma, sum(pagos.cantidad), pagos.fecha, paciente.nombre, pagos.cantidad from paciente,moroso,pagos where pagos.idpac=moroso.id and moroso.idpac=paciente.id and fecha = '” + fi + “’ group by paciente.nombre, pagos.cantidad,pagos.forma,pagos.fecha”)

if rscorte <> Nil then
While not rscorte.EOF //hasta fin de fichero

if rscorte.IdxField(1).StringValue<>"Efectivo" then //¿contiene "Efectivo"?
   rscorte.MoveNext       //NO
else                      //SI 
   ef = ef + rscorte.IdxField(5).DoubleValue   //Sumamos
end if                    //Fin comprobacion "Efectivo"

rscorte.MoveNext     Vamos al siguiente registro

wend //Fin mientras rscorte no alcance el fin de fichero
rscorte.close
else //rscorte.esta en fin de fichero.
rscorte.Close //Cerramos
end if[/code]

espero no haber metido mucho la pata, pero creo que muestra lo que intento decir.

Peter, si no contiene “Efectivo” hace un rscorte.MoveNext y al salir del ‘If’ hace otro rscorte.MoveNext, lo dara doble no?

Si, cambia el primer .movenext por
ef = ef + 0

Deberia funcionar

Otra cosa es que rscorte.IdxField(1) no espere el valor de “Efectivo” o no lo contenga

gracias Peter y Alberto,

es correcta la afinacin del cdigo, lo he probado y verificado paso a paso su ejecucin, comparando el que tenia no recorra al siguiente registro si no entraba en la validacin.

Saludos,
Eder