Site hosted by Angelfire.com: Build your free website today!

aprende Visual Basic - www.usuarios.com/ib307182


Introducción BASES de DATOS

Durante el curso vamos a trabajar con bases de datos de Access, no porque sean las mejores, que no lo son, sino porque son las bases de datos más extendidas. Además el propio Visual Basic viene con un fichero de base de datos Biblio.mdb con el que podremos hacer pruebas.

Para ir abriendo boca voy a mostrar como realizar una pequeña aplicación que muestre en un formulario una tabla de una base de datos. A partir de este ejemplo que se irá comentando efusivamente conoceremos la base para realizar nuestras aplicaciones y lo iremos ampliando para conocer todas las posibilidades que existen en el manejo de bases de datos.

Vamos a hacer el ejemplo de 2 formas distintas:

 

CONTROLES DE BASES DE DATOS

Sin una sola línea de código vamos a poder visualizar cualquier tabla de una base de datos con todos sus registros.

Únicamente nos harán falta 2 controles:

Data: este control viene en la caja de herramientas (toolbox) nada más cargar Visual Basic. Es un control muy potente, el más importante para bases de datos. Nos permite abrir una base de datos y manipular su contenido: situarnos en un registro concreto de una tabla, eliminar, añadir o modificar registros, etc...

DBgrid: Si el control no se encuentra inicialmente disponible en la toolbox, tendremos que buscarlo en la opción Custom Controls del menú Tools (si estás utilizando la versión inglesa), aparecerá como 1ª opción de las muchas que existen Apex Data Bound Control, actívala y acepta. Este control permite visualizar un conjunto de registros, cabeceras incluidas, que haya sido indicado en un control Data.

Habrá que situar los 2 controles en el formulario y modificar las siguientes propiedades:

Control Data:

DataBaseName: le indicamos donde está situado el archivo que contiene la base de datos, en este caso Biblio.mdb que estará en el mismo directorio de Visual basic.

RecordSource: aparecerán las tablas de las que consta la base de datos para que elijamos con cual queremos trabajar. Más adelante veremos que podemos indicar mediante una sentencia SELECT campos de distintas tablas que cumplan ciertas condiciones.

Control DBgrid:

DataSource: indicamos el control Data con el que estará conectado este control que si se ha cambiado el nombre debe ser Data1. Es el único dato que necesita este control, de esta forma visualizará la tabla que hayamos indicado en la propiedad Recordsource del Data.

Al ejecutar la aplicación, el formulario tendrá un aspecto como este:

Como podéis observar junto con los datos aparece la cabecera que nos indica a que campo corresponde cada columna.

También nos podemos desplazar por todos los registros de los que consta la tabla de 2 formas: utilizando la barra de desplazamiento del control DBgrid o con las flechas del control Data, las cuales nos permiten desplazarnos al primer registro, registro anterior, registro posterior y último registro respectivamente.

Por ahora las únicas operaciones que podremos hacer con este formulario son las de desplazarnos a través de la tabla que indiquemos (no tiene por que ser necesariamente la tabla Autores o Authors, hay muchas más tablas en el archivo de base de datos Biblio.mdb), aunque para no haber introducido una sola línea de código ya es bastante.

Más adelante veremos las modificaciones que habrá que hacer para poder realizar otras operaciones más útiles sobre los datos: añadir, eliminar, modificar, buscar, o que al hacer click sobre un autor nos aparezcan los libros que ha escrito en otro control DBgrid o en otro formulario, por ejemplo.

 

VISUALIZAR DATOS DE UNA TABLA MEDIANTE CODIGO

Como contrapartida a obtener datos sin una sola línea de código, vamos a ver ahora como trabajar con bases de datos sin la ayuda de controles especializados, es decir, mediante código únicamente.

Y qué sentido puede tener el complicarnos la vida de esta manera. Si tengo unos controles que me lo hacen todo, ¿Para qué voy a hacer las cosas sin ayudarme de ellos? Pues se puede decir que mediante el código podemos manejar la información con una mayor flexibilidad, podemos superar los límites que siempre tienen los controles y personalizar mejor nuestras aplicaciones. Aunque siempre es recomendable llegar a un compromiso entre el uso del código y de los controles de bases de datos.

Vamos a visualizar el contenido también de la tabla autores de la base Biblio.mdb mediante código aunque ayudándonos del control ListBox para visualizar los registros.

Los pasos a seguir son los siguientes:

Creamos un formulario nuevo y abrimos la ventana de código con el botón derecho del ratón o con F7, situándonos en la sección Form y el evento Load ya que vamos a hacer que aparezcan los resultados nada más cargar la aplicación.

Definimos las variables:

Dim mibase as Database

Dim autores as Recordset

La primera línea declara una variable que contendrá la base de datos completa y la variable autores contendrá la tabla que vayamos a mostrar, aunque el tipo de datos recordset puede contener también campos de diversas tablas y no sólo de una como ya veremos.

Asignamos valores a las variables:

set mibase=Workspaces(0).Opendatabase(App.path & "\biblio.mdb")

set autores=mibase.openrecordset("authors", dbOpenTable)

Este tipo de variables se inicializan con Set puesto que realmente se trata de objetos que disponen de sus propiedades y sus métodos.

Al objeto mibase se le asigna la base de datos Biblio.mdb y al poner App.path le estamos diciendo que la busque en el mismo directorio donde se encuentra la aplicación, cuando almacenéis la aplicación hacerlo en el directorio que ofrece Visual Basic por defecto ya que es el mismo del archivo Biblio.mdb.

Al colocar Workspaces(0) le decimos que trabajamos en el área de trabajo por defecto y con el método Opendatabase abrimos una base de datos existente, también podíamos haber utilizado otros métodos como CreateDataBase con lo que habríamos creado una base de datos con un determinado nombre.

Respecto al objeto autores le estamos asignando los registros de la tabla Authors, que es un nombre de tabla que debe estar en la base de datos mibase. dbOpenTable es una constante que indica que los registros son de una única tabla determinada, las otras opciones son dbOpenDynaset y dbOpenSnapShot que nos permiten abrir campos de varias tablas para modificarlos o sólo para lectura repectivamente, aunque ya los veremos en profundidad posteriormente.

 

PROPIEDADES Y METODOS DEL OBJETO RECORDSET

Antes de continuar vamos a echar un vistazo a las posibilidades de manejo que tiene un objeto de tipo Recordset como la variable autores que hemos declarado. De esta forma lo veremos todo más claro para nuestro ejemplo.

El objeto autores tiene toda la información necesaria sobre la tabla Authors, lo que hay que saber es como tratarla para obtener lo que queramos:

En primer lugar disponemos de 4 métodos que nos permitirán situarnos en cualquier registro del recordset:

De esta forma la sentencia autores.movefirst nos sitúa en el primer registro del recordset.

Si queremos asignar a un textbox el contenido de un campo del recordset haremos lo siguiente:

text1.text=autores!author

Si el nombre del campo es compuesto utilizaremos

text1.text=autores("year born")

 

Lo que necesitamos para presentar todos los registros de autores es un bucle que nos recorra el recordset y por cada iteración añadiremos al control ListBox los campos que nos interese.

¿Y cómo sabemos las veces que debemos recorrer el bucle, es decir, como sabemos los registros que tiene el recordset?. Lo que haremos por ahora es comprobar si hemos llegado al final del recordset mediante la propiedad EOF (End Of File), su funcionamiento es similar al de los ficheros de texto. Si comprobamos esta propiedad y hacemos autores.movenext cuando ya no hay más registros causaremos un error en tiempo de ejecución.

El listado de la rutina que va añadiendo los registros a un listbox es la siguiente (acordaros de incluir en el formulario un control ListBox que no lo he dicho antes):

 

Se ha declarado la variable cadena para contener los 3 campos que aparecerán en el listbox utilizando el método AddItem.

También se ha utilizado la propiedad no vista hasta ahora Recordcount que nos sirve para comprobar que el recordset autores tiene al menos un registro, ya que si nos colocamos en el primer registro con movefirst sin que haya ningún registro provocaremos un error en tiempo de ejecución. Debemos tratar de realizar nuestros programas de una forma robusta, eliminando todos los posibles errores que puedan aparecer.

En el bucle While nos vamos situando cada vez en el registro posterior y añadiéndolo a la lista. Cuando llegamos al final de la tabla autores.EOF saldremos del bucle.

Este sería el resultado final, cada campo aparece a la misma distancia por que hemos separado cada campo mediante chr(9), una tabulación:

 

Con esto acabamos el capítulo de introducción, en capítulos posteriores entraremos más a fondo en la utilización de las bases de datos. Espero que mientras tanto practiquéis lo visto hasta ahora y me enviéis vuestras preguntas y sugerencias.