Ejemplo: Agenda

5.1 Ejemplo Básico: Agenda

Tenemos una base de datos para apuntar los datos de nuestros contactos (nombre, apellidos, dni, domicilio, numero de móvil, correo electrónico), que se guardan en una tabla que llamaremos “principal”.
Definimos la Tabla “principal”, mediante sentencia SQL:
CREATE TABLE "principal" ("idprincipal" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE , "nombre" TEXT, "apellido" TEXT, "dni" TEXT, "movil" INTEGER, "email" TEXT, "domicilio" TEXT)
Además vamos a definir una vista, que llamaremos “compacta” para mostrar solo dos campos:
- nombre completo (la concatenación del campo nombre y del campo apellido)
- email

La definiremos así:
CREATE VIEW "compacta" AS select nombre||' '||apellido as "NombreCompleto",email from principal

Vamos a crear una aplicación que:
-Agrege, Modifique, Borre y Filtre los registros de la tabla
-Muestre la tabla “principal” y también la vista “compacta”

Pasos a seguir:
1. Creamos la base de datos con las sentencias que hemos comentados más arriba, desde algún editor de bases de datos sqlite3. Recomiendo usar el complemento “SQLite Maneger” del navegador Firefox. La base de datos la guardamos con el nombre “nombresyapellidos.sqlite” en el directorio del usuario “/home/usuario/
2. Creamos una aplicación en Gambas3, el proyecto le llamamos “Agenda”.
Esto permite que se cree la estructura interna del proyecto del programa.
Lo creamos en la carpeta “/home/usaurio/agenda”
Cerramos la gambas3. Por ejemplo

3. Usamos el programa mapbVistas para generar las clases DAO y VO
Lo que tenemos que hacer es indicarle donde esta la base de datos y el crea en la carpeta “/home/usuario/temporal”, la estructura de carpetas y clases para manejarla.


4. Copiamos el contenido de la carpeta /home/usuario/temporal/.src a la carpeta
/home/usaurio/agenda/.src”. El archivo de la base de datos se copia en “/home/usaurio/agenda/”, además hacemos de el una copia comprida .tag.gz para que la use el programa “agenda” cuando se instale. También se copia el archivo “estructura.html” en la carpeta “/home/usaurio/agenda/”

5. Abrimos el proyecto “Agenda”, y vemos que el árbol de directorios fuente del IDE, se le han añadido las carpetas y clases que hemos generado.


6. En el formulario Fmain, le añadimos los siguientes componentes y controles.
6.1. Componentes: gb.db, gb.sqlite3 y gb.desktop
Tenemos que añadir al proyecto el componente gb.db y gb.sqlite3 (ir a menu/Proyecto/Propiedades/Componentes) y activarlos:




Nota:
Esto siempre se hace en todas las aplicaciones que usen las clases DAO y VO generadas por MapBD-Vistas

6.2. Controles:
- un control “gridview” , que le ponemos el nombre de “gridviewTablaGeneral”.
- otro gridview, y le ponemos el nombre de “gridviewVistaCompleta”.
- 5 Botones, con los nombres “ButtonAgregar”, ”ButtonEditar”, ”ButtonBorrar”, ”ButtonFiltrar”


formulario inicial



7. Ahora vamos al código fuente del formulario, creamos los objetos de la clase DAO que nos van a ayudar a manejar los datos, y creamos una subrutina para mostrar los contendidos.

Public manejarTablaPrincipal As New PrincipalDAO
Public manejarVistaCompacta As New CompactaDAO

Public Sub Form_Open()
manejarTablaPrincipal.MostrarGridView(GridViewTablaGeneral)
manejarVistaCompacta.MostrarGridView(GridViewVistaCompleta)

'indicar colores de las filas:
manejarTablaPrincipal.ColorFilaImPar = Color.LightGray
manejarTablaPrincipal.ColorFilaPar = Color.green

manejarVistaCompacta.ColorFilaImPar = Color.LightGray
manejarVistaCompacta.ColorFilaPar = Color.green
End

Si ejecutamos la aplicación, vemos que ya nos muestran los gridview rellenos con los datos:






8. Añadimos el código que usará el botón Agregar, al ser pulsado.
Esta subrutina va a añadir un nuevo registro, con lo cual tendrá que presentar un formulario para que el usuario pueda introducir los nuevos datos.


Public Sub ButtonAgregar_Click()
manejarTablaPrincipal.FormularioRegistrar(1)
manejarTablaPrincipal.MostrarGridView(GridViewTablaGeneral)
manejarVistaCompacta.MostrarGridView(GridViewVistaCompleta)

End

Si iniciamos la aplicación y pulsamos sobre el botón Agregar, nos sale el formularios a rellenar de los nuevos datos. Lo rellenamos:




Al pulsar el botón Aceptar, se añade el registro a la base de datos, actualizándose los gridviews:






9. Añadimos el código que usará el botón Editar, al ser pulsado.
Añadimos el siguiente código:
Public Sub ButtonEditar_Click()
'creamos un objeto para trabajar con los datos de la fila seleccionada del gridviewTablaGeneral
Dim tmpVO As New PrincipalVO
'obtener el VO del registro seleccionado
tmpVO = manejarTablaPrincipal.filaSeleccionadaVO()
If Not IsNull(tmpVO) Then
'si hay una fila seleccionada, abrimos formularios para editar datos....
manejarTablaPrincipal.FormularioModificarRegistroIdprincipal(tmpVO.idprincipal, tmpvO, 1)
'mostramos gridview actualizados
manejarTablaPrincipal.MostrarGridView(GridViewTablaGeneral)
manejarVistaCompacta.MostrarGridView(GridViewVistaCompleta)
Endif
End





Si tenemos un registro del gridviewTablaGeneral seleccionado, este se mostrara en un formulario, para que podamos modificarlo.




Una vez modificados, dándole al botón Aceptar, se actualizan los gridview.




10. Añadimos el código que usará el botón Borrar, al ser pulsado.

Public Sub ButtonBorrar_Click()
'creamos un objeto para trabajar con los datos de la fila seleccionada del gridviewTablaGeneral

Dim tmpVO As New PrincipalVO
'obtener el VO del registro seleccionado
tmpVO = manejarTablaPrincipal.filaSeleccionadaVO()
If Not IsNull(tmpVO) Then
manejarTablaPrincipal.BorrarIdprincipal(tmpVO.idprincipal)
'mostramos gridview actualizados
manejarTablaPrincipal.MostrarGridView(GridViewTablaGeneral)
manejarVistaCompacta.MostrarGridView(GridViewVistaCompleta)
Endif
End

Si tenemos un registro del gridviewTablaGeneral seleccionado, se borrará este registro.


11. Añadimos el código que usará el botón Filtrar.
Dim tmpVO As New PrincipalVO
Dim numero As String
Dim resultadotmp As Result
'preguntar por el dni (numero completo o parcial)
numero = InputBox("Introduce DNI")
'----------------------------------------------------
'Mostrar datos filtrados en el gridview de la Tabla
'----------------------------------------------------
'hacemos la consulta, y nos devuelve un result
resultadotmp = manejarTablaPrincipal.BuscarContenidoDni(numero)
'mostramos el result, en el gridviewTablaGeneral
manejarTablaPrincipal.MostrarGridView(GridViewTablaGeneral,, resultadotmp)

Si ejecutamos el programa, pulsamos el botón de filtrar e introducimos un número de dni (completo o parcial), se filtra los resultados mostrados en el gridviewTablaGeneral:



Por último, vamos a añadir dos botones al formulario que se encarguen de imprimir los gridview, con el siguiente código:

Public Sub ButtonImprimirGridTabla_Click()

manejarTablaPrincipal.ImprimirRapidoTablaHorizontal()
End

Public Sub ButtonImprimirGridVista_Click()
manejarVistaCompacta.ImprimirRapidoTablaHorizontal()
End

Para hacer una prueba, iniciamos la aplicación, filtramos, (para mostrar e imprimir los datos que necesitemos) y pulsamos el botón imprimir, obteniendo el siguiente resultado:








Resumiendo:
Como veis, el uso este modelo DAO /VO nos permite trabajar con los registros de manera abstracta y con unas cuantas lineas de código.

Seria tambien muy fácil modificar la clase conexión para en vez de trabajar con el motor sqlite, pudieramos trabajar con otros motores de base de datos Sql (Mysql, Postgresql)

Por otra parte:
Una de las ventajas de este programa “mapbd-Vistas”, es que si mañana cambiamos (quitamos o añadimos campos nuevos) en la tabla “principal”, solo tenemos que volver a generar los clases DAO y VO, sin tener que cambiar nada del código de Fmain, y la aplicación funcionará perfectamente.





5.2 Anexo al ejemplo Básico: Agenda. Modificando clases DAO

Vamos a realizar cambios en las clase DAO, en concreto, las funciones que se encargan de generar los formularios de la clase principalDAO, a los cuales les vamos a añadir alguna etiqueta (labelbox).

Como comenté, las clases DAO y VO que genera el programa, nunca se deben de cambiar, lo que haremos es crear clases que hereden de ellas y en esas introducimos los cambios que deseemos, usando las nueva clase para crear el objeto DAO o “manejador”.

Básicamente lo que vamos a modificar va a ser el método GeneradorCodigoFormulario() que es el que define el formulario que se nos presenta en pantalla. Le vamos a añadir un nueva etiquetas al formulario:

codigocampos &= "labelbox|" & ("Otros Datos") & ";" ''Nota: linea nueva


Pasos a seguir:
1) En el Ide de gambas3, creamos una nueva carpeta, llamada “adaptadas”, debajo de en la carpeta “Fuentes”, donde crearemos la clases que herendan y que usaremos. Es muy importante que esta carpeta y los archivos de clases que creemos este debajo de la carpeta “Fuentes”, ya que esto nos permitirá generar cuantas veces necesitemos las clases DAO y VO con el programa mapbd-vistas, sin alterar las clases adaptadas.


Escribimos el código modificado del método:

Inherits PrincipalDAO

Public Function GeneradorCodigoFormulario(tipo As String, Optional datosEditar As PrincipalVO) As String
Dim codigocampos As String
If tipo = "registrar" Then
codigocampos &= "null|idprincipal|null;"
codigocampos &= "textbox|nombre|" & ("nombre") & "|;"
codigocampos &= "textbox|apellido|" & ("apellido") & "|;"
codigocampos &= "textbox|dni|" & ("dni") & "|;"
codigocampos &= "labelbox|" & ("Otros Datos") & ";" ''Nota: linea nueva
codigocampos &= "valuebox|movil|" & ("movil") & "|0;"
codigocampos &= "textbox|email|" & ("email") & "|;"
codigocampos &= "textbox|domicilio|" & ("domicilio") & "|;"
Else
codigocampos &= "null|idprincipal|null;"
codigocampos &= "textbox|nombre|" & ("nombre") & "|" & datosEditar.nombre & ";"
codigocampos &= "textbox|apellido|" & ("apellido") & "|" & datosEditar.apellido & ";"
codigocampos &= "textbox|dni|" & ("dni") & "|" & datosEditar.dni & ";"
codigocampos &= "labelbox|" & ("Otros Datos") & ";" ''Nota: linea nueva
codigocampos &= "valuebox|movil|" & ("movil") & "|" & datosEditar.movil & ";"

codigocampos &= "textbox|email|" & ("email") & "|" & datosEditar.email & ";"
codigocampos &= "textbox|domicilio|" & ("domicilio") & "|" & datosEditar.domicilio & ";"
Endif
Return codigocampos
End

Nota:
Al ser una clase heredada, el IDE de gambas la muestra en el árbol del proyecto debajo de la clase de la que hereda, aunque su ubicación real se encuentra dentro de la carpeta Adaptada.







Y ahora tenemos que indicar en el código del formulario Fmain, que se use esta nueva clase “AdaptadaPrincipalDAO” en vez de “PrincipalDAO”

Public manejarTablaPrincipal As New AdaptadaPrincipalDAO
''nota: hemos cambiado PrincipalDAO por AdaptadaPrincipalDAO

Ejecutamos la aplicación y si añadimos un nuevo registro, veremos el cambio que hemos añadido al formulario:





Enlace de descarga del código fuente: alojado en google drive



No hay comentarios:

Publicar un comentario