Documentos de Académico
Documentos de Profesional
Documentos de Cultura
0
Las bases de datos
Aunque empezaremos de forma muy bsica, aunque en entregas posteriores veremos
cosas ms avanzadas, todo se andar, as que no pierdas la esperanza de que algn
siglo de estos (el que viene?) acabe con el dichoso Curso Bsico de Programacin
en Visual Basic...
La verdad es que tengo que darme prisa, ya que, si me descuido, la nueva versin del
VB (VB.NET) estar en la calle y muchas de las cosas dichas hasta ahora no sean
vlidas... aunque los conceptos "bsicos" seguirn siendo vlidos, 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 versin que cambie "radicalmente" la forma de "pensar" del Visual Basic actual.
Los ejemplos que voy a utilizar, est hechos con la versin 6.0 del VB, aunque
funcionarn, (o al menos deberan funcionar), perfectamente con las versiones 4.0 y
superiores... confiemos en ello.
Y ya, sin ms dilacin, 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, necesitars un poco de imaginacin, espero que eso
no sea un problema.
Ahora vamos a indicarle al Data1 dnde est la base de datos que queremos usar.
Selecciona el Data1 que hemos aadido al formulario, simplemente haz un "click" en
dicho control, (debera seguir seleccionado, salvo que hayas pulsado con el ratn 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 botn
con los tres puntos suspensivos que indican que se mostrar un dilogo, (esto ltimo
es una "convencin", que nos indica que cuando se seleccione esa opcin, en este
caso al hacer click en el botn, se mostrar un cuadro de dilogo), 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, tendrs 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 conexin, 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, vers que en la cuadrcula 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 aadir otros controles con los cuales
poder mostrar la informacin contenida en dicha tabla de autores.
Vamos a aadir 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 ratn sobre dicho "icono", vers que te muestra un ToolTip
con el texto Label), se aadir 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 operacin dos veces ms, (posiciona cada una de las etiquetas
debajo de la anterior), para obtener un total de tres etiquetas: Label1, Label2 y Label3
respectivamente.
Para aadir las tres cajas de texto que necesitamos, repite la operacin, pero en este
caso el control que debes elegir de la barra de herramientas es:
(TextBox).
Alinalos a la derecha de cada una de las etiquetas anteriores. Ahora tendremos
tambin estos tres controles: Text1, Text2 y Text3, el aspecto del formulario sera el
siguiente:
Una vez diseado el "aspecto" del formulario, (eres libre de adecuarlo a tus gustos
particulares), vamos a indicarle al Visual Basic que nos muestre informacin 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 Ao nacimiento: para el Label3.
Y ya est!
Pulsa F5 para ejecutar el proyecto y vers que se muestra el primer registro,
(seguramente en el ao 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, tambin se modificar en la base de
datos.
Fjate que no hemos usado ni una lnea de cdigo, entre otras cosas porque todo lo
hemos realizado en tiempo de diseo.
Pero ahora vamos a ver cmo hacer que todo esto funcione igual, pero en lugar de
hacerlo en tiempo de diseo, lo haremos en tiempo de ejecucin, es decir: al ejecutar
el proyecto, aunque la asignacin de la propiedad DataSource de las cajas de
texto hay que hacerlo en tiempo de diseo, ya que no se puede hacer en tiempo
de ejecucin.
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, aade un formulario, en ste aade 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, adems de asignar el tamao,
tanto de las cajas de texto como de las etiquetas.
Ya deberas saber que cuando se ejecuta una aplicacin 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 cdigo, para poder introducir este cdigo, 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 vers que tambin funciona.
Para ir abriendo boca de lo que seguir, vamos a aadir una caja de texto en la cual
se podr escribir un nmero y al pulsar INTRO se mostrar el autor que tenga ese
nmero como Au_ID, para ello aade una nueva caja de texto, no asignes el
DataSource, ya que este texbox no estar ligado a la base de datos.
La posicin y el tamao 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 nmero y se har una bsqueda en el contenido del Data1, aqu
te muestro el cdigo:
'
Private Sub Text4_KeyPress(KeyAscii As Integer)
' Se buscar slo cuando pulsemos INTRO
Dim nReg As Long
'
' Comprobar si la tecla pulsada es Intro: vbKeyReturn o 13 que es lo mismo
El Option1 ser el indique que se busque por el ID y Option2 ser para buscar por el
campo Author
SOLUCION:
Private Sub Text4_KeyPress(KeyAscii As Integer)
' Se buscar slo 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 asignacin evita que suene un BEEP
KeyAscii = 0
' Convertir el contenido de TextBox en un nmero
nReg = Val(Text4)
' Buscar la primera coincidencia en el recordset del Data1
If Option1.Value Then
' en el campo Au_ID
Data1.Recordset.FindFirst "Au_ID = " & nReg
End If
If Option2.Value Then
' en el campo Author
Data1.Recordset.FindFirst "Author Like '" & Text4.Text &
"'"
End If
End If
End Sub
Se que hay muchos programadores de VB a los que no les gusta usar el Datacontol
para acceder a las bases de datos; pero tambin se que usar este control es ms
fcil que usar cdigo directo, aunque esto ltimo tambin lo vamos a ver a lo largo
de este curso bsico, incluso lo vamos a mezclar con el Datacontrol, ya que se
puede acceder a bases de datos de las dos formas de forma conjunta.
En esta entrega vamos a ampliar el ejemplo usado en la entrega anterior, para
aadirle algunas opciones nuevas, para aadir nuevos registros y para eliminar
registros existentes, por tanto, si quieres conservar intacta la base de datos
Biblio.mdb, te recomiendo que hagas una copia de la misma. Tambin vamos
a usar la opcin de buscar que puse como ejercicio, por tanto, si no te has ledo las
soluciones de la entrega 34, es conveniente de que le eches un vistazo.
Vamos a empezar por mejorar la bsqueda en la base de datos:
Ahora, vamos a aadir un botn para que busque el primer registro que coincida
con lo escrito, esto es para hacer lo mismo que cuando pulsas Intro en el Text4,
pero para el usuario ser ms lgico que el hecho de tener que pulsar Intro.
Por tanto, aade un nuevo botn, (no te preocupes por ahora dnde colocarlo en el
formulario, ya lo haremos dentro de poco), cmbiale el nombre a cmdBuscar y el
Caption a Buscar, (por defecto ser Command1) y escribe o aade este cdigo
(tambin puedes hacerlo copiando y pegando):
'
Private Sub cmdBuscar_Click()
' Simplemente llamamos al procedimiento Buscar:
Buscar
End Sub
Poca cosa, verdad? Pues es igual de efectivo que pulsando Intro en el Text4,
pruebalo para que veas que funciona.
Creo que ya es hora de que nos vayamos complicando la vida...
Vamos a aadir un botn para seguir buscando a partir del ltimo dato hallado:
Aade un nuevo botn, llmalo cmdBuscarSig y en el Caption pones: Buscar
siguiente, (seguramente el texto lo escribir en dos lneas, pero no te preocupes).
El cdigo a usar en el evento Click de ese nuevo botn sera prcticamente el
mismo que en el de Buscar, aunque antes debemos aadir un nuevo procedimiento
para que busque el siguiente dato al ltimo que busc:
'
Private Sub BuscarSiguiente()
Como hemos visto, el cdigo usado en los dos procedimientos de bsqueda son
prcticamente iguales, as que vamos a unificarlos para crear un slo procedimiento
de bsqueda, de esta forma, refrescars tu memoria y sabrs algo ms de
parmetros en procedimientos, as como parmetros opcionales.
Parmetros opcionales.
Como sabrs, (y si no lo sabes, te lo cuento yo ahora), a partir de la versin 4 de
Visual Basic se pueden usar parmetros opcionales en los procedimientos y
funciones.
Esto quiere decir que podemos usar el procedimiento de varias formas, indicando
todos los parmetros o slo los que realmente son necesarios.
Por ejemplo, en el caso en que estamos ahora, el procedimiento Buscar podra
tener un parmetro opcional para indicarle si es la primera bsqueda o la siguiente.
No voy a entrar en demasiadas explicaciones, ya que este tema lo veremos de
forma ms amplia en otra entrega, sobre todo porque tiene sus pormenores, o lo
que es lo mismo, existen diferencias entre las versiones 4 y posteriores (al menos
hasta la 6) de Visual Basic e incluso en las dos ltimas se puede usar de dos formas
diferentes...
En esta ocasin voy a usar el formato de las versiones 5 y 6, en estas versiones los
parmetros opcionales pueden ser de un tipo de datos diferente a Variant y tambin
pueden indicrsele un valor por defecto, para que, si no se especifica, tenga el valor
indicado; por supuesto, si no le indicamos el valor, tendrn el valor que ese tipo de
datos tengan por defecto, por ejemplo el tipo Boolean tendr un valor False si no se
indica el valor.
Cuando se indican parmetros con tipo, a diferencia de los parmetros del tipo
Variant, no se puede usar IsMissing para comprobar si el parmetro se ha
especificado o no, pero, eso es otro tema...
Este es el cdigo del procedimiento Buscar y a continuacin te indico cmo llamarlo
desde el evento Click del botn cmdBuscarSig:
'
Private Sub Buscar(Optional ByVal Siguiente As Boolean = False)
' Procedimiento para buscar el dato indicado
(12/Feb/01)
' Si Siguiente = True, se busca a partir del registro activo
' Si no se indica, (valdr False), buscar el primer registro
Dim nReg As Long
'
' Buscar la primera coincidencia en el recordset del Data1
'
If Option1.Value Then
' en el campo Au_ID
' Convertir el contenido de TextBox en un nmero
nReg = Val(Text4)
'
' Si se busca el siguiente dato
If Siguiente Then
Data1.Recordset.FindNext "Au_ID = " & nReg
Else
Data1.Recordset.FindFirst "Au_ID = " & nReg
End If
End If
If Option2.Value Then
' en el campo Author
'
' Si se busca el siguiente dato
If Siguiente Then
Data1.Recordset.FindNext "Author Like '" & Text4.Text &
"'"
Else
Data1.Recordset.FindFirst "Author Like '" & Text4.Text &
"'"
End If
End If
End Sub
"'"
"'"
End If
End If
End Sub
Fjate que he cambiado el nombre del parmetro y he creado una variable interna
que es la que posteriormente se usa para saber si se busca desde el primero o
desde el anterior.
En el caso de que no se haya especificado el parmetro, la comprobacin de
IsMissing se cumple, por tanto aqu le indicaremos el valor que queramos que tenga
por defecto, en nuestro ejemplo no es necesario asignar ningn valor, ya que False
es el valor que tendr la variable Siguiente si no le asignamos ningn valor.
Por tanto en este ejemplo, podramos haber hecho slo lo siguiente, sin necesidad
de usar el IsMissing:
Siguiente = CBool(vSiguiente)
Pero lo he mostrado de la forma recomendable, para que sepas qu hacer en el
caso de que el valor por defecto fuese otro del que Visual Basic asigna a las
variables por defecto.
Una vez visto el procedimiento de bsqueda, vamos a aadir dos nuevos botones
para Aadir y Eliminar registros.
Recuerda lo que te dije al principio: haz una copia de la base de datos para que
las pruebas no afecten al contenido de la misma.
Aade dos nuevos botones y asignales los nombres cmdAdd y cmdBorrar, as como
los captions Aadir y Eliminar, el cdigo ser el siguiente:
'
Private Sub cmdAdd_Click()
' Aadir un nuevo registro
Data1.Recordset.AddNew
End Sub
Private Sub cmdBorrar_Click()
' Eliminar el registro actual
Data1.Recordset.Delete
End Sub
Tanto cuando se aade como cuando se borra, se debera mover el registro actual
para que los cambios tengan efecto en la base de datos, ya que si se aade un
nuevo registro y el mismo no se actualiza, se pierde.
Para probarlo, ejecuta el proyecto, pulsa en Aadir y directamente sin hacer nada
ms cierra el ejecutable, (pulsando en la x del formulario o ventana).
Ejecuta de nuevo el proyecto y si pulsas en el botn de ir al ltimo registro del
Datacontrol, vers que no hay ningn registro nuevo.
Ahora vuelve a pulsar en Aadir y escribe lo que quieras en las cajas de texto del
Nombre y Ao de nacimiento y pulsa en el botn de ir al primer registro y despus
al ltimo (ya sabes que me refiero a los botones del Datacontrol), vers que ahora
si se muestra dicho registro y si pulsas en el botn de ir al anterior, vers que se
salta un nmero... ese es el que haba reservado para nosotros, pero al no
actualizar los datos, se perdi en el limbo...
Ser por estos detalles que algunos programadores prefieran usar cdigo puro y
duro en lugar del Datacontrol?
Puede... pero no creo que sea por este motivo... ya que esto mismo se puede
mejorar y no es necesario abandonar el Datacontrol para que todo funcione ms o
menos como debiera...
Primero vamos a hacer que los nuevos datos tengan algo, para ello, le asignaremos
la cadena Nuevo al nombre del autor y haremos que se desplace al ltimo registro,
para que los datos sean permanentes, (si no modificamos algunos de los campos, el
nuevo registro se perdera)
En el caso de Eliminar, vamos a movernos al primer registro, para que el registro
activo sea uno con informacin.
Este sera el cdigo de los eventos Click de los dos botones:
'
Private Sub cmdAdd_Click()
' Aadir un nuevo registro
Data1.Recordset.AddNew
' Aadimos algn texto, para que no se pierda este registro
Text2 = "Nuevo"
' Movemos al ltimo registro para que los cambios se hagan
permanentes
' y se muestre el nuevo registro
Data1.Recordset.MoveLast
End Sub
Private Sub cmdBorrar_Click()
' Eliminar el registro actual
Data1.Recordset.Delete
' Movemos al primer registro para que los cambios se hagan
permanentes
' (tambin podriamos haberlo movido al ltimo registro)
Data1.Recordset.MoveFirst
End Sub
Toma nota de la forma en que se hara para mover al primer o al ltimo registro del
Recordset.
Tambin habra que tener en cuenta si hemos sobrepasado el principio o el final de
los registros, cosa que ocurre cuando no hay ms registros, para ello podemos
comprobar tanto EOF (End Of File, final del fichero) como BOF (Beginnig Of File,
principio del fichero) y en caso de que sea cierto (True), avisar o simplemente no
hacer nada...
Esto slo habra que hacerlo al eliminar registros, ya que al aadir se supone que
habr al menos el que aadimos...
'
Private Sub cmdBorrar_Click()
'
' Comprobar que hay registros, porque si no hay, dar error
If (Data1.Recordset.EOF Or Data1.Recordset.BOF) Then
' Avisar de que no hay registros
Else
Nota:
He de aclarar que las pruebas sobre acceso a bases de datos con el ADO
datacontrol estn realizadas con el Visual Basic 6.0 y el Service Pack 4 (SP4). Si el
cdigo anterior te produjera un error, primero comprueba que est escrito
correctamente (hay que empezar por lo ms simple), si sigue sin funcionar, prueba
a cambiar el 4.0 que est entre comillas por 3.51, si an as tampoco funciona...
prueba a instalar el ADO, creo que se instala automticamente con el Internet
Explorer 5.5, si a pesar de todo esto tampoco funciona... no se que aconsejarte,
aparte de que consigas el VB6 y el SP4... o tambin que pases de esta entrega...
Te explico un poco el cdigo anterior.
La constante es para que sea fcil modificarla si prefieres usar otra base de datos.
El With Adodc1 es para indicarle al VB que vamos a modificar varias propiedades
del ADO datacontrol, aqu supongo que no has modificado el nombre de dicho
control, si lo has hecho, cambia Adodc1 por el nombre que hayas puesto.
El mtodo .ConnectioString, segn dice la ayuda del Visual Basic: Contiene la
informacin que se utiliza para establecer una conexin a un origen de datos. Osea,
es lo que le dice al ADO datacontrol de que base de datos obtener los datos y
tambin de que tipo es, en este caso es una base de datos del tipo Microsoft.Jet, o
lo que es lo mismo, del tipo Access.
Por tanto Provider= indica de que tipo de base de datos se trata y Data Source=
el path de la base de datos en cuestin, (fjate que se usa la constante con el path
y nombre de la base de datos).
Por ltimo a la propiedad .RecordSource le indicamos que es lo que queremos que
maneje el datacontrol, en este caso una tabla de la base de datos; aunque tambin
podramos haberle indicado una consulta, pero esto ltimo lo veremos en otra
ocasin.
Ahora vamos a aadir unos cuantos controles al formulario, para poder trabajar con
los datos manejados por el ADO datacontrol.
Los controles que usaremos sern 3 etiquetas y 3 cajas de texto, pero ambos sern
un array de controles, (en el ejemplo de las entregas 34 y 35 usamos controles
independientes, pero creo que es ms cmodo usar array de controles).
Label1
Text1
Label2
Text2
Option1
Option2
cmdBuscar
cmdBuscarSig
cmdSalir
cmdAdd
cmdBorrar
Adodc1
es un array)
0a2
0a2
Ninguno (no
Ninguno (no
Ninguno (no
Ninguno (no
Ninguno (no
Ninguno (no
Ninguno (no
Ninguno (no
Ninguno (no
Ninguno (no
es
es
es
es
es
es
es
es
es
es
un
un
un
un
un
un
un
un
un
un
array)
array)
array)
array)
array)
array)
array)
array)
array)
array)
Aqu te muestro el cdigo usado para que funcione este invento, como
comprobars, es prcticamente el mismo que el usado en las entregas anteriores,
con unas cuantas aadiduras para que funcione correctamente con el ADO
datacontrol. Por tanto creo que no necesita ms explicaciones que las que se
incluyen en el propio cdigo.
El cdigo del procedimiento Buscar es el que tiene ms cambios, entre otras cosas
porque la forma de buscar en ADO es diferente al de DAO, en este ltimo (DAO), se
usan FindFirst, FindNext, etc. y en ADO slo existe Find.
Tambin he usado un marcador en la rutina de buscar; por si no se hallan datos,
que el registro activo sea el mismo que estaba antes de buscar. chale un vistazo a
los comentarios que hay en el cdigo.
'
'-----------------------------------------------------------------------------
Adodc1.Recordset.Delete
'
' Movemos al primer registro para que los cambios se hagan
permanentes
' (tambin podriamos haberlo movido al ltimo registro)
Adodc1.Recordset.MoveFirst
End If
End Sub
Private Sub cmdBuscar_Click()
' Buscar el primer registro que coincida con el dato buscado
Buscar
End Sub
Private Sub cmdBuscarSig_Click()
' Buscar el siguiente
Buscar True
End Sub
Private Sub cmdSalir_Click()
Unload Me
End Sub
Private Sub Form_Load()
'
Text2 = ""
Option2.Value = True
'
' Indicar el path correcto de la base de datos
' ACUERDATE DE PONER EL PATH CORRECTO!
Const sPathBase As String = "C:\Program Files\Microsoft Visual
Studio\VB98\BIBLIO.MDB"
'
' Crear la conexin manualmente
' Con "Provider=Microsoft.Jet.OLEDB.4.0;" se permite abrir bases
de datos de Access 2000
With Me.Adodc1
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & sPathBase & ";"
' Indicarle de que tabla vamos a leer los datos
.RecordSource = "Authors"
End With
' Indicar el DataSource de los Textboxes
' ya que con ADO se puede asignar en tiempo de ejecucin
Dim i As Long
For i = 0 To 2
Set Text1(i).DataSource = Adodc1
Next
' Asignar los campos
Text1(0).DataField = "Au_ID"
Text1(1).DataField = "Author"
Text1(2).DataField = "Year Born"
' Mostrar en las etiquetas el campo a usar
For i = 0 To 2
Label1(i).Caption = Text1(i).DataField & ":"
Next
End Sub
Private Sub Text2_KeyPress(KeyAscii As Integer)
' Se buscar slo cuando pulsemos INTRO
'
' Comprobar si la tecla pulsada es Intro: vbKeyReturn o 13 que es
lo mismo
If KeyAscii = vbKeyReturn Then
On Error Resume Next
' Esta asignacin evita que suene un BEEP
KeyAscii = 0
'
Buscar
End If
End Sub
Private Sub Buscar(Optional ByVal Siguiente As Boolean = False)
' Procedimiento para buscar el dato indicado
(18/Ene/01)
' Si Siguiente = True, se busca a partir del registro activo
Dim nReg As Long
Dim vBookmark As Variant ' En ADO debe ser Variant, no vale un
String
Dim sADOBuscar As String
'
' Iniciamos la deteccin de errores
On Error Resume Next
'
' Buscar la primera coincidencia en el recordset del Data1
If Option1.Value Then
' Convertir el contenido de TextBox en un nmero
nReg = Val(Text2)
' en el campo Au_ID
sADOBuscar = "Au_ID = " & nReg
End If
If Option2.Value Then
' en el campo Author
sADOBuscar = "Author Like '" & Text2.Text & "'"
End If
' Guardar la posicin anterior, por si no se halla lo buscado...
vBookmark = Adodc1.Recordset.Bookmark
'
If Siguiente = False Then
' Buscar desde el principio
Adodc1.Recordset.MoveFirst
Adodc1.Recordset.Find sADOBuscar
Else
' Busca a partir del registro actual
Adodc1.Recordset.Find sADOBuscar, 1
End If
' Devolver un error si no se halla lo buscado
' aunque no siempre es as...
If Err.Number Or Adodc1.Recordset.BOF Or Adodc1.Recordset.EOF Then
Err.Clear
MsgBox "No existe el dato buscado o ya no hay ms datos que
mostrar."
' Posicionar el recordset en la posicin guardada
Adodc1.Recordset.Bookmark = vBookmark
End If
End Sub
Confo en que no acabes tarumba con tantas vueltas que estoy dando... la entrega
anterior fue sobre las clases en Visual Basic y esta que te ofrezco ahora sigue los
pasos de la entrega 36 sobre el acceso a bases de datos, aunque en esta ocasin
sin usar el data control y con DAO. En otra entrega, veremos lo mismo, pero
usando ADO... hasta que finalmente nos quedemos con ese tipo de acceso a datos,
ya que Microsoft no "quiere" que sigamos usando DAO y lo trata como obsoleto,
aunque no lo es tanto... pero como hay que est a la ltima en esto de
programacin, habr que hacerles caso... as que tambin ve preparando el cuerpo,
ya que a partir del 2002 la "nueva ola" ser .NET y habr que ir "conciencindose"
de la nueva tecnologa... pero no te preocupes que tambin podrs aprenderla...
para que no te quedes atrs, aunque eso ser en un futuro... talvez no muy
lejano...
cmdMover, un array de 0 a 3
Label1, un array de 0 a 2, Text1, un array de 0 a 2
cmdAdd, cmdActualizar, cmdBorrar
El segundo grupo:
Label2, Text2, Option1, Option2, cmdBuscar, cmdBuscarSig
Elbotn de salir es: cmdSalir
En el men Proyecto/Referencias... selecciona Microsoft DAO 3.51 Object
Library -aunque tambin puedes seleccionar cualquier otra que empiece por
Microsoft DAO... cualquiera de ellas vale... puede que tambin tengas la 3.6 e
incluso la 2.5/3.51 Compatibility Library, todo depender de la versin de DAO que
tengas instaladaA diferencia de cuando seleccionas un componente, despus de cerrar el cuadro de
dilogo no vers nada nuevo en la ventana de herramientas, ya que las referencias
no aaden nuevos controles, pero si que aaden nuevas libreras que exponen
objetos que podemos usar en nuestra aplicacin...
Uno de esos objetos es el objeto Database, el cual se usar para "mantener" una
referencia a la base de datos, con la cual podremos abrir recordsets que nos
permitirn, entre otras cosas, introducir y modificar los datos de cualquier tabla
incluida en la base de datos a la que queramos acceder...
Qu es un Recordset?
Segn la ayuda de Visual Basic, "Un objeto Recordset representa los registros de
una tabla o los registros del resultado de ejecutar una consulta". Una consulta es...
eso... una consulta... una especie de bsqueda avanzada, en la que podemos
indicar varios criterios de bsqueda... aunque tambin, como vers pronto, es algo
ms sencillo que todo eso. No te preocupes que veremos algunos ejemplos de
"consultas".
Para poder manejar los objetos Database y Recordset, hay que crear unas variables
para dichos objetos, por tanto en la seccin de declaraciones del formulario
(General/Declaraciones), aade estas lneas:
Option Explicit
Private db As Database
Private rs As Recordset
De esta forma tendremos una variable llamada db que apuntar al objeto Database
y otra, llamada rs, que apuntar a un objeto del tipo Recordset.
En el evento Form_Load asignaremos los "objetos reales" a esas dos variables.
Para poder abrir la base de datos, necesitamos saber el path en el que se encuentra
dicha base de datos, para ello vamos a crea una constante, en la cual tendrs que
indicar el path correcto, es decir, el sitio exacto en el que se encuentra la base de
datos, en nuestro caso ser BIBLIO.MDB, la base de ejemplo que se incluye con
Visual Basic.
Const sPathBase As String = "C:\Program Files\Microsoft Visual
Studio\VB98\BIBLIO.MDB"
A continuacin abrimos la base de datos usando la funcin OpenDatabase, la cual
devuelve un objeto de la base de datos recin abierta, uno de los parmetros que
espera recibir dicha funcin es el path de la base de datos que queremos abrir, en
nuestro ejemplo usaremos el contenido de la constante anterior: sPathBase.
If Err = 0 Then
MostrarRegistro
End If
'
Err = 0
End Sub
Lo primero que hacemos es comprobar si hay datos en el recordset, para ello
comprobamos que ni BOF ni EOF den como resultado un valor verdadero. Cuando
BOF es True, significa que el recordset est "antes" del primer registro, por otro
lado EOF ser True cuando estemos despus del final de los registros. Cuando
estas dos propiedades devuelven un valor verdadero, es que no hay datos
en el recordset.
A continuacin movemos el "puntero" del recordset al registro indicado, segn el
valor de Index sabremos que botn se ha pulsado y por tanto que "accin" tenemos
que elegir. En los comentarios puedes ver qu valor corresponde con cada
movimiento.
Como es posible que el usuario pulse en el botn anterior o siguiente despus de
estar al principio o al final respectivamente, tenemos que "controlar" si ya estamos
al principio o al final del recordset para posicionarnos en el registro adecuado.
Por ltimo, si todo ha ido bien, (no se ha producido un error), llamamos al
procedimiento que muestra el contenido del registro activo en las cajas de texto.
Esto ltimo lo hace el procedimiento MostrarRegistro, cuyo cdigo es el siguiente: