Spanish Db corrupta

Soporte

Member
Licensed User
Longtime User
Hola a todos,

Tengo una corrupcion en un archivo .db recibido via ftp.
El error que se produce al abrir la db es: database disk image is malformed

Las medidas que tomo para que el proceso vaya bien son dos:
1. Cuando envio y recibo alguna Db de sqlite intento que el dispositivo no vaya a dormir utilizando los procesos:

B4X:
Sub KeepAlive
    awake.KeepAlive(False)
    awake.PartialLock
End Sub

Sub ReleaseKeepAlive
    awake.ReleaseKeepAlive
    awake.ReleasePartialLock
 
End Sub

2. Ademas cierro las bases de datos y procuro tambien cerrar los cursores abiertos.


Preguntas:
1. ¿ Qué mas cosas tengo que tener en cuenta para evitar la corrupcion ?
2. ¿ Puede ser causa de la corrupcion que el usuario pulse back o apague o similar, como por ejemplo que el usuario cambie a otra aplicacion durante el envio ?
3. ¿ Qué haceis vosotros para asegurar lo más posible que el proceso de envio de informacion se realiza satisfactoriamente ?

Gracias de antemano
 
Last edited:

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola Soporte:

Como no lo especificas, no se de que forma haces la recepcion, y el echo de que digas:

2. ¿ Puede ser causa de la corrupcion que el usuario pulse back

Me hace entender que lo tienes en el cuerpo de la aplicación, si es asi, haz la recepción del archivo en un servicio y asi aunque salgas de la aplicación, etc, seguirá bajando el fichero. Una vez bajado, puedes parar el servicio.

Saludos
 

Soporte

Member
Licensed User
Longtime User
BgSoft,

Pues asi es: todo esta en el cuerpo del programa. Ya veo lo que puede pasar asi. Asi que segun dices, los envios o recepciones de datos han de hacerse con servicios.
Realmente la corrupcion esta en el envio: los datos (.db) enviados, en algun caso, quedan corruptos.
¿ Ves tu algun otro motivo para la corrupcion ?

Gracias por tu respuesta.
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola Soporte:

Si el fichero a bajar o subir es grande, o si el envio o recepción puede ser interrumpido por el usuario saliendo o cambiando de aplicación, lo mejor es poner ese código de envio y/o recepcion en un servicio, asi evitaras que se corte ese envio/recepcion.
Un servicio es dificil que el sistema operativo lo pare, asi que haciendolo en un servicio aseguras ese envio o recepcion. Y digo que es dificil que lo pare, por que en casos muy raros podria pararlo (lo he comentado en algun post de este foro y del general en ingles) ademas, si sabes que has acabado de recibir o enviar puedes parar el servicio, o cambiar una variable. Esta misma variable la puedes emplear en el Service_Destroy y si esta variable te dice que no se efectuó la carga o descarga, volver a activarla.

Saludos
 

Soporte

Member
Licensed User
Longtime User
Gracias BgSoft, eres muy amable. Te agradezco sinceramente lo que me indicas: lo probaré.
 
Top