You are on page 1of 8

Te creías que ya no iba a seguir con el curso básico ¿verdad?

Pues te has vuelto a
equivocar... Sé que últimamente no soy muy "constante" en esto de las entregas
del Curso Básico, pero... alguna que otra vez me dejo "ver". Y ya lo estás "viendo",
aquí estamos de nuevo, con una nueva entrega del Curso Básico, el tema en esta
ocasión será:

Las bases de datos (¡por fin!)

Aunque empezaremos de forma muy básica, aunque en entregas posteriores
veremos cosas más avanzadas, todo se andará, así que no pierdas la esperanza de
que algún siglo de estos (¿el que viene?) acabe con el dichoso Curso Básico de
Programación en Visual Basic...
La verdad es que tengo que darme prisa, ya que, si me descuido, la nueva versión
del VB (VB.NET) estará en la calle y muchas de las cosas dichas hasta ahora no
sean válidas... aunque los conceptos "básicos" seguirán siendo válidos, no así los
conceptos "particulares" de cada una de las versiones del Visual Basic... en su
momento veremos esas diferencias, por ahora hagamos como que no hay ninguna
nueva versión que cambie "radicalmente" la forma de "pensar" del Visual Basic
actual.
Los ejemplos que voy a utilizar, está hechos con la versión 6.0 del VB, aunque
funcionarán, (o al menos deberían funcionar), perfectamente con las versiones 4.0
y superiores... confiemos en ello.

Y ya, sin más dilación, empecemos con el acceso a bases de datos desde el Visual
Basic, para ello usaremos como base de ejemplo la incluida en todas las versiones
del VB: Biblio.mdb, si no la tienes, necesitarás un poco de imaginación, espero
que eso no sea un problema. (Guille, aquí tendrías que haber dicho algo como...
"para una mente tan inteligente como la tuya", de esa forma, le darías coba al
personal y se mosquearía menos contigo, por no tener la base de ejemplo,
¿cuando vas a aprender?)

Después del comentario del "otro Guille", empecemos con:

El diseño del formulario
Hay quién se queja de que no explico de forma "simplona" cómo crear los
formularios y añadir los controles que se usan, en esta ocasión, "intentaré"
hacerlo... a ver si lo consigo.

Crea un nuevo proyecto normal, automáticamente se añadirá un formulario
llamado Form1.
Pulsa F4 para que se muestre la ventana de propiedades y en la propiedad
Caption, escribe: Entrega 34, acceso a datos, verás que en la barra de
"caption" del formulario se muestra lo escrito.
Ahora vamos a añadir un Control Data que será el que nos permita acceder a la
base de datos que necesitemos usar, para ello, pulsa en el icono: que está en la
barra de herramientas del IDE del Visual Basic, si no está visible dicha barra de
herramientas, puedes mostrarla de la siguiente forma: (te recuerdo que estoy
usando la versión inglesa del Visual Basic, así que si las traducciones son
erróneas... échale un poco de imaginación...)
En el menú Ver (View), pulsa en la opción Barra de Herramientas (Toolbox).
Para añadir cualquiera de los controles que están en la mencionada barra de
herramientas, simplemente tienes que hacer una doble pulsación (doble-click) en
el icono deseado y se añadirá al formulario. En este caso, se añadirá un Data
Control llamado Data1 y el aspecto en el formulario será este:
Selecciónalo (aunque ya debe estar seleccionado) y arrástralo, (es decir: deja
pulsado el botón derecho mientras lo mueves), hasta la parte superior del
formulario, (para dejar espacio libre al resto de controles que añadiremos a
continuación)

Configurando el Data Control (o Control Data)
Ahora vamos a indicarle al Data1 dónde está la base de datos que queremos usar.
Selecciona el Data1 que hemos añadido al formulario, simplemente haz un "click"
en dicho control, (debería seguir seleccionado, salvo que hayas pulsado con el
ratón en el formulario), pulsa F4 para mostrar la ventana de propiedades y en
dicha ventana pulsa en la propiedad DatabaseName, en la columna de la
izquierda te mostrará un botón con los tres puntos suspensivos que indican que se
mostrará un diálogo, (esto último es una "convención", que nos indica que cuando
se seleccione esa opción, en este caso al hacer click en el botón, se mostrará un
cuadro de diálogo), para seleccionar un fichero de bases de datos.
El fichero que vamos a usar, Biblio.mdb, normalmente está en el mismo directorio
en el que está instalado el Visual Basic, por tanto, tendrás que "localizar" dicho
directorio, normalmente suele estar en Archivos de programa\Microsoft Visual
Studio\VB98 en el caso del VB6, en el caso del VB5 puede estar en Archivos de
programa\DevStrudio\VB o simplemente en DevStudio\VB, de la unidad de
arranque, por defecto en C. En el caso del VB4, no recuerdo ahora en que
directorio se instalaba...
Una vez seleccionada la base de datos, ya disponemos de una conexión, mediante
el control Data a dicha base de datos.
Pero, (como es habitual, siempre hay un pero), en casi todas las bases de datos
suelen existir varias "tablas" que contienen datos. Para seleccionar una de las
tablas, vuelve a mostrar la ventana de propiedades del control Data y selecciona la
propiedad RecordSource, verás que en la cuadrícula de la derecha hay una lista
desplegable, en ella se muestran las tablas disponibles, en nuestro ejemplo
usaremos la de Autores, por tanto selecciona dicho elemento de la lista, puede
que en lugar de llamarse Autores, (si la base de datos no está traducida), se llame
Authors.
Ahora si que tenemos configurado nuestro control Data para que muestre los datos
almacenados en una tabla de una base de datos.

Para continuar con nuestro ejemplo, vamos a añadir otros controles con los cuales
poder mostrar la información contenida en dicha tabla de autores.

Vamos a añadir tres etiquetas (Label) y tres cajas de texto (TextBox)
En la barra de herramientas haz doble-click en el icono de las etiquetas: , (si
posicionas el puntero del ratón sobre dicho "icono", verás que te muestra un
ToolTip con el texto Label), se añadirá un nuevo control al formulario llamado
Label1, posiciona dicha etiqueta en la parte izquierda del formulario, debajo del
control Data1 y vuelve a repetir la operación dos veces más, (posiciona cada una
de las etiquetas debajo de la anterior), para obtener un total de tres etiquetas:
Label1, Label2 y Label3 respectivamente.
Para añadir las tres cajas de texto que necesitamos, repite la operación, pero en
este caso el control que debes elegir de la barra de herramientas es:
(TextBox). Alinéalos a la derecha de cada una de las etiquetas anteriores. Ahora
tendremos también estos tres controles: Text1, Text2 y Text3, el aspecto del
formulario sería el siguiente:
Vamos a cambiar el tamaño de las etiquetas y las cajas de texto.
Selecciona la primera etiqueta (Label1) y haz que el alto de la misma sea 315,
esto puedes hacerlo de dos formas:
1.) Usando el el ratón, arrastra hacia arriba desde la parte inferior del control (al
seleccionar se muestran unos cuadros que indican que puedes cambiar el tamaño
arrastrando en cualquiera de ellos, según la posición de dicho "cuadro" servirá para
el ancho, alto o ambos)
2.) Escribiendo dicho tamaño en la ventana de propiedades, en este caso en la
propiedad Height.

Para que las tres etiquetas tengan el mismo tamaño, podemos hacerlo también de
dos formas, para que se cambien de tamaño todas las etiquetas a un mismo
tiempo, en lugar de ir cambiado cada una de ellas por separado:
1.) Selecciona las tres etiquetas y escribe el tamaño en la propiedad Height de la
ventana de propiedades.
2.) Selecciona las etiquetas Label3, Label2 y por último Label1, (manteniendo
pulsado la tecla Ctrl y haciendo un simple Click con el ratón), abre el menú
Formato (Format) y selecciona la opción Hacer del mismo tamaño (Make same
size), de dicho menú, selecciona Altura (Height). En este procedimiento, es
importante que el último control seleccionado sea el que indique el tamaño con el
que queremos igualar el resto de los controles.

Seguramente todo esto ya lo sabrás, pero... (de alguna forma hay que hacer que
esta entrega sea más larga, ¿verdad Guille?)

A continuación vamos a cambiar el tamaño de las cajas de texto:
Selecciona Text1 y haz que el ancho sea: 2895.
Selecciona los otros dos controles e iguálalos en el ancho... imagínate cómo...
El aspecto final será este otro:

Una vez diseñado el "aspecto" del formulario, (eres libre de adecuarlo a tus gustos
particulares), vamos a indicarle al Visual Basic que nos muestre información de la
tabla de autores en cada una de las cajas de texto:
Selecciona las tres cajas de texto, pulsa en la ventana de propiedades y selecciona
la propiedad DataSource, con esta propiedad indicamos que Data control
queremos usar con cada caja de texto, (o con cualquier otro control que tenga la
mencionada propiedad).
En la lista desplegable, selecciona el único elemento que hay: Data1 (o el nombre
que le hayamos dado al control data).
Ahora vamos a "enganchar" cada una de los textboxes con un registro de la
mencionada tabla de autores:
Selecciona el control Text1 y en la ventana de propiedades selecciona DataField,
de la lista desplegable selecciona Au_ID.
En los otros controles, selecciona Author para el Text2 y Year Born para el
Text3.
Ahora asignemo al caption de las etiquetas los datos que nos mostrará, asigna el
Caption de cada una de las tres etiquetas, (ya sabes, pulsa en la etiqueta, muestra
la ventana de propiedades y modifica la propiedad Caption), con estos valores: ID:
para el Label1, Autor: para el Label2 y Año nacimiento: para el Label3.

¡Y ya está!

Pulsa F5 para ejecutar el proyecto y verás que se muestra el primer registro,
(seguramente en el año de nacimiento Year Born, no te muestre nada hasta que
llegues al registro 73.)
Para mostrar el resto de registros, pulsa en los botones de "desplazamiento" del
control data, dichos controles sirven para ir al: Primero, anterior, siguiente y último
respectivamente.
Si escribes o modificas lo que se muestra, también se modificará en la
base de datos.

Fíjate que no hemos usado ni una línea de código, entre otras cosas porque todo lo
hemos realizado en tiempo de diseño.

Pero ahora vamos a ver cómo hacer que todo esto funcione igual, pero en lugar de
hacerlo en tiempo de diseño, lo haremos en tiempo de ejecución, es decir: al
ejecutar el proyecto, aunque la asignación de la propiedad DataSource de las
cajas de texto hay que hacerlo en tiempo de diseño, ya que no se puede
hacer en tiempo de ejecución.
Para ello usaremos otro formulario, con los mismos controles que el actual, pero
sin "conectarlos" a ninguna tabla de una base de datos ni nada de eso.
Antes guarda el proyecto actual, yo lo he llamado Basico34.vbp, el formulario lo he
guardado como fBasico34.frm

Crea un nuevo proyecto, añade un formulario, en éste añade un Data control, tres
etiquetas y tres cajas de texto, selecciona las tres cajas de texto y en la ventana
de propiedades selecciona DataSource y asigna el Data1, además de asignar el
tamaño, tanto de las cajas de texto como de las etiquetas.

Ya deberías saber que cuando se ejecuta una aplicación de Visual Basic y por
defecto se muestra un formulario, al mostrarse dicho formulario, se ejecuta, (entre
otros), el evento Form_Load, será en este evento donde le indiquemos al Visual
Basic que base de datos usaremos, que tabla y que campos.
Veamos el código, para poder introducir este código, haz doble click en el
formulario, por defecto se mostrará el evento Form_Load.

'
Private Sub Form_Load()
' Indicarle el path de la base de datos
' ¡ACUERDATE DE PONER EL PATH CORRECTO!
Data1.DatabaseName = "C:\Program Files\Microsoft Visual
Studio\VB98\BIBLIO.MDB"
'
' Indicarle que tabla queremos usar
Data1.RecordSource = "Authors"
'
' Asignar a cada uno de los texboxes el campo de la tabla
Text1.DataField = "Au_ID"
Text2.DataField = "Author"
Text3.DataField = "Year Born"
End Sub

Pulsa F5 y verás que también funciona.

Para ir abriendo boca de lo que seguirá, vamos a añadir una caja de texto en la
cual se podrá escribir un número y al pulsar INTRO se mostrará el autor que tenga
ese número como Au_ID, para ello añade una nueva caja de texto, no asignes el
DataSource, ya que este texbox no estará ligado a la base de datos.
La posición y el tamaño de esa caja de texto que he puesto es la siguiente: Left=
1500, Top= 120, Width = 615 y 315 de altura. El nombre es Text4.

Lo que vamos a hacer es que cuando se pulse INTRO en ese control, se convertirá
el valor introducido a un número y se hará una búsqueda en el contenido del
Data1, aquí te muestro el código:
'
Private Sub Text4_KeyPress(KeyAscii As Integer)
' Se buscará sólo cuando pulsemos INTRO
Dim nReg As Long
'
' Comprobar si la tecla pulsada es Intro: vbKeyReturn o 13 que
es lo mismo
If KeyAscii = vbKeyReturn Then
' Esta asignación evita que suene un BEEP
KeyAscii = 0
' Convertir el contenido de TextBox en un número
nReg = Val(Text4)
' Buscar la primera coincidencia en el recordset del Data1
' en el campo Au_ID
Data1.Recordset.FindFirst "Au_ID = " & nReg
End If
End Sub

Para realizar la búsqueda he usado FindFirst, esto hará que se muestre (o asigne
como registro activo) el primer registro que coincida con lo indicado, en este caso
el Au_ID que tenga como valor el número indicado en la variable nReg o sea el
valor introducido en el Text4.
En caso de que no se halle el valor buscado, no se alterará el registro actual, es
decir "aparentemente" no pasará nada y todo se quedará tal y como estaba... o
bien se pondrá en el primer registro, creo que es esto último lo que ocurre...

Ahora vamos a buscar en el campo Autor.

A diferencia del campo Au_ID, que es numérico y sólo buscamos una coincidencia
"exacta", el campo Autor es del tipo String y en él podríamos buscar una
coincidencia exacta, al igual que en el caso del ID o bien "algo" que esté contenido
en dicho campo, tal es el caso de que queramos buscar la primera coincidencia de
una autora llamada Jane; como habrás comprobado, la información del autor se
muestra en el formato Apellido, Nombre, por tanto si queremos buscar el nombre
sería más bien complicado, ya que lo que buscamos está al final...
Para ello podemos usar los signos de comodines ? (interrogación) y * (asterisco).
-El primero de ellos sirve para indicarle que no tenga en cuenta el caracter que
esté en la posición indicada por la interrogación, por tanto, si buscamos esto: J?an,
mostrará tanto Juan como Jean, es decir, dará por bueno cualquier secuencia que
empiece por "J", tenga cualquier caracter y acabe por "an".
-En el segundo caso, el del asterisco, si éste está al principio de lo escrito, le
estaremos indicando que encuentre todo lo que tenga al final el texto indicado:
*Jane, buscará el primer registro que acabe con Jane, pero si especificamos el
asterisco al final: Jane*, mostrará todos los registros que empiecen por Jane, por
último, si usamos dos asteriscos, uno al principio y otro al final: *Jane*, nos
mostrará el primero que "contenga" el nombre indicado, no importando los
caracteres que tenga antes o después.
Cuando busquemos datos exactos la comparación la haremos con el signo igual
(=), pero si queremos usar la búsqueda con comodines no nos servirá el signo
igual, ya que hay que indicarle que queremos usar una comparación más versátil,
en este caso usaremos LIKE.
Hay que saber que al buscar en campos del tipo String (cadenas de caracteres),
hay que usar los apóstrofes para indicar el principio y final de la cadena buscada,
si no lo hiciéramos, se produciría un error.
Después de lo dicho, el código de búsqueda quedaría de la siguiente forma:

'
Private Sub Text4_KeyPress(KeyAscii As Integer)
' Se buscará sólo cuando pulsemos INTRO
Dim nReg As Long
'
' Comprobar si la tecla pulsada es Intro: vbKeyReturn o 13 que
es lo mismo
If KeyAscii = vbKeyReturn Then
' Esta asignación evita que suene un BEEP
KeyAscii = 0
' Convertir el contenido de TextBox en un número
nReg = Val(Text4)
' Buscar la primera coincidencia en el recordset del Data1
' en el campo Author
Data1.Recordset.FindFirst "Author Like '" & Text4.Text &
"'"
End If
End Sub

Fíjate que no he usado ningún comodín, por tanto tendrás que escribirlos tú, por
ejemplo, para buscar la primera Jane, tendrás que escribir: *Jane en la caja de
texto y pulsar Intro.
Haz la prueba, ejecuta el proyecto y
escribe *Jane en el Text4 y pulsa Intro, te mostrará el registro 1897, (Lenser,
Jane),
ahora escribe *Jane* y tras pulsar Intro, te mostrará el registro 840 que contiene
Janet, (Hamlin, Janet),
escribe *J y verás que se muestra el registro número 1242, (Baer, J)
para terminar estas pruebas, escribe J* y en esta ocasión se mostrará el registro
1, (Jacobs, Russell)

Y ahora un ejercicio:
Añade dos controles Options para que podamos buscar tanto por el número del ID
como por el nombre del Autor, el aspecto del formulario sería este:
El Option1 será el indique que se busque por el ID y Option2 será para buscar por
el campo Author.

La solución en la próxima entrega.

Bueno, hasta aquí ha llegado esta primera entrega referente al acceso a datos.
En futuras entregas veremos cómo realizar búsquedas (o consultas), así como
otras cosas más, entre ellas acceder a una base de datos sin el Data Control y
también al acceso a bases de datos del tipo ADO (activeX Data Objects).
Pero eso será en otra ocasión, hasta entonces, ¡que lo programes bien!