Spanish Problema al guardar datos rápidamente en SqLite

Discussion in 'Spanish Forum' started by carlos7000, Jul 9, 2019.

Tags:
  1. carlos7000

    carlos7000 Active Member Licensed User

    Hola a todos.

    Estoy tratando de guardar en un base de datos, algunos de los datos que obtengo del gps.

    Con el siguiente código no tengo problemas.

    Code:
    Query = "INSERT INTO `GpsData`(`Id`,`UnixTime`,`Lat`,`Lon`,`Speed`,`Bearing`) VALUES (NULL,'" & UnixTime & "','" & Lat & "','" & Lon & "','" & Speed & "','" & Bearing & "');"
    Sql1.ExecNonQuery(Query)
    infortunadamente el código se ejecuta muy lento. En promedio toma un 1 segundo su ejecución.

    Buscando la forma de mejorar el rendimiento escribi este nuevo codigo:

    Code:
    Sql1.BeginTransaction
    Sql1.ExecNonQuery2(
    "INSERT INTO GpsData VALUES(NULL,?,?,?,?,?)"Array As String(UnixTime, Lat, Lon, Speed, Bearing))   
    Sql1.EndTransaction
    El código se ejecuta rápidamente. En promedio el tiempo de ejecución es de 50 Milésimas de segundo, pero al revisar la Base de datos, no hay datos.

    Ni en el teléfono, ni en el log, hay registro de algún error.

    Cual puede ser el problema?
     
  2. musaso

    musaso Member Licensed User

    Yo Utilizo DBUtils, me va bastante bien.

    Code:
    Public Sub AnadirLugar
       
    Dim ListOfMaps As List
       ListOfMaps.Initialize
      
       
    Dim m As Map
       m.Initialize
       m.Put(
    "UnixTime""1234"'Ejemplo
       m.Put("Lat""lugar"'Lugar
       m.Put("Lon""Lo que sea")
       --------- etc, etc
       ListOfMaps.Add(m)
       DBUtils.InsertMaps(BDatos, Tabla, ListOfMaps) 
    'Nombre de tabla.....
    End Sub
     
  3. f0raster0

    f0raster0 Active Member Licensed User

  4. carlos7000

    carlos7000 Active Member Licensed User

    Hola

    Como hay mas usuarios que hablan ingles, coloque ese post en el foro de dicho idioma, con la esperanza de que si no recibía respuesta en español, por lo menos lo haría en ingles.

    La respuesta del foro en ingles, me sirvió para refrescar la memoria, no recordaba la linea Sql1.TransactionSuccessful, pero aun el programa almacena la información muy lentamente.

    Saludos.
     
  5. José J. Aguilar

    José J. Aguilar Well-Known Member Licensed User

    Has probado en distintos teléfonos? A ver si el problema fuera el tuyo, es raro que no sea algo que se comentara ya en el foro sí es algo común.
    Sí quieres sube un proyecto de prueba y probamos y te decimos resultados
     
  6. IdasI4A

    IdasI4A Member Licensed User

    Me parece que te falta poner
    Code:
    SQL1.TransactionSuccessful
    Justo despues del INSERT. Hay que indicar que la Transacción ha tenido éxito.

    Como pone en la ayuda:
    Code:
    SQL1.BeginTransaction
    Try
        
    'block of statements like:
        For i = 1 to 1000
            SQL1.ExecNonQuery(
    "INSERT INTO table1 VALUES(...)
        Next
        SQL1.TransactionSuccessful
    Catch
        
    Log(LastException.Message) 'no changes will be made
    End Try
    SQL1.EndTransaction
     
  7. Enrique Gonzalez R

    Enrique Gonzalez R Well-Known Member Licensed User

    abrir una transaccion y cerrarla para un solo INSERT (o cualquier sentencia que afecte la base) es un OVERKILL, las transacciones sirven para 2 o mas inserts, si hacen el trabajo mas rapido pero para una sentencia debe ser el mismo tiempo.

    si esta lento, es probable que tu base no este optimizada o tengas muchos datos o este corrupta, prueba la velocidad con una base nueva
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice