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:
- otro
gridview, y le ponemos el nombre de “gridviewVistaCompleta”.
- 5
Botones, con los nombres “ButtonAgregar”, ”ButtonEditar”,
”ButtonBorrar”, ”ButtonFiltrar”
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.LightGraymanejarTablaPrincipal.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()
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:
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|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:
No hay comentarios:
Publicar un comentario