3

Bases de Datos (III)

Antes de comenzar hice unos cambios:

* Agregue 1 campo Código (Puede ser un código interno que tengamos puestos en nuestros cds).
* Se puso el nombre de la db en una variable [DBNombre].
* Se puso la ruta de la db en una variable [DBRuta].
* Los botones con color celeste son los nuevos.

En esta entrega veremos como realizar búsquedas.

Para qué realizar búsquedas? 

Las búsquedas nos permiten filtrar la información de la base de datos. Si tenemos una agenda de contactos en algún momento tendremos que buscar el numero de una persona. O simplemente son necesarias, pues cuando ya tenemos muchos registros no podemos estar recorriendo uno por uno para encontrar el deseado.

NeobookDB nos ofrece 2 acciones para buscar pero nosotros usaremos dbfQuery ya que ésta nos permite realizar búsquedas que involucren a varios campos.

Por ejemplo si queremos evitar registros duplicados (utilizaremos un campo código) tendremos que realizar una búsqueda para ver si existe y mostrar un mensaje (ver ejemplo).

Operadores

Podremos crear búsquedas complejas con los siguientes operadores:
= Busca al menos parte del contenido (ej. … “Tipo=Auto” … Encontraría registros como auto, automático, automotor,etc.)
== El contenido del campo es exactamente igual a lo que se busca.
< El contenido del campo es menor a lo que se busca. > El contenido del campo es mayor a lo que se busca.
<> El contenido del campo es distinto a lo que se busca.
Los conectores AND (y) y OR (ó) nos permiten unir varios criterios.

Ejemplo

dbfQuery “[DB]” “Nombre=Pedro AND Edad>21 AND Edad<57”

Con eso estaríamos buscando en nuestra base todos los registros de personas que se llamen Pedro y que tengan entre 21 y 57 años de edad.

A tener en cuenta

Cuando hacemos búsquedas nuestra vista de la tabla se actualizara mostrando sólo los registros que devolvió dicha búsqueda. Para volver a mostrar todos los registros deberemos usar dbfShowAll.

Otro punto importante es que si la búsqueda dio como resultado varios registros queda seleccionado automáticamente el primero de éstos, para acceder a los siguientes deberemos usar las acciones  dbfNext, dbfPrev, dbfFirst, dbfLast. Lo recomendable es proveerle al usuario una forma cómoda para seleccionar el registro deseado (una vista podría ser).

Screenshot

sshot-5

Descarga

  db-MisCds-3.rar (1,3 MiB, 2.992 hits)

1

Bases de Datos (II)

Antes de comenzar hice unos cambios:

* Agregue 2 campos NTemas (cantidad de canciones en el cd) y Temas (la lista de temas).
* Las acciones de crear (o abrir) la base las pase al startup de la aplicación.
* La vista de la tabla es para ver los cambios que realizamos y por ese motivo esta en modo solo lectura (pero actualiza los datos del registro seleccionado).

Siempre que trabajemos con base de datos vamos a tener que hacer un ABM (Alta, Baja y Modificación).

Lo mas fácil es la Baja pues ejecuta la función dbfDeleteRecord que como dije arriba eliminará el registro que tengamos seleccionado en la vista (mas adelante podremos eliminar haciendo búsquedas).

Algo que tienen que saber que al trabajar con dbfs si eliminamos un registro en realidad queda marcado como eliminado, por ej.

Si tenemos

Registro A
Registro B
Registro C
Registro D

Y hacemos dbfDeleteRecord a los registros B y C, éstos quedaran marcados como eliminados, dándonos como total 4 registros. Para eliminarlos completamente y que la cantidad total de registros nos de correcta debemos usar la función dbfPack.

Para realizar Alta y Modificación hice un container con entradas de texto para cada uno de los campos. También utilizo una variable [form1.accion] para saber que acción (nuevo ó modificar) estamos realizando y hacer lo correspondiente.

Al trabajar con dbfs si seleccionamos un registro se actualiza las variables del registro seleccionado ([NombreDB.Campo]), esto quiere decir que tendría las siguientes variables:

[MisCds.Titulo]
[MisCds.Artista]
[MisCds.Genero]
[MisCds.Año]
[MisCds.Discog]
[MisCds.NTemas]
[MisCds.Temas]

Osea que si tengo seleccionado un registro estos campos se llenaran con la información del registro y si modifico alguna estoy haciendo una modificación del registro (es por esto que uso una variable auxiliar para saber si es nuevo o estoy modificando).

Entonces al dar Alta a un registro debemos usar dbfAddRecord que nos crea un registro nuevo (en blanco) y luego asignamos los contenidos de las entradas de texto (ej [form1.Titulo]) a las variables (ej [MisCds.Titulo]) y por ultimo ejecutamos dbfSaveEdits para confirmar esas modificaciones.

Al modificar debemos mostrar el contenido del registro que estamos modificando por lo cual hago:

SetVar "[form1.campo]" "[NombreDB.campo]"
.ej
SetVar "[form1.Titulo]" "[MisCds.Titulo]"

Con ésto lleno el formulario con los datos del registro y al cambiarlos como ya expliqué arriba ya estaríamos modificandolos por lo cual solo resta hacer dbfSaveEdits.

Screenshots

sshot-2

Descarga:

  db-MisCds-2.rar (1,3 MiB, 2.490 hits)

 

Cualquier duda me consultan

NOTA: Ésta es una forma de realizar un ABM, puede haber otras mejores (o peores =P).

Espero que sirva.

BuNKeR

4

Bases de Datos (I)

Hola hoy vamos a ver Bases de Datos (DB) y como implementarlas en neobook. Será una serie de entradas las cuales vamos a ir agregando funcionalidades a la misma. DB es un tema bastante amplio que no voy desarrollar ya que voy a centrarme directamente en como implementarlas en neobook. Dejo para uds que lean sobre el tema.

que es una base de datos?

Una base de datos o banco de datos es un conjunto de datos pertenecientes a un mismo contexto y almacenados sistemáticamente para su posterior uso.

tipos de bases de datos

Existen varios pero los mas importantes hoy en día son mysql y sqlite. Sin olvidar que también existen mssql, Access (.mdb), tablas libres (.dbf), etc.

cual me conviene?

Depende del volumen de inf, tipos de datos, seguridad, acceso (local o remoto) que necesitemos para nuestra DB.

que plugins puedo usar?

Existen varios algunos free algunos pagos, dependiendo del tipo de DB a la cual conectarnos, etc. Ya veremos ésto mas adelante.

Manos a la Obra

En este ejemplo voy a utilizar NeobookDB (gratis).

Antes de comenzar tenemos que analizar que vamos a guardar para poder establecer cómo lo vamos a guardar. Vamos a crear un simple catalogo de CDs de musica que almacenara los siguientes datos:

Titulo (cadena de texto max 35)
Artista (cadena de texto max 35)
Genero (cadena de texto max 35)
Año (entero)
Discografica (cadena de texto max 35)

Creando la base de datos

dbfCreate "[PubDir]MisCds.dbf" "Titulo,String,35|Artista,String,35|Genero,String,35|Anio,Integer,0|Discog,Integer,0" "DbActu"

dbfCreate requiere 3 parámetros:

1: La ruta de la DB a crear.
2: Campos.
3: Subrutina a ejecutar cuando haya cambios.

*Si le hacemos doble click podremos acceder a un “asistente” para crear los campos de la tabla con los tipos de datos disponibles.

Hay que recordar que esta acción primero intenta abrir la base de datos y si no existe la crea.

Con eso ya tenemos creada la DB, ahora vamos a mostrarla. Para mostrar usaremos la acción dbfShowTable.

dbfShowTable "[PubDir]sample.dbf" "Rectangle1" "NavigationBar"

dbfShowTable requiere 3 parámetros:

1: La ruta a la DB.
2: Rectángulo destino.
3: Opciones para mostrar (Con o sin barra de navegación, Solo lectura o no).

También podemos personalizar un poco el estilo de la grilla con estas funciones:

.Definimos el tamaño de las columnas
dbfSetColumnWidths "[PubDir]MisCds.dbf" "133|132|104|46|164"
.Definimos el estilo del titulo de las columnas
dbfSetTitleStyle "[PubDir]MisCds.dbf" "White" "Arial" "9" "Normal" "Black"
.Definimos el estilo de las celas
dbfSetCellStyle "[PubDir]MisCds.dbf" "249,249,249" "Arial" "9" "Normal" "WindowText"
.Definimos el estilo de la celda seleccionada
dbfSetHighlightColor "[PubDir]MisCds.dbf" "255,255,225" "Black"
.Traducimos el texto de los botones de navegacion
dbfTranslateHints "Primero|Anterior|Siguiente|Ultimo|Agregar|Eliminar|Editar|Guardar Cambios|Cancelar Edicion"

Con esto ya aprendimos a crear una base de datos y mostrarla en un rectángulo donde podemos navegar los registros. Luego veremos cómo personalizar el ingreso de los datos a la DB.

Screenshots

sshot-1

Descarga:

  db-MisCds.rar (1,3 MiB, 13.408 hits)

Espero que sirva.

BuNKeR