Aplicación se traba

  1. 2 months ago

    que tal a todos en el foro,

    Quiero comentarles el problema que tengo con una aplicación desktop y ver si alguien me podría ayudar o indicarme a que se debe.

    La aplicación cuenta con base de datos SQLite, la acción que realizo hace que se trabe a cierto punto que no responde a nada y tengo que forzar a terminar la ejecución, esto pasa una vez compilada la aplicación.

    Una vez ejecutada la aplicación 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.

  2. brian f

    Jul 3 Pre-Release Testers, Xojo Pro Chilly California

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

    -Creado con el Traductor de Google-

  3. Javier M

    Jul 4 Pre-Release Testers, Xojo Pro, Third Party Store AprendeXojo - Europe, Spain

    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

  4. 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 código por algún tipo de bucle, ademas si no cambio la fecha del sistema con la ejecución de la app compilada trabaja perfectamente.
    No se que esta pasando.

    Gracias por su apoyo

  5. Alberto D

    Jul 4 Pre-Release Testers

    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?

  6. Alberto DePoo,

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

  7. Alberto D

    Jul 4 Pre-Release Testers

    La pregunta se refería 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 estás entrando a un caso no considerado en tu código por la diferencia en las fechas de la base de datos y la fecha del sistema.

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

  8. gracias por las ideas Alberto DePoo, no cuento con código que identifique si esta corriendo en modo debug

  9. Alberto D

    Jul 4 Pre-Release Testers

    Mencionas originalmente que la acción que realizas hace que la aplicación se trabe, ¿es siempre en una acción particular? tal vez puedas pegar el código de esa acción o tratarlo de reproducir en una pequeña app demo y compartirla.

    Seguro alguien podrá darte alguna idea si puede consultar y revisar el código.

  10. Bernardo M

    is not verified Jul 4 Pre-Release Testers

    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?

  11. Edited 2 months ago

    Alberto DePoo, no es una acción 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 acción.

  12. 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 comparación 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 comparación y se traba.

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

    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 comparación

  13. Alberto D

    Jul 4 Pre-Release Testers

    Mi conocimiento de base de datos y Xojo no están a nivel para encontrar un problema que se pueda explicar con cambio de fechas. Lo único que puedo ver que "me llama la atención" es que en el código tienes:

    and fecha = '"

    y las demás referencias las tienes como pagos.fecha

    Ojalá alguien te pueda dar otras ideas.

  14. Peter H

    Jul 5 Spain
    Edited 2 months ago
    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":

    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

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

  15. Alberto D

    Jul 5 Pre-Release Testers

    Peter, si no contiene "Efectivo" hace un rscorte.MoveNext y al salir del 'If' hace otro rscorte.MoveNext, lo daría doble ¿no?

  16. Peter H

    Jul 5 Spain
    Edited 2 months ago

    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

  17. gracias Peter y Alberto,

    es correcta la afinación del código, lo he probado y verificado paso a paso su ejecución, comparando el que tenia no recorría al siguiente registro si no entraba en la validación.

    Saludos,
    Eder

or Sign Up to reply!