FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Actualizar BD Sqlite Android
Muy buenos días a todos.
Tengo un pequeño proyecto hecho en Firemonkey (Delphi 10Seattle), la cual usa una BD Sqlite que obtiene los datos iniciales de un Servidor DataSnap en un equipo Windows Server 2008 x64 con Firebird-2.5.5.26952_0 también x64, un servidor FTP con una IP pública y sus respectivos puertos en escucha. Otras herramientas que uso son: 1- KataKuntur v2.5.2, data modeler para SQLite, Jean Mazuelos 2- SQLite Administrator v0.8.3.2, Orbmuk2 La funcionalidad es así, al instalar la aplicación el usuario manualmente tiene que ejecutar una utilidad que consulta e inserta del servidor DataSnap a SQLite todos los registros de las tablas a usar, (Clientes, Productos) y funcione localmente desde entonces, sin consultar o enviar datos al servidor DataSnap (esto es a causa de la muy mala conexión a internet de las operadoras móviles en mi ciudad/país). Básicamente la app obtiene los datos iniciales, luego los usuarios hacen inserciones, consultas y/o modificaciones en las tablas, todos en la BD del dispositivo; hasta acá todo bien y no hay inconvenientes. Cada dispositivo tiene datos nuevos cargados en SQLite (fichar nuevo cliente, cargar pedidos de ventas) que al término de la jornada o recorrido, los usuarios envían manualmente al servidor DataSnap los datos pendientes y obtienen los registros iniciales de nuevo para el próximo día siempre usando esa utilidad de la aplicación. El problema está en cómo actualizar la BD Sqlite del dispositivo cuando haya cambios del diseño de la BD, como por ejemplo uno o varios campos nuevos, o una tabla nueva sin desinstalar la aplicación y/o perder datos. Los cambios lo hago usando KK y exporto el diagrama la cuál genera la BD.sqlite, este añado al proyecto Firemonkey y al construir adjunta al APK. El nuevo APK es alojada al servidor FTP para su descarga, los usuarios lo obtienen e instalan en sus dispositivos pero no actualiza la BD antigua. Buscando en internet encontre estos foros que por cierto están en portugués 1: Fórum Programador Mobile - Android - IOS - Delphi programadormobile.com.br/viewtopic.php?f=24&t=383&p=1317 2: [ANDROID/IOS]Atualizar DB sqlite pelo aplicativo programadormobile.com.br/novo/2015/05/26/androidiosatualizar-db-sqlite-pelo-aplicativo/ Ambos foros describen una idéntica lógica/solución la cuál es crear un procedure en delphi para así validar por cada campo algún cambio de estructura, pero no prevé los datos. Además, el mismo autor admite que podría haber otra solución más eficiente y es por eso que me atreví a escribir al foro y robarles su preciado tiempo a todos ya que soy muy novato en todo esto (Delphi y SQLite). La idea es hacer una utilidad como DBComparer para SQLite que funcione en Android e iOS dentro de la misma aplicación o cómo una utilidad externa a ella, de ahí a que herramientas usar y cómo hacerlo es mi gran duda. Agradezco de antemano y que tengan buen resto de jornada. |
#2
|
||||
|
||||
Hay diversas formas, todo depende de lo que realmente te venga mejor. Independientemente de la base de datos que uses, sistema operativo y lenguaje de programación.
Es un tema que se ha tratado en diversas ocasiones, a ver si podemos encontrarlo. Aunque básicamente es añadir las sentencias que necesites a un script o como registros en una tabla. En tu software tienes una opción para detectar si hay nuevas sentencias a ejecutar, las procesas y marcas cuál es la útima ejecutada. Esto último puedes hacerlo de mucha formas también, ya sea un fichero con la última sentencia ejecutada, o una tabla donde guardas las que se ejecutan: create tbActualizaciones (id integer primary key, sentencia varchar(2000)... etc.) según necesites. Al iniciar tu software compruebas la última sentencia ejecutada (el id de esa tabla) y miras si hay nuevas sentencias a ejecutar en un script, por ejemplo, o en una base de datos auxiliar, etc... En fin, es un tema muy amplio que permite una variedad bastante amplia, a cada uno le viene mejor una forma u otra.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#3
|
|||
|
|||
Muy buenos días de nuevo.
Hola Casimiro, voy a hacer cómo dices y les comento que tal me fue. Gracias por tu tiempo y un abrazo. |
#4
|
|||
|
|||
Muy buenos dias a todos.
Primeramente pido disculpas por tardar tanto... Quiero compartir con uds. como pude solucionar mi problema descrito. Casimiro, efectivamente funciona tu sugerencia... aunque me topé con varios obstáculos, uno de ellos fue que no se puede ELIMINAR, MODIFICAR la estructura de un campo o renombrar una tabla en SQLite (si estoy equivocado, favor corregir). Bueno, lo que hice fue lo siguiente: 1- Cree otra BD (MASTER) con una tabla BD_CAMBIOS, en la cuál estan cargados los scripts y/o datos de actualizacion para la BD instalada en el dispositivo (TARGET). 2- Cree un tabla BD_CAMBIOS en la BD TARGET también, en la cual se guardarán como logs los cambios hechos (ultimo_id). 2- Al inicializar la app, elimino la BD MASTER del dispositivo si existe y extraigo el nuevo desde el APK, conecto a dicha BD. 3- Hago un select de la tabla BD_CAMBIOS y tiene como condicional el ultimo_id del TARGET, si tiene registros entra en un bucle y con un QueryAux ejecuto los scripts. Les agradezco mucho por su tiempo y un abrazo. |
#5
|
||||
|
||||
En tu caso también puedes crear una tabla nueva con los campos y cambios que necesites. Pasas los datos de la tabla vieja a la nueva. Finalmente borras la tabla vieja y renombras la nueva con el nombre de la vieja.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
SQLite is Locked? Problema con SQLite. | pokexperto1 | Conexión con bases de datos | 6 | 05-06-2016 23:24:08 |
Wifi, Android y SQLite | Jose Roman | Varios | 3 | 10-09-2015 15:36:30 |
SQLite y Max(ID) | FGarcia | Tablas planas | 1 | 24-04-2014 18:44:27 |
Android SQLite pantalla negra | Davidecr | Desarrollo en Delphi para Android | 9 | 17-03-2014 19:41:09 |
SQLite | mblascog | Conexión con bases de datos | 2 | 19-02-2011 20:51:00 |
|