Spanish SQL, me borra cosa rara

TheFalcon

Active Member
Licensed User
Longtime User
Buenas, ante todo, hace mucho que no paso por aqui. Estoy desesperado con una cosa rara que me pasas.
Yo copio unas .DB del PC al movil , se copian perfectamente en el Movil, pero cuando inicializo las tablas SIEMPRE em da error en 1 y me la borra de la carpeta Files
Deduzco que em dice que no Existe por que me la borra, pero no se por que solo es esa tabla de 5.
B4X:
android.database.sqlite.SQLiteCantOpenDatabaseException: Cannot open database '/storage/emulated/0/Android/data/Fjo.MandoCadesoft/files/TDesplegables.db' with flags 0x10: File /storage/emulated/0/Android/data/Fjo.MandoCadesoft/files/TDesplegables.db doesn't exist

Las inicializó asi , y antes de inicializar estan las 5 en Files

B4X:
        SQL_Familias.Initialize(File.DirDefaultExternal, "TFamilias.db", False)
        SQL_Articulos.Initialize(File.DirDefaultExternal, "TArticulos.db", False)
        SQL_Salones.Initialize(File.DirDefaultExternal, "TSalones.db", False)
        SQL_Dependientes.Initialize(File.DirDefaultExternal, "TDependientes.db", False)
        Sql_Desplegables.Initialize(File.DirDefaultExternal, "TDesplegables.db", False)

Se inicializan automáticamente en el Activity_Create.

Da igual el orden en que las descargue o las Inicialice, siempre es la misma tabla.

B4X:
Descargando: http://192.168.1.5:1980/Cadesoft/E1/TFamilias.db
Archivo descargado: TFamilias.db

Descargando: http://192.168.1.5:1980/Cadesoft/E1/TSalones.db
Archivo descargado: TSalones.db

Descargando: http://192.168.1.5:1980/Cadesoft/E1/TArticulos.db
Archivo descargado: TArticulos.db

Descargando: http://192.168.1.5:1980/Cadesoft/E1/TDesplegables.db
Archivo descargado: TDesplegables.db

Descargando: http://192.168.1.5:1980/Cadesoft/E1/TDependientes.db
Archivo descargado: TDependientes.db
Tamaño del TFamilias: 24576
Tamaño del TSalones: 147456
Tamaño del TArticulos: 327680
Tamaño del TDependientes: 16384
Tamaño del TDesplegables: 24576
Todas las descargas completadas
** Activity (main) Pause, UserClosed = false **
** Activity (ventas) Create (first time) **
Error occurred on line: 508 (Ventas)
android.database.sqlite.SQLiteCantOpenDatabaseException: Cannot open database '/storage/emulated/0/Android/data/Fjo.MandoCadesoft/files/TDesplegables.db' with flags 0x10: File /storage/emulated/0/Android/data/Fjo.MandoCadesoft/files/TDesplegables.db doesn't exist
    at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:275)
    at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:218)
    at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:535)
    at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:222)
    at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:214)
    at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:1163)
    at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:1148)
    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:1034)
    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:981)
    at anywheresoftware.b4a.sql.SQL.Initialize(SQL.java:44)
    at Fjo.MandoCadesoft.ventas$ResumableSub_Activity_Create.resume(ventas.java:904)
    at Fjo.MandoCadesoft.ventas._activity_create(ventas.java:752)
    at java.lang.reflect.Method.invoke(Native Method)
    at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:732)
    at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:351)
    at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:255)
    at java.lang.reflect.Method.invoke(Native Method)
    at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:157)
    at Fjo.MandoCadesoft.ventas.afterFirstLayout(ventas.java:105)
    at Fjo.MandoCadesoft.ventas.access$000(ventas.java:17)
    at Fjo.MandoCadesoft.ventas$WaitForLayout.run(ventas.java:83)
    at android.os.Handler.handleCallback(Handler.java:959)
    at android.os.Handler.dispatchMessage(Handler.java:100)
    at android.os.Looper.loopOnce(Looper.java:232)
    at android.os.Looper.loop(Looper.java:317)
    at android.app.ActivityThread.main(ActivityThread.java:8927)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:681)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:915)
Caused by: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14 SQLITE_CANTOPEN): Could not open database
    at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
    at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:237)
    ... 28 more
** Activity (ventas) Resume **

a ver si me podéis orientar por que no se que puede estar fallándome, es muy raro. Gracias
 

hatzisn

Expert
Licensed User
Longtime User
Use HxD hex editor and compare the downloaded file with the original.
 

hatzisn

Expert
Licensed User
Longtime User
Use HxD hex editor and compare the downloaded file with the original.

Also please use English. It is the english forum.
 

hatzisn

Expert
Licensed User
Longtime User
Also use File.DirInternal.
 

TheFalcon

Active Member
Licensed User
Longtime User
It doesn't say there's an error, it says “does not exist.”
How do you download it?

The file is copied from the PC, it copies all 5 files, but when it comes to initializing ONLY that database, it deletes it from the Files folder on the mobile and then gives the error.
 

josejad

Expert
Licensed User
Longtime User
Hola TheFalcon, qué de tiempo.
A primera vista parece que sería un problema de permisos (por las carpetas que usas), pero si copia las otras y van bien...
¿Qué línea es esta?: Error occurred on line: 508 (Ventas). ¿Es la línea Sql_Desplegables.Initialize(File.DirDefaultExternal, "TDesplegables.db", False) o es otra?

Una curiosidad, mezclas un poco los conceptos de tablas y bd. ¿Por qué usas 5 bases de datos y no una con todas las tablas?

saludos,
 

TheFalcon

Active Member
Licensed User
Longtime User
Hola TheFalcon, qué de tiempo.
A primera vista parece que sería un problema de permisos (por las carpetas que usas), pero si copia las otras y van bien...
¿Qué línea es esta?: Error occurred on line: 508 (Ventas). ¿Es la línea Sql_Desplegables.Initialize(File.DirDefaultExternal, "TDesplegables.db", False) o es otra?

Una curiosidad, mezclas un poco los conceptos de tablas y bd. ¿Por qué usas 5 bases de datos y no una con todas las tablas?

saludos,
buenas Jose, cuanto tiempo un placer como siempre, copio las 5 por que es un programa que uso en PC y esas 5 bases de datos tienen distintas tablas que ya uso en el programa, y las paso al movil para agilizar las consultas, por eso son varias. el error viene a la hora de inicializar esa Tabla que me da error, las otras las inicializa sin problemas, y da igual en que orden las copie o inicialice siempre es ESA base de datos. justo cuando da ESE ERROR , hago una parada y la tabla existe en FILES del movil, pero por lo visto al ir a inicializarla me la borra del movil y da el error
 

josejad

Expert
Licensed User
Longtime User
Y algo del código podrías poner?
 

vecino

Well-Known Member
Licensed User
Longtime User
Yo la he abierto normalmente, sin ningún problema, ¿será que tienes puesto el nombre distinto en las mayúsculas/minúsculas?
 

TheFalcon

Active Member
Licensed User
Longtime User
Y algo del código podrías poner?
Aqui los descargo del PC a la carpeta Defaultexternal del movil, aunque me vale cualquiera. y Todo OK

B4X:
Sub DescargarArchivo(indice As Int)
    empresa = "E1"
    If indice >= totalArchivos Then
        Log("Todas las descargas completadas")
        ToastMessageShow("Programación Finalizada",False)
       
        btIniciar.Enabled = True 'hasta que no descargo todo no se habilita si le di a programar
        Return
    End If
   
    Dim f As String = archivos_descargar(indice)
    Dim j As HttpJob
    j.Initialize(f, Me)
   
    Dim url As String = "http://" & servidor_Config & ":1980/Cadesoft/" & empresa & "/" & f
    Log("Descargando: " & url)
   
    ' Timeout largo para archivos grandes
    j.GetRequest.Timeout = 60000
    j.Download(url)
End Sub




B4X:
    If j.Success Then
        ' Guardar archivo
   
        File.Copy2(j.GetInputStream, File.OpenOutput(File.DirDefaultExternal, j.JobName, False))
        Log("Archivo descargado: " & j.JobName)
       
        Log("Tamaño del TFamilias: " & File.Size(File.DirDefaultExternal, "TFamilias.db"))
        Log("Tamaño del TSalones: " & File.Size(File.DirDefaultExternal, "TSalones.db"))
        Log("Tamaño del TArticulos: " & File.Size(File.DirDefaultExternal, "TArticulos.db"))
        Log("Tamaño del TDependientes: " & File.Size(File.DirDefaultExternal, "TDependientes.db"))
        Log("Tamaño del TDesplegables: " & File.Size(File.DirDefaultExternal, "TDesplegables.db"))
       
   
        ' Lanzar la siguiente descarga
        archivosDescargados = archivosDescargados + 1
        DescargarArchivo(archivosDescargados)
    Else
        Log("Error descargando " & j.JobName & ": " & j.ErrorMessage)
    End If
    j.Release





En el Main:
    If File.Exists(File.DirDefaultExternal, "TSalones.db") = True Then tabla_salon = True Else tabla_salon = False
      
    If File.Exists(File.DirDefaultExternal, "TArticulos.db") = True Then tabla_articulo = True Else tabla_articulo = False
      
    If File.Exists(File.DirDefaultExternal, "TFamilias.db") = True Then tabla_familia = True Else tabla_familia = False
      
    If File.Exists(File.DirDefaultExternal, "TDesplegables.db") = True Then tabla_desplegable = True Else tabla_desplegable = False
  
    If File.Exists(File.DirDefaultExternal, "TDependientes.db") = True Then tabla_Depend = True Else tabla_Depend = False
  
  
    If File.Exists(File.DirDefaultExternal, "TConfiguracion.db") = True Then Tabla_Configuracion = True Else Tabla_Configuracion = False

 
    Log("Tamaño del TFamilias: " & File.Size(File.DirDefaultExternal, "TFamilias.db"))
    Log("Tamaño del TSalones: " & File.Size(File.DirDefaultExternal, "TSalones.db"))
    Log("Tamaño del TArticulos: " & File.Size(File.DirDefaultExternal, "TArticulos.db"))
    Log("Tamaño del TDependientes: " & File.Size(File.DirDefaultExternal, "TDependientes.db"))
    Log("Tamaño del TDesplegables: " & File.Size(File.DirDefaultExternal, "TDesplegables.db"))
    Log("Tamaño del TConfiguracion: " & File.Size(File.DirDefaultExternal, "TConfiguracion.db"))

Luego en el Modulo que los Uso En su activity create


B4X:
        SQL_Familias.Initialize(File.DirDefaultExternal, "TFamilias.db", False)
        SQL_Articulos.Initialize(File.DirDefaultExternal, "TArticulos.db", False)
        SQL_Salones.Initialize(File.DirDefaultExternal, "TSalones.db", False)
        SQL_Dependientes.Initialize(File.DirDefaultExternal, "TDependientes.db", False) 'v10.8
        Sql_Desplegables.Initialize(File.DirDefaultExternal, "TDesplegables.db", False) 'v2. 2026
        SQL1.Initialize(File.DirDefaultExternal, "TConfiguracion.db", False)

y aquí me da el error al Inicializar Desplegables, añadi una nueva TConfiguracion y también la recoge e inicializa bien.

PD:Si quito INICIALIZARLA desde Activity create, peor la Inicializo cuando la voy a usar me da el mismo error. siempre al inicializarla

Pasa una cosa curiosa, que no tiene nada que ver pero em choca, si DESINSTALO LA APP y la instalo me genera las bases de datos automáticamente.
 
Last edited:

josejad

Expert
Licensed User
Longtime User
si DESINSTALO LA APP y la instalo me genera las bases de datos automáticamente
Esto es raro, debería pasar si el último parámetro de Initialize fuera TRUE

Del tutorial de SQL
The SQL1 object will only be initialized once when the process starts.
In our case we are creating it in the sd card. The last parameter (CreateIfNecessary) is True so the file will be created if it doesn't exist.

¿Puedes poner a TRUE el initialize de la tabla que te falla? No debería dar error aunque la tabla debería estar vacía.

If j.Success Then
No deberías tener este evento, deberías hacerlo con un Wait for. Prueba a descargarlas correctamente:

Descargar varios elementos:
Sub Activity_Create(FirstTime As Boolean)
   DownloadMany(Array("http://www.google.com", "http://duckduckgo.com", "http://bing.com"))
End Sub

Sub DownloadMany (links As List)
   For Each link As String In links
     Dim j As HttpJob
     j.Initialize("", Me) 'name is empty as it is no longer needed
     j.Download(link)
     Wait For (j) JobDone(j As HttpJob)
     If j.Success Then
       Log("Current link: " & link)
       Log(j.GetString)
     End If
     j.Release
   Next
End Sub


 
Last edited:

TheFalcon

Active Member
Licensed User
Longtime User
Si pongo a True, me la crea al inicializarla pero me da error por que no encuentra la Tabla que intento consultar.
Probé con Waitfor y tampoco, compruebo cuando se descarga hasta el tamaño y tiene.

He probado a ANTES de inicializarla hacer una copia yinicializar esa y nada.
B4X:
    If File.Exists(File.DirDefaultExternal, "TDesplegables.db") = True Then
        File.Copy(File.DirDefaultExternal, "TDesplegables.db", File.DirDefaultExternal, "TDesplegables2.db")
end if

Voy a probar a crear la Base de datos de 0. a ver si tiene algo raro por que no es normal
 
Top