|     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

____________________________

57- SQLite.

Mediante SQLite podemos crear una base de datos en nuestro mismo móvil con Android.

En nuestro caso vamos a crear un listado telefónico.Lo primero que vamos hacer es bajar este programa para crear la base de datos en nuestro ordenador que luego copiaremos en el programa que vamos a realizar.Bajar sqlitebrowser_200_b1_win.zip (su sitio)

Una vez que lo tengamos creamos una base de datos que se llame basedatos.sql con una tabla llamada usuarios, en la tabla tres campos: Id, nombres, telefonos.

Con el programa Sqlite Browser, creamos una nueva DatabaseEn ella creamos una Tabla llamada: usuariosDentro de la Tabla, tres campos:Id (TEXT)nombre (TEXT)telefono (TEXT)Guardamos la base como basedatos.sqlEsta base la pondremos en la carpeta Files de nuestro proyecto.

NOTA: respeta las mayúsculas y minúsculas. No le pongas acento al campo telefono.

1.- Código y Layout

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


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

EditText1
EditText2

ListView1

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

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 As String
    Dim ListView1 As ListView
    Dim Id As String
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 en la memoria interna
        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 ListView1
    Carga_BD_en_ListView
    
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 la tabla usuarios de la basedatos.sql
registro = SQL1.ExecQuery("SELECT * FROM usuarios")

For n = 0 To registro.RowCount - 1
registro.Position = n
ListView1.AddSingleLine(registro.GetString("Id") & "|" & registro.GetString("nombre")& " - " & registro.GetString("telefono"))
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 
    telefono = EditText2.Text
        
    If nombre = "" OR telefono = "" Then
        Msgbox("Debes escribir el nombre y el teléfono.","Faltan datos.")
    Else
    
    ' 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

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

End Sub

Sub Button2_Click
    ' Borrar Registro
    
    SQL1.ExecNonQuery("DELETE FROM usuarios where Id = '" & Id & "' ")
    
    ' Llama a la Subrutina para cargar la base de datos en el ListView1
    Carga_BD_en_ListView
    EditText1.Text = ""
    EditText2.Text = ""
    
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 Id = " & Id)
    
    ' Llama a la Subrutina para cargar la base de datos en el ListView1
    Carga_BD_en_ListView
End If

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 usuarios where Id = '" & Id & "' ")

    For n = 0 To registro.RowCount - 1
        registro.Position = n
        EditText1.text=registro.getString("nombre")
        EditText2.text=registro.getString("telefono")
    Next
End Sub
      

En la última parte del código anterior cambiar...

' For n = 0 To registro.RowCount - 1
registro.Position = 0
EditText1.text=registro.getString("nombre")
EditText2.text=registro.getString("telefono")
' Next

___________________________________________________________

2.- Otro código, en este caso no existe ListView, se ha sustituido por dos Botones (Button4 y Button5), para ver el registro siguiente o el anterior respectivamente.

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 en la memoria interna.
        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
    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

    End If
    ' 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.

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 Button, 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

__________________

- 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