Spanish Error base de datos sqlite (Solucionado)

emvpic

Member
Licensed User
Longtime User
Hola, estoy haciendo una base de datos que cuando llego a los 129 registros me aparece un error.
android.database.CursorIndexOutOfBounds Exception:Index 0 requested, with a size of 0.

No tengo ninguna variable como tipo Short.
Leo bien la base de datos mientras tengo menos de 129 registros
 
Last edited:

emvpic

Member
Licensed User
Longtime User
B4X:
Dim numperfil As Cursor
        numperfil=SQL1.ExecQuery("SELECT * FROM perfil WHERE id =" & numero)
        numperfil.Position=0
    
        btnprueba.Text=numperfil.GetString("nombrea")
        imagen.Bitmap=LoadBitmap(File.DirAssets, btnprueba.Text & ".png")

Es un pequeño fragmento del codigo, he buscado sobre este error pero no leo nada de que a partir de 128 registros aparezca un error.
Sobre si la consulta no devuelve datos, pues ese registro no esta vacio.
 

josejad

Expert
Licensed User
Longtime User
Puede ser una tontería pero... tienes un campo llamado “nombrea” o es un error en tu código o al copiarlo?
 

emvpic

Member
Licensed User
Longtime User
me aparece un 1.
No me salta en todas las consultas el error, pero me salta casi siempre y en cada error pone un java line diferente.
Con 127 registros no me salta el error, a partir de 128 registros aparecen los errores.

Log(numperfil.RowCount
), me da como resultado un 1 cuando consulto la base con 127 registros. Con 128 registros me da como resultado un 1 y en la mayoría de consultas me sale el error, cada uno en una java line diferente
 
Last edited:

josejad

Expert
Licensed User
Longtime User
Se me ocurre que pruebes ExecQuerySingleResult en vez de ExecQuery, y que intentes leer tu base de datos con mas de 128 registros desde alguna utilidad, a ver si hay algun error. Si no, puedes subir un proyecto de prueba que reproduzca el error?
 

emvpic

Member
Licensed User
Longtime User
Queria subir un proyecto de prueba, pero me aparece un error que no me deja abrir la base de datos. o_O
android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (Sqlite code 14 SQLITE_CANTOPEN): Could not open database, (OS error - 13:permission denied)
 
Last edited:

josejad

Expert
Licensed User
Longtime User
Estás intentando abrir la base de datos desde el DirAsset? Si es así, debes copiarla antes a un directorio en el que tengas permiso de escritura.
 

emvpic

Member
Licensed User
Longtime User
Un momento que subo el proyecto, ya puedo leer la base de datos. Tenia que darle permiso para acceder a la memoria manualmente desde los ajustes del movil. Me sigue dando el error al leer los 128 registros, con 127 no hay problema. El programa se que hay muchas cosas por mejorar para hacerlo mas eficiente, pero ahora lo que me interesa es lo de la base de datos. Es posible que no se vean bien los botones, pero bueno eso tampoco es muy importante ahora. Subo el proyecto en un momento. Gracias por tu gran ayuda José J. Aguilar.
 

emvpic

Member
Licensed User
Longtime User
No me deja subir el proyecto, me dice que es demasiado grande. Pero solo ocupa 876KB. La base de datos abre imagenes y son necesarias para el funcionamiento del programa

lo he subido a: https://takeafile.com/?f=mevoweyeve

En la ultima modificacion me da error tambien con 127 registros.
Uso el programa DB Browser (SQLite) para leer y modificar la base de datos en el pc.
Una vez se modifica la base de datos para que la aplicacion lea los cambios, hay que presionar el boton B que sale arriba, despues presionar el boton de arriba a la izquierda.
Despues aparece las imagenes de los perfiles y 4 botones con opciones.
Es un programa de test de perfiles, que muestra aleatoriamente perfiles y hay que presionar sobre la opcion correcta.

Es posible que no conteste en unas horas, me voy a dormir que llevo toda la noche con el programa. Trabajo de noches, si recibo algún mensaje es posible que conteste mañana
 
Last edited:

josejad

Expert
Licensed User
Longtime User
¿Lo has hecho en el menú "Archivo->Exportar como Zip"?
Si no, si tienes algún servicio como Dropbox o Google Drive prueba a subirlo y poner el enlace.

saludos,
 

rscheel

Well-Known Member
Licensed User
Longtime User
El error puede ser, por que en realidad los 129 registros una ves que los lees con el query este comienza desde la posición cero, por lo tanto la lectura de la tabla va desde 0 a 128.

prueba con el siguiente codigo, donde c es el cursor y s es SQL

B4X:
    c = s.ExecQuery("SELECT * FROM perfil WHERE id =" & numero)
    If c.RowCount <> 0 Then
        For i = 0 To c.RowCount-1
            c.Position = i
            Log(c.GetString("nombrea"))
    Next
    End If
 

emvpic

Member
Licensed User
Longtime User
Gracias a los 2 por vuestra ayuda, al final era un fallo muy tonto. Como es un programa tipo test, uso una matriz con el tipo correcto donde guardo números aleatoriamente y muestro la imagen correspondiente a ese numero id.
También uso 4 variables mas para mostrar 4 opciones (3 aleatorias y 1 con el nombre real), aquí esta el fallo, me dio por poner una variable tipo byte( y al pasar de su limite me daba error), y estaba tan cansado que no lo vi, y eso que estuve horas repasando el código pero no me fijé donde estaba mal. Ahora en menos de 1 minuto me he dado cuenta del fallo.
Ahora ya me funciona bien.
 

josejad

Expert
Licensed User
Longtime User
Por eso es muy importante poner todo el codigo relevante :)
Me alegro de que lo hayas solucionado y más de que hayas comentado la solución
 
Top