|     Inicio    |   |         |  |   FOROS      |  |      |      
   Elastix - VoIP B4A (Basic4Android) App inventor 2 PHP - MySQL
  Estación meteorológica B4J (Basic4Java) ADB Shell - Android Arduino
   AutoIt (Programación) Visual Basic Script (VBS) FireBase (BD autoactualizable) NodeMCU como Arduino
  Teleco - Emisora de A.M. Visual Basic Cosas de Windows Webs interesantes
Translate:
Búsqueda en este sitio:


Nuevo concurso para España, Argentina, Brasil, Chile, Colombia, Ecuador, México, Perú y Portugal.

B4A en español - Juan Antonio Villalpando
(BASIC4Android)

-- Tutorial de B4A --

Volver al índice del tutorial

____________________________

57B- SQLite.

Para guardar información se suelen utilizar tablas (matrices, arrays), archivos de textos y bases de datos.

Las bases de datos utilizadas suelen ser:
- MySQL que guarda la información en un servidor de Internet.
- SQLite que guarda la información en el móvil.

- Vamos a ver SQLite.

SQLite lo compone un archivo que suele tener la extensión mibase.sql o mibase.db.

En una base de datos hay tablas, por ejemplo en la base de datos empresa.sql puede tener las tablas: empleados, productos, compras, ventas.

En cada tabla hay columnas llamada campos y filas llamadas registros.

Tabla: empleados

empleados campo campo campo campo
registro
id
nombre
apellido
edad
registro
1
Juan Jiménez
32
registro
2
Pedro González
34
registro
3
Luis Sánchez
23
registro
4
Antonio Pérez
48
registro
5
Carlos Martínez
51

Hay un campo que se suele denominar Id que se toma como referencia (aunque no es obligatorio).
La información de cada celda se denomina dato.


_______________________________________________________


- Creación de la estructura de la base de datos.

Podemos crear la estructura de la base de datos en el mismo código o crearla previamente con una aplicación tal como SQLite Data Browser (sqlitebrowser_200_b1_win.zip) .

1.- Por códigos

Aquí presento códigos simples para crear la tabla, insertar datos, seleccionar, borrar, actualizar, ordenar...

Crea una tabla llamada empleados.

CREATE TABLE empleados (id INTEGER PRIMARY KEY, nombre TEXT, apellido TEXT, edad INT);

SQL1.ExecNonQuery( "CREATE TABLE empleados (id INTEGER PRIMARY KEY, nombre TEXT, apellido TEXT, edad INTEGER) " )

Inserta datos
nota: unas veces he puesto la edad con int y otras con text, modificarlo según convenga.
Cuidado que los text van con 'comilla simple' y los int van sin comillas.

INSERT INTO empleados (id,nombre,apellido,edad) VALUES (6, 'Ana', 'González', '22' );

SQL1.ExecNonQuery("INSERT INTO empleados VALUES(6, 'Ana', 'Gonzalez', 22")

SQL1.ExecNonQuery("INSERT INTO empleados VALUES('" & otraId & "','" & nombre & "','" & apellido & "','" & edad & "')")

CUIDADO con las comillas "dobles" las 'simples' y cuando están las "'dos'"

Borrar tabla

DROP TABLE empleados;

SQL1.ExecNonQuery("DROP TABLE empleados")

SQL1.ExecNonQuery("DELETE FROM empleados")

Selecciona nombre y edad

SELECT nombre, edad FROM empleados;

registro = SQL1.ExecQuery("SELECT nombre, edad FROM empleados")

Selecciona todos los campos

SELECT * FROM empleados;

registro = SQL1.ExecQuery("SELECT * FROM empleados")

Selecciona los empleados cuya edad es mayor de 32

SELECT * FROM empleados WHERE edad > 32;

registro = SQL1.ExecQuery("SELECT * FROM empleados WHERE edad > 32 ")

Selecciona los empleados cuya edad es mayor de x (x es una variable)

registro = SQL1.ExecNonQuery("SELECT * FROM empleados WHERE edad > '" & x & "' ")

Selecciona los empleados cuya edad es igual a 32

SELECT * FROM empleados WHERE edad = 32;

Selecciona los empleados cuya edad no es igual a 32

SELECT * FROM empleados WHERE edad != 32;

Selecciona los empleados cuya edad sea mayor o igual de 32

SELECT * FROM empleados WHERE edad >= 32;

Selecciona los empleados cuya edad sea mayor o igual de 32 y tenga de nombre Juan

SELECT * FROM empleados WHERE edad >= 32 AND nombre = 'Juan';

Selecciona los empleados cuya edad sea mayor o igual de 32 o tenga de nombre Juan

SELECT * FROM empleados WHERE edad >= 32 OR nombre >= 'Juan';

Selecciona los empleados cuya nombre comience por 'Ju' (los comodines son % y _)

SELECT * FROM empleados WHERE nombre LIKE 'Ju%'; Comodines % _

Selecciona los empleados cuya edad sea 32 o 40

SELECT * FROM empleados WHERE edad IN (32, 40);

Selecciona los empleados cuya edad esté entre 32 y 40

SELECT * FROM empleados WHERE edad BETWEEN 32 AND 40;

Modifica el nombre en el registro id 1

UPDATE empleados SET nombre = 'Juana' WHERE id = 1;

SQL1.ExecNonQuery("UPDATE empleados set nombre ='Juana' WHERE id = 1")

Modifica el nombre en el registro id (id es una variable)

SQL1.ExecNonQuery("UPDATE empleados set nombre ='"& nombre &"',telefono ='"& apellido &"' WHERE Id = " & id)

Borra el registro id 4

DELETE FROM empleados WHERE id = 4;

SQL1.ExecNonQuery("DELETE FROM empleados WHERE id =4")

Borra el registro id (id es una variable)

SQL1.ExecNonQuery("DELETE FROM empleados WHERE id = '" & id & "' ")

Ordena empleados por nombre Ascendente

SELECT * FROM empleados ORDER BY nombre ASC;

SQL1.ExecNonQuery("SELECT * FROM empleados ORDER BY nombre ASC")

Ordena empleados por edad Descendente

SELECT * FROM empleados ORDER BYedad DESC;

SQL1.ExecNonQuery("SELECT * FROM empleados ORDER BY edad DESC ")

2.- Creación de la base de datos mediante SQLite Data Browser

Creo que para empezar es mejor crear la base de datos mediante SQLite Data Browser. (sqlitebrowser_200_b1_win.zip) Vamos a crear una base de datos llamada empresa.sql con una sola tabla llamada empleados y con los campos vistos anteriormente: id, nombre, apellido, edad.

- Respetar mayúsculas y minúsculas.
- No poner acentos ni eñes en el nombre de campo.
- El campo id lo ponemos como INTEGER_PRIMARY_KEY.
- Todos los demás campos los ponemos como TEXT (incluso el de edad). En este ejemplo he puesto la edad como texto, no como entero.
- Para hacer los ejemplos mejor no poner acentos en los datos.


NOTA: El tipo BLOB es para guardar imágenes.

Pulsamos en Browser Data. Luego en New Record. Después doble pulsación sobre cada celda.
Añadimos un Dato y pulsamos en Apply Change.

De esta manera rellenamos los datos de la tabla.

Consulta... View / SQL Log.

Aquí la tienes... empresa.sql cópiala en la carpeta Files.

_______________________________________________________

- Aplicaciones.

Bien... vamos a realizar aplicaciones simples con SQLite.

La base de datos empresa.sql la copiamos en la carpeta Files del proyecto. Recuerda que la carpeta Files (DirAsset), durante la ejecución de la aplicación, es de solo lectura, es decir no podemos modificar la base empresa.sql, que se encuentra en Files (DirAsset), desde la aplicación.

Por eso cuando comienza la aplicación lo primero que hace es consultar si empresa.sql se encuentra ya en la sdcard, en caso que no se encuentre se copia. Si ya está en la sdcard (DirRootExternal), continua el programa. Es decir, cuando modifiquemos empresa.sql, se modificará en la sdcard (DirRootExternal), pero no la que tenemos en Files (DirAsset).

Si haciendo las pruebas has borrado todos los datos y quieres empezar de nuevo, activa esta línea...
' File.Delete(File.DirRootExternal, "empresa.sql")
para que se vuelva a cargar la base de datos con los registros iniciales desde DirAsset a DirRootExternal.
Luego debes volver a deshabilitar esa línea y reiniciar la aplicación.

- Tomar la base de datos del Android y llevarla a Windows.

Abrimos un Terminal mediante el comando "cmd". Nos posicionamos en la carpeta donde esté el adb, probablemente...

C:\Android\android-sdk\platform-tools

cd C:\Android\android-sdk\platform-tools
C:\Android\android-sdk\platform-tools> adb shell
# cd /mnt/sdcard
# ls
empresa.sql
# cat empresa.sql

Para pasar el archivo empresa.sql desde la SdCard a un archivo de Windows, abrimos otro terminal mediante el "cmd".

cd C:\Android\android-sdk\platform-tools
C:\Android\android-sdk\platform-tools> adb -e pull "/mnt/sdcard/empresa.sql" "C:/Android/empresa.sql"


______________________________________

- Búsqueda del último registro existente.

Para buscar el último registro, para luego añadir el siguiente, podemos hacerlo de esta manera...

' Busca el último Registro
registro = SQL1.ExecQuery("SELECT id FROM usuarios")
If registro.RowCount > 0 Then
For n = 0 To registro.RowCount - 1
registro.Position = n
Dim otraId As Int
otraId = registro.GetInt("id")
Next

En otraId tendríamos la id del último registro.

Pero es más sencillo hacerlo de esta otra manera... (utilizaremos esta forma)

' Busca el último Registro
otraId = SQL1.ExecQuerySingleResult("SELECT Max(id) FROM empleados")

- Con esta otra forma obtendría el último registro id introducido, pero no es necesariamente el último registro existente

' Busca el último Registro introducido
otraId2 = SQL1.ExecQuerySingleResult("SELECT last_insert_rowid() As id FROM empleados")

- Una subrutina para comprobar cuántos registros hay almacenado.

Sub Cuantos
    ' Cuantos
    cReg = SQL1.ExecQuerySingleResult("SELECT count(*) FROM empleados")
If cReg > 0 Then
Msgbox("Si hay registro: " & cReg,"")
Else
Msgbox("No existen registros", "")
End If 
End Sub

- Reconstruir el índice id de la base de datos.

Las bases de datos suelen tener una columna en donde se encuentra un índice numérico que se utiliza para elegir cada registro.
Este número debe ser único para cada registro.
Cuando añadimos registros a la base de datos el índice irá tomando los números: 1, 2, 3, 4, 5, 6, 7, 8.
Pero cuando borramos registros intermedios los índices quedarán: 1, 3, 6, 7.
No tiene importancia que los índices no sean números correlativos, ya que lo importante es que cada registro tenga un número único.

Sin embargo nos puede interesar reconstruir esos índices cada vez que no sean correlativos, para que vuelvan a quedar: 1, 2, 3, 4.

Hay una orden que debe reconstruir esos índices: SQL1.ExecNonQuery("REINDEX empleados") pero no ha funcionado.

Así que en el Button6 creo este código que reconstruye las id

Sub Button6_Click
 ' Reconstruye las id
  Dim tomaid, t As Int
  registro = SQL1.ExecQuery("SELECT id FROM empleados")

   For n = 0  To registro.RowCount - 1
    t = n + 1
    registro.Position = n
    tomaid=registro.getString("id")
    SQL1.ExecNonQuery("UPDATE empleados set id ='"& t &"' WHERE id = '" & tomaid & "' ")
  Next
    Carga_BD_en_ListView
    
    ' SQL1.ExecNonQuery("REINDEX empleados") ' No funciona así
End Sub

- Relleno.

Observamos que las filas del ListView aparecen de esta manera

1 | Juan | Jiménez | 32
2 | Pedro | González | 34
3 | Luis | Sánchez | 23

No salen perfectamente encolumnados.

Realizo una Subrutina para rellenar con espacios en blanco a la derecha de cada campo para que todos los campos tengan la misma anchura.

Sub Relleno (frase As String, longitud As Int ) As String

Dim lleno As String

For n = 0 To longitud
lleno = lleno & " "
Next
' Espacios a derecha
frase = frase & lleno
frase = frase.substring2(0, longitud)

' Espacios a izquierda
'frase = lleno & frase
'frase = frase.SubString2(frase.Length - longitud, frase.Length)

Return frase

End Sub

A esta Subrutina la llamo indicando la variable a la que se lo quiero aplicar y el número de espacios a la derecha de debe tener.

nombre = registro.GetString("nombre") : nombre = Relleno(nombre,10)
edad = registro.GetString("edad") : edad = Relleno(edad,2)
 

Pero no llega a funcionar perfectamente, ya que los caracteres tienen ancho distinto.
Con otros métodos como con CustomListView se puede conseguir. Aquí hay un código para poner un ListView con dos columnas.
También utilizando arrays de view como se ha visto en un tutorial anterior.
Pero en nuestro caso lo dejamos así ya que no se quiere complicar el código.  

 

_______________________________________________________
_______________________________________________________

 

1.- Código y Layout de nuestra primera aplicación.

Mediante el Designer creamos un Layout, lo llamaremos "Layout" y contendrá:


Label1 ...... id
Label2....... Nombre
Label3....... Apellido
Label4....... Edad

EditText1
EditText2
EditText3

ListView1

Button1..... Añadir
Button2 .... Borrar
Button3 .... Editar

Button4..... <<
Button5..... >>

Button6.... Re

Copia empresa.sql en la carpeta Files

Copia y pega este código en un nuevo proyecto
#Region  Project Attributes 
    #ApplicationLabel: SQLite-juan
    #VersionCode: 1
    #VersionName: 
    'SupportedOrientations possible values: unspecified, landscape or portrait.
    #SupportedOrientations: unspecified
    #CanInstallToExternalStorage: False
#End Region

#Region  Activity Attributes 
    #FullScreen: False
    #IncludeTitle: True
#End Region

Sub Process_Globals
' Juan Antonio Villalpando
' juana1991@yahoo.com

' febrero 2013 y abril 2014
    Dim SQL1 As SQL
End Sub

Sub Globals

    Dim registro As Cursor
    Dim Label1 As Label
    Dim EditText1, EditText2, EditText3 As EditText
    Dim id, nombre, apellido, edad  As String
    Dim otraId As Int
    Dim ListView1 As ListView
    Dim k As Int
    k = 0

End Sub

Sub Activity_Create(FirstTime As Boolean)
    
     ' Si queremos borrar la base de datos de la sdcard para empezar de nuevo
     ' cargando la inicial de File.DirAssets
     ' File.Delete(File.DirRootExternal, "empresa.sql")

    Activity.LoadLayout("Layout")
    If File.Exists(File.DirRootExternal,"empresa.sql") = False Then
    ' Ponemos una base inicial de datos en la carpeta Files.
    ' Luego la copiamos a la SD Card
        File.Copy(File.DirAssets,"empresa.sql",File.DirRootExternal,"empresa.sql")
    End If
    
    If SQL1.IsInitialized = False Then
        SQL1.Initialize(File.DirRootExternal, "empresa.sql", False)
    End If
    
    ' Llama a la Subrutina para cargar la base de datos en el ListView1
    Carga_BD_en_ListView
    Activity.Title="© Juan A. Villalpando"
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub Carga_BD_en_ListView
' Limpia el ListView1
ListView1.Clear
' Carga toda la tabla empleados de la empresa.sql en registro
registro = SQL1.ExecQuery("SELECT  * FROM empleados")

For n = 0 To registro.RowCount - 1
registro.Position = n

' Relleno, rellena con espacio a la derecha cada campo
' No sale bien presentado, mejor utilizar CustomListView

id = registro.GetString("id"):' id = Relleno(id,2)
nombre = registro.GetString("nombre") : nombre = Relleno(nombre,10)
apellido = registro.GetString("apellido") : apellido = Relleno(apellido,10)
edad = registro.GetString("edad"): edad = Relleno(edad,2)

ListView1.AddSingleLine(id & "|" & nombre& "|" & apellido & "|" & edad)
ListView1.SingleLineLayout.ItemHeight = 40
ListView1.SingleLineLayout.Label.TextSize = 20
ListView1.SingleLineLayout.Label.TextColor = Colors.Black
ListView1.SingleLineLayout.Label.Color = Colors.White
Next
End Sub

Sub Button1_Click
    ' Añadir Registro
    
    nombre = EditText1.Text 
    apellido = EditText2.Text
    edad = EditText3.Text
        
    If nombre = "" OR apellido = ""  OR edad = "" Then
        Msgbox("Debes escribir el nombre, el apellido y la edad.","Faltan datos.")
    Else
    
    ' Busca el último Registro
    otraId = SQL1.ExecQuerySingleResult("SELECT Max(id) FROM empleados")

    ' Crea un nuevo Registro
    otraId = otraId + 1
    SQL1.ExecNonQuery("INSERT INTO empleados VALUES('" & otraId & "','" & nombre & "','" & apellido  & "','" & edad & "')")  
    
    ' Llama a la Subrutina para cargar la base de datos en el ListView1
    Carga_BD_en_ListView
    Label1.Text = "id"
    EditText1.Text = ""
    EditText2.Text = ""
    EditText3.Text = ""
    EditText1.RequestFocus
    End If

End Sub

Sub Button2_Click
    ' Borrar Registro 
    SQL1.ExecNonQuery("DELETE FROM empleados WHERE id = '" & id & "' ")
    
    ' Llama a la Subrutina para cargar la base de datos en el ListView1
    Carga_BD_en_ListView
    Label1.Text = "id"
    EditText1.Text = ""
    EditText2.Text = ""
    EditText3.Text = ""
    
End Sub

Sub Button3_Click
    ' Editar Registro
    Label1.Text="id "
    nombre = EditText1.Text 
    apellido = EditText2.Text
    edad = EditText3.Text
    
If nombre = "" OR apellido = "" OR edad = "" Then
    Msgbox("Debes rellenar todos los campos con datos.","Campos vacíos.")
Else
    SQL1.ExecNonQuery("UPDATE empleados SET nombre ='"& nombre &"',apellido ='"& apellido &"',edad ='"& edad &"' WHERE id = " & id)
    
    ' Llama a la Subrutina para cargar la base de datos en el ListView1
    Carga_BD_en_ListView
End If

End Sub

Sub Button4_Click
    ' Atrás
    k = k - 1
    If k < 0 Then k =  0
   ' registro = SQL1.ExecQuery("SELECT * FROM empleados WHERE id = '" & k & "' ")
    registro.Position = k
    Label1.Text = "id " & registro.getString("id")
    EditText1.Text =  registro.GetString("nombre")
    EditText2.Text =  registro.GetString("apellido")
    EditText3.Text =  registro.GetString("edad")
End Sub

Sub Button5_Click
    ' Adelante
    k = k + 1
    If k > registro.RowCount - 1 Then k = registro.RowCount - 1
    ' registro = SQL1.ExecQuery("SELECT * FROM empleados WHERE id = '" & k & "' ")
    registro.Position = k
    Label1.Text = "id " & registro.getString("id")
    EditText1.Text =  registro.GetString("nombre")
    EditText2.Text =  registro.GetString("apellido")
    EditText3.Text =  registro.GetString("edad")
End Sub

Sub Button6_Click
 ' Reconstruye las id
  Dim tomaid, t As Int
  registro = SQL1.ExecQuery("SELECT id FROM empleados")

   For n = 0  To registro.RowCount - 1
    t = n + 1
    registro.Position = n
    tomaid=registro.getString("id")
    SQL1.ExecNonQuery("UPDATE empleados set id ='"& t &"' WHERE id = '" & tomaid & "' ")
  Next
    Carga_BD_en_ListView
    
    ' SQL1.ExecNonQuery("REINDEX empleados") ' No funciona así
End Sub


Sub ListView1_ItemClick (Position As Int, Value As Object)
' Pulsa sobre un Registro
Dim pulsado As String
Dim lugar As Int

pulsado = Value
lugar = pulsado.IndexOf("|")
pulsado = pulsado.SubString2(0, lugar)
id = pulsado
registro = SQL1.ExecQuery("SELECT * FROM empleados where id = '" & id & "' ")

        registro.Position = 0
        Label1.Text = "id " & registro.getString("id")
        EditText1.text=registro.getString("nombre")
        EditText2.text=registro.getString("apellido")
        EditText3.text=registro.getString("edad")

End Sub

Sub Relleno (frase As String, longitud As Int ) As String

Dim lleno As String

For n = 0 To longitud
lleno = lleno & " "
Next
' Espacios a derecha
frase = frase & lleno
frase = frase.substring2(0, longitud)

' Espacios a izquierda
'frase = lleno & frase
'frase = frase.SubString2(frase.Length - longitud, frase.Length)

Return frase

End Sub

___________________________________________________________

2.- Otro código, en este caso no existe ListView, los Botones (Button4 y Button5) son los que eligen el registro.

La base de datos en esta aplicación es: basedatos.zip la debes copiar en la carpeta Files.


Ahora mediante el Designer creamos un Layout, lo llamaremos "Layout" y contendrá:


Label1 ...... Nombre
Label2....... Tel.:

EditText1
EditText2

Button1..... Añadir
Button2 .... Borrar
Button3 .... Editar

Button4... <<
Button5... >>

 

Copia y pega este código en un nuevo proyecto
 Sub Process_Globals
' Juan Antonio Villalpando
' juana1991@yahoo.com

' febrero 2013
End Sub

Sub Globals
    Dim SQL1 As SQL
    Dim registro As Cursor
    Dim EditText1, EditText2 As EditText
    Dim nombre, telefono, nombre_actual As String
    Dim Id As String
    Dim k As Int
    k = 0
End Sub

Sub Activity_Create(FirstTime As Boolean)

    Activity.LoadLayout("Layout")
    If File.Exists(File.DirInternal,"basedatos.sql") = False Then
    ' Ponemos una base inicial de datos en la carpeta Files.
    ' Luego la copiamos a la SD Card
        File.Copy(File.DirAssets,"basedatos.sql",File.DirInternal,"basedatos.sql")
    End If
    
    If SQL1.IsInitialized = False Then
        SQL1.Initialize(File.DirInternal, "basedatos.sql", False)
    End If
    
    
    ' Carga en registro toda la tabla usuarios
    registro = SQL1.ExecQuery("SELECT * FROM usuarios")
    
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub Button1_Click
    ' Añadir Registro
    nombre = EditText1.Text 
    telefono = EditText2.Text
        
    If nombre = "" OR telefono = "" Then
        Msgbox("Debes escribir el nombre y el teléfono.","Faltan datos.")
    Else
    
    ' Busca el último Registro
      otraId = SQL1.ExecQuerySingleResult("SELECT Max(id) FROM empleados")

    ' Crea un nuevo Registro
    otraId = otraId + 1
    SQL1.ExecNonQuery("INSERT INTO usuarios VALUES('" & otraId & "','" & nombre & "','" & telefono & "')")
    
    ' Carga en registro toda la tabla usuarios
    registro = SQL1.ExecQuery("SELECT * FROM usuarios")
    EditText1.Text = ""
    EditText2.Text = ""
    EditText1.RequestFocus
End If
End Sub

Sub Button2_Click
    ' Borrar Registro
    nombre = EditText1.Text
    telefono = EditText2.Text
    If nombre = "" OR telefono = "" Then
        Msgbox("No hay nombre de usuario.","Faltan datos.")
    Else
    SQL1.ExecNonQuery("DELETE FROM usuarios where nombre = '" & nombre & "' ")
    
    ' Carga en registro toda la tabla usuarios
    registro = SQL1.ExecQuery("SELECT * FROM usuarios")
    EditText1.Text = ""
    EditText2.Text = ""
    End If
End Sub

Sub Button3_Click
    ' Editar Registro
    nombre = EditText1.Text 
    telefono = EditText2.Text
    
 If nombre = "" OR telefono = "" Then
        Msgbox("Debes rellenar los dos campos con datos.","Campos vacíos.")
Else
     SQL1.ExecNonQuery("UPDATE usuarios set nombre ='"& nombre &"',telefono ='"& telefono &"' WHERE nombre = '" & nombre_actual & "'")
     
    ' Carga en registro toda la tabla usuarios
    registro = SQL1.ExecQuery("SELECT * FROM usuarios")
End If

End Sub

Sub Button4_Click
    ' Atrás
    k = k - 1
    If k < 0 Then k =  0
'    registro = SQL1.ExecQuery("SELECT * FROM usuarios where Id = '" & k & "' ")
    registro.Position = k
    EditText1.Text =  registro.GetString("nombre")
    EditText2.Text =  registro.GetString("telefono")
    nombre_actual =  EditText1.Text
End Sub

Sub Button5_Click
    ' Adelante
    k = k + 1
    If k > registro.RowCount - 1 Then k = registro.RowCount - 1
'    registro = SQL1.ExecQuery("SELECT * FROM usuarios where Id = '" & k & "' ")
    registro.Position = k
    EditText1.Text =  registro.GetString("nombre")
    EditText2.Text =  registro.GetString("telefono")
    nombre_actual =  EditText1.Text
End Sub

________________________________________________

3.- Imágenes en una base de datos SQLite.

En este caso se ha creado una base de datos que contiene imágenes, esta base de datos está en el directorio Files y es de SQLite.

Baja el código Blob1.zip de esta página. También aquí: Blob.zip

________________________________________________

4.- SQLite en un List y en un Spinner.

Ahora mediante el Designer creamos un Layout, lo llamaremos "Layout" y contendrá:

un Spinner1 y un Label1.

 

En la carpeta Files del proyecto copiamos la misma basedatos.sql de los ejemplos anteriores.

basedatos.zip

Con el Spinner podemos elegir el nombre de un usuario y saldrá su teléfono en el Label1.

Copia y pega este código en un nuevo proyecto
Sub Process_Globals
' Juan Antonio Villalpando
' juana1991@yahoo.com

' junio 2013
End Sub

Sub Globals
    Dim SQL1 As SQL
    Dim registro As Cursor
    Dim Spinner1 As Spinner
    Dim Label1 As Label
    Dim List1 As List
End Sub

Sub Activity_Create(FirstTime As Boolean)

    Activity.LoadLayout("Layout")
    If File.Exists(File.DirInternal,"basedatos.sql") = False Then
    ' Ponemos una base inicial de datos en la carpeta Files.
    ' Luego la copiamos a la SD Card
        File.Copy(File.DirAssets,"basedatos.sql",File.DirInternal,"basedatos.sql")
    End If
    
    If SQL1.IsInitialized = False Then
        SQL1.Initialize(File.DirInternal, "basedatos.sql", False)
    End If
    
    ' Llama a la Subrutina para cargar la base de datos en el List1
    List1.Initialize
    Carga_BD_en_List
    
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub Carga_BD_en_List
    ' Limpia el List1
    List1.Clear
    ' Carga la tabla usuarios de la basedatos.sql
    registro = SQL1.ExecQuery("SELECT * FROM usuarios")

For n = 0 To registro.RowCount - 1
    registro.Position = n
    List1.Add(registro.GetString("telefono"))
    Spinner1.Add(registro.GetString("nombre"))
Next
End Sub

Sub Spinner1_ItemClick (Position  As Int , Value  As Object ) 
   Label1.Text = "Teléfono = " & List1.Get(Position) 
End Sub 

________________________________________________

5.- Pasar los datos de una SQLite a un archivo de Excel de tipo CSV.

Esto consiste en que tenemos una base de datos SQLite, en nuestro ejemplo será la "basedatos.sql" y queremos pasarla a un archivo de tipo CSV, concretamente a "basedatos.csv",ya que este tipo de archivos los puede leer el Excel.
En los archivos de tipo CSV el separador de campos es el ";"

Para ello en el ejemplo anterior 4.- SQLite en un List y en un Spinner, agregamos un Button1, le ponemos de texto "Pasar a CSV" y agregamos esté código al anterior...

Copia y pega este código al final del proyecto 4.-
Sub Button1_Click() 
  Dim List2 As List
  ' Inicia el List2
  List2.Initialize
  ' Carga la tabla usuarios de la basedatos.sql
  registro = SQL1.ExecQuery("SELECT * FROM usuarios")

For n = 0 To registro.RowCount - 1
registro.Position = n
List2.Add(registro.GetString("Id") & ";" & registro.GetString("telefono") & ";" & registro.GetString("nombre"))
Next

File.WriteList(File.DirRootExternal, "basedatos.csv", List2)
End Sub 

 

Creamos un List2 y en él vamos agregando cada registro. Separamos los campos mediante ";"

Cuando ya ha recorrido todos los registros, guarda el List2 en el archivo "basedatos.csv" de la SdCard (DirRootExternal).

Para ver directamente el archivo obtenido basedatos.csv desde el terminal, tendríamos que conocer el tutorial de Linux en Android.

Abrimos un Terminal mediante el comando "cmd". Nos posicionamos en la carpeta donde esté el adb, probablemente...

C:\Android\android-sdk\platform-tools

cd C:\Android\android-sdk\platform-tools
C:\Android\android-sdk\platform-tools> adb shell
# cd /mnt/sdcard
# ls
basedatos.csv
# cat basedatos.csv

Para pasar el archivo basedatos.csv desde la SdCard a un archivo de Windows, abrimos otro terminal mediante el "cmd".

cd C:\Android\android-sdk\platform-tools
C:\Android\android-sdk\platform-tools> adb -e pull "/mnt/sdcard/basedatos.csv" "C:/Android/basedatos.csv"


________________________________________________

6.- Otro ejemplo de SQLite en los foros.

 

Hay un interesante ejemplo de SQLite sencillo en este foro.

Concretamente el ejemplo SQLiteLight1.zip

_______________________________________________

7- Interesante aplicación de SQLite.

Nota: en los tutoriales de B4A puedes bajar una aplicación (SQLiteViewer) que carga base de datos SQLite.

Presionamos el botón Menú del móvil y nos saldrá un explorador para elegir la base de datos con la que queremos trabajar.
Si no tienes ninguna, puedes crearte una con el programa que he puesto más arriba.

La base de datos la podemos poner en el tarjeta SDCard (Menu Internal Files Manager) es el Directorio: DirRootExternal

Ver tutorial.

________________________________

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información