Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Desarrollo en Delphi para Android (https://www.clubdelphi.com/foros/forumdisplay.php?f=57)
-   -   Actualizar motor sqlite en android (https://www.clubdelphi.com/foros/showthread.php?t=96471)

cancun 05-11-2023 21:12:54

Actualizar motor sqlite en android
 
Hola

¿Alguien sabe si es posible actualizar el motor de SQLite en Android?

Pregunto porque en una App uso una BD que hice con DB Browser usando campos de tipo Integer,Text,Blob,Real y Numeric (que son los que muestra DB Browser) y la App funciona perfectamente en Android 8.1, pero vi que SQLITE Expert maneja mas tipos de datos como Boolean, Date, etc y modifique los campos de la BD y ahora la App se cuelga cuando trato de abrir una tabla, si dejo los campos como antes, funciona otra vez, por eso asumo que el problema es la versión de SQLite que trae android 8.1

Si alguien sabe como solucionar esto le agradecere su ayuda.

Saludos

Casimiro Notevi 06-11-2023 09:28:34

No puedes hacer nada, salvo que tengas la opción de "Actualizar el sistema" a una versión más nueva.
La otra opción es tener el dispositivo "rooteado", así podrías intentarlo, aunque tampoco sería fácil.
Los problemas de ese tipo son habituales, por eso hay que diseñar la BD y usar selects y demás que cumplan con sistemas obsoletos, porque no sabes qué versiones tendrán los posibles usuarios.

cancun 06-11-2023 18:45:55

Gracias por responder Casimiro, lo suponía ya que no encontré en ningun lado como hacerlo, (había una con la versión 3.5 atrsada por cierto por medio de root), tendré que hacerlo como comentas, por compatibilidad ya que el programa se usara en muchos equipos con diferentes versiones de android, la otra opción que podría hacer, es usar otra base de datos, por allí lei que firebird es una buena opción, voy a investigar, saludos.

delphi.com.ar 07-11-2023 04:16:44

Por lo poco que vi, SqlExpert es un IDE/GUI para usar Sqlite, pero no un motor. De ser así, en tu caso dudo mas que SqlExpert corrompa el archivo a que que falle la libSqlite. Solo con el fin de probar, te recomiendo hacer lo siguiente
  1. Modificar/editar el archivo en SqlExpert
  2. Abrir el archivo generado con sqlite desde la consola.
  3. Ejecutar .schema y copiar el resultado.
Si la consola falla, entonces SqlExpert no está haciendo algo bien, y el archivo no es compatible con libSqlite.
Si no falla, con ese resultado podrías generar la base datos desde cero desde la consola, garantizando compatibilidad.

Por otro lado, si SelExpert fuera un motor/librería/fork de sqlite, desconozco en Android, pero hablando del Linux, y considerando que uno es hijo del otro, capaz te sirva saber lo siguiente:
Sqlite es un motor de una librería única. o sea que funcionalmente es solo requiere un archivo en el sistema operativo. Esto implica que para que tu aplicativo pueda funcionar, solo debería encontrar en su search path, la librería esperada. Y como siempre el search path, se inicia por la ruta de ejecución, para " Actualizar motor sqlite", como dice el asunto del hilo, solo deberíamos copiar la librería en la ruta de instalación. Obviamente esto es exclusivo de nuestra aplicación.

Saludos.

Casimiro Notevi 07-11-2023 10:58:58

Cita:

Empezado por delphi.com.ar (Mensaje 553163)
... para " Actualizar motor sqlite", como dice el asunto del hilo, solo deberíamos copiar la librería en la ruta de instalación. Obviamente esto es exclusivo de nuestra aplicación.

Es una buena idea, habrá que probarlo.

cancun 08-11-2023 18:51:17

Hola Federico

Lo que entiendo es que la base de datos no se corrompe al usar uno u otro editor SQLite, como comentaba el SQLite que trae integrado el Android 8.1 como es obvio es antiguo y por lo mismo se bloquea la App, pero si regreso los campos al formato anterior funciona.
Lo que comentas del motor supongo es algo similar a MySQl que requiere una DLL para que se ejecuten los programas en Windows, ahora en Android cual vendría siendo el equivalente de la "DLL" para SQLite? En la página de SQLite vi que hay unos archivos para Android pero ni idea de como usarlos.

delphi.com.ar 08-11-2023 19:18:42

Cita:

Empezado por cancun (Mensaje 553207)
Lo que comentas del motor supongo es algo similar a MySQl que requiere una DLL para que se ejecuten los programas en Windows, ahora en Android cual vendría siendo el equivalente de la "DLL" para SQLite? En la página de SQLite vi que hay unos archivos para Android pero ni idea de como usarlos.

No, MySql requiere un motor que corra como servidor, y la librería "que usan los programas en Windows" es un cliente con el que te conectas a ese servidor. Sqlite es una base de datos sin servidor, simplemente usas un archivo mediante una librería. Podríamos decir algo similar a Access en Windows.
En Linux dependiendo de la distribución, la librería suele ser libsqlite3.so. Donde se usa la práctica común de dejar una archivo por versión y un symlink genérico a ese nombre. Por lo que vi en Android, parece ser libsqliteX.so, pero como es dependiente de la arquitectura hay un binario por cada arquitectura soportada.

Cita:

Empezado por cancun (Mensaje 553207)
Lo que entiendo es que la base de datos no se corrompe al usar uno u otro editor SQLite, como comentaba el SQLite que trae integrado el Android 8.1 como es obvio es antiguo y por lo mismo se bloquea la App, pero si regreso los campos al formato anterior funciona.

Es simplemente olfato, pero me huele que no tienes problemas de versiones, sino con otra cosa. Esto sobre todo fundamentado en que Sqlite es muy flexible con los tipos de datos, el juego de tipos es muy limitado.

Cita:

SQLite uses a more general dynamic type system. In SQLite, the datatype of a value is associated with the value itself, not with its container. The dynamic type system of SQLite is backwards compatible with the more common static type systems of other database engines in the sense that SQL statements that work on statically typed databases work the same way in SQLite. However, the dynamic typing in SQLite allows it to do things which are not possible in traditional rigidly typed databases. Flexible typing is a feature of SQLite, not a bug.
Referencia


¿Pudiste abstaer código de la aplicación como para ver en que momento se bloquea?

cancun 08-11-2023 23:10:43

>>¿Pudiste abstaer código de la aplicación como para ver en que momento se bloquea?

Si claro, cuando abre el Query o sea cuando llega a quConsulta.Open; se bloquea, ni siquiera da error.

Hay manera de que mi App utilice el libsqliteX.so (descargado de la pagina de SQLite) y tener acceso de esa manera a la última versión? Bastará con que se copie en la misma carpeta de la APP?

Saludos

Casimiro Notevi 09-11-2023 09:39:52

No debería bloquearse, simplemente mostrar un mensaje de error.
Eso suena raro.

delphi.com.ar 09-11-2023 16:33:18

Cita:

Empezado por cancun (Mensaje 553212)
Si claro, cuando abre el Query o sea cuando llega a quConsulta.Open; se bloquea, ni siquiera da error.

Ok.. ¿y cuál es la consulta?... ¿Cuántos registros tiene la tabla/resultado?


Cita:

Empezado por cancun (Mensaje 553212)
Hay manera de que mi App utilice el libsqliteX.so (descargado de la pagina de SQLite) y tener acceso de esa manera a la última versión? Bastará con que se copie en la misma carpeta de la APP?

No tengo experiencia en Android, pero en sistemas operativos similares con que esté en la misma carpeta del ejecutable es suficiente.

cancun 10-11-2023 04:04:04

Cita:

Empezado por delphi.com.ar (Mensaje 553227)
Ok.. ¿y cuál es la consulta?... ¿Cuántos registros tiene la tabla/resultado?

Como dije al principio, el problema no es la consulta (es un select sencillo y devuelve menos de 100 registros), el problema es al asignarle longitud a un campo Text o usar algun campo de tipo Boolean, Date, etc.

Voy a hacer la prueba copiando el archivo que descargue para Android de la página de SQLite (agregandolo en Deployment) para ver si funciona, en caso de que no, estoy pensando probar Firebird con Zeoslib


La franja horaria es GMT +2. Ahora son las 11:07:52.

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