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?
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.
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.
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?
#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.
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
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.
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.