You are on page 1of 144

VB Access 2000 Ferm Vil 1

Visual Basic para Aplicaciones del


Access 2007
VB Access 2000 Ferm Vil 2
TuCarpeta significa una carpeta de tu ordenador donde es conveniente
que grabes todos los ejercicios de este manual.
1
Fundamentos de VBA
a) Ejecuta el Access 2007:
- En la pantalla inicial:
Ms en Office Online [Descargas]
Buscar: extensiones ara rogramadores Access 2007
Descargamos y/o ejecutamos el fichero: AccessDe!eloer"xtensions#exe
A partir de este momento en el Men$ del Office tendremos una nueva opcin:
%rogramador
- Botn del Office
Opciones de Access
Centro de confianza
[Configuracin del Centro de confianza]
Configuracin de Macros
Habilitar todas las macros (no recomendado .)
[Aceptar]
[Aceptar]
- En la pantalla inicial, clic en la opcin: Base de datos en &lanco
- Sitate en TuCarpeta, es decir en el campo '(uardar en)*, debe aparecer "TuCarpeta
- En el campo '+om&re de arc,i!o*, escribe: %-O(-AMA.
y CLC en [Aceptar]
[Crear]
Acabamos de crear en "nuestra carpeta una &ase de datos de nombre %-O(-AMA.
- Haz lo siguiente:
Cinta de Opciones: Herramientas de base de datos
Grupo: Macro
Visual Basic
Acabamos de acceder al "ditor de Visual Basic
b) Vamos a escribir nuestro primer programa en 'Visual Basic*.
En la ventana '%-O(-AMA./M0dulo1120digo3* y debajo de la lnea:
Otion 2omare Data&ase
Escribe el siguiente programa:
VB Access 2000 Ferm Vil 3
.u& %rograma113
M.(BO4 '5ola Mundo*
"nd .u&
Habrs observado varias cosas:
Las "sentencias .u& y "nd .u& aparecen de color azul
Aunque escribas M.(BO4 (todo en maysculas), aparece MsgBox
Las sentencias .u&6 "nd .u& 7 MsgBox son "palabras reservadas. Dicho de otra forma:
forman parte del lengua8e 'Visual Basic*
Acabamos de escribir nuestro primer "rocedimiento*, ya veremos que hay diferentes tipos de
rogramas. De momento tenemos un programa %-O2"D9M9"+:O.
Observa la estructura de un procedimiento:
.u& nombrePrograma13
--------------------
--------------------
--------------------
"nd .u&
c) Vamos a "ejecutar el procedimiento '%rograma1*.
Haz lo siguiente:
- Men Ver
Ventana nmediato
- Escribe:
%rograma1 y pulsa [Return]
Si todo va bien, aparece una ventana de nombre 'Microsoft Access* con el mensaje:
5ola Mundo y el botn [Aceptar]
- Haz CLC en el botn [Aceptar]
- "Cierra la ventana '9nmediato* (es decir: CLC en la 4 del vrtice superior derecho de la
ventana '9nmediato*).
- "Cierra la ventana M0dulo1. Es decir, CLC en la 4 del extremo superior derecho de la
ventana '%rogramas/M0dulo1120digo3*.
- CLC en el icono 'Ver Microsoft Access*:
- "Cierra el "Access. Es decir, CLC en la 4 del extremo superior derecho de la ventana
'Microsoft Access*.
A la pregunta: Desea guardar los cambios en el diseo de mdulo "Mdulo1?, haz CLC
en el botn [S]. Cmo el nombre M0dulo1 ya nos va bien, haz CLC en [Aceptar]
VB Access 2000 Ferm Vil 4
Aunque la mayor parte del desarrollo de una aplicacin en VBA se realiza de forma
"visual: controles en formularios y estableciendo propiedades, tambin es cierto que una
parte muy importante de todo programa, es el "cdigo que se encargar de responder a
los e!entos (situaciones), que se producirn en la aplicacin.
En este ejercicio se trata de estudiar el lenguaje de programacin que necesitamos para
escri&ir el c0digo.
d) Ejecuta el Access:
- Ms ###
- Sitate en 'TuCarpeta*. Es decir, en el campo 'Buscar en)* debe aparecer TuCarpeta.
- CLC en %-O(-AMA., para seleccionar el fichero.
- CLC en [Abrir]
- Como slo tenemos un mdulo (Mdulo1) ya est seleccionado, haz un doble clic en
M0dulo1
- Observa la 'Barra de :areas del ;indo<s* (ltima lnea de la pantalla): Tenemos
activado el 'Microsoft Visual Basic* y al lado tenemos el 'Microsoft Access*
desactivado. Es decir, por el slo hecho de acceder a un m0dulo, automticamente nos
situamos en el '"ditor de VB*
- Haz CLC en 'Microsoft Access* de la "barra de tareas: est claro lo que sucede no?.
Volvemos al Access. Vuelve a hacer CLC, pero ahora en 'Microsoft Visual Basic* de la
barra de tareas y volveremos al '"ditor de VB*
- Sita el cursor de escritura al final de la ventana, despus de la lnea "nd .u& del
procedimiento %rograma1.
- Escribe lo siguiente:
Sub Programa2()
MsgBox "Esto es el primer mensae"
!Esto es un comentario" por#ue al principio $
de la l%nea &e escrito un ap'stro(e
MsgBox "Esto es el segundo mensae"
!Esto es otro comentario #ue ocupa una l%nea
MsgBox "Esto es el tercer mensae"
End Sub
- Antes de ejecutar el programa, asegrate de que est bien escrito, concretamente:
Para introducir un "comentario en el cdigo, basta comenzar la lnea con el
"apstrofe (tecla del interrogante ?). El comentario aparece automticamente en
color verde.
Podemos escribir lneas de programa distribuyndolas en varias lneas, sin ms
que escribir el s=m&olo de su&ra7ado (tecla del "menos) recedido de un
esacio#
- Graba lo que hemos hecho, es decir:
Men Archivo
Guardar PROGRAMAS
o
CLC en el icono '(uardar*
VB Access 2000 Ferm Vil 5
- Ejecuta el programa, es decir:
Men Ver
Ventana nmediato
Escribe:
%rograma2 y pulsa [Return]
Espero que te funcione. En el siguiente apartado haremos un programa con algn
error, para observar cmo nos avisa el Access.
- "Cierra la ventana '9nmediato*, es decir CLC en la 4 del extremo superior derecho de la
ventana correspondiente.
e) Escribe el siguiente procedimiento:
Sub Programa)()
MSS*B+, "A -er #ue pasa"
! Est. claro #ue &emos escrito un error
End Sub
- Ejecuta el programa anterior.
No es necesario que hagas 'Men$ Ver > Ventana 9nmediato*, basta que pulses las teclas
[CTRL][G]
Escribe: %rograma? y [Return]
- Si todo funciona correctamente, el programa "protesta. Tenemos siempre dos
posibilidades:
[Ayuda]
[Aceptar]
La primera vez que ejecutamos un programa, es lgico pensar que nos hemos
equivocado al escribir y por sta razn es mejor hacer CLC en [Aceptar] (si no
sabemos de donde viene el error y al ejecutar el programa ya corregido, nos vuelve a
decir lo mismo, es ms lgico hacer CLC en [Ayuda])
- Haz CLC en [Aceptar]
- Observa que el Access nos seala la lnea que no entiende.
Corrige el error, es decir en lugar de M..(BO4 escribe M.(BO4.
- Para continuar, haz:
Men Ejecutar
Continuar
o si quieres ir ms deprisa, pulsa la tecla [F@]
- Acaba de ejecutar el programa, es decir: CLC en el botn [Aceptar] del mensaje 'A !er
Aue asa*
- "Cierra la ventana de '9nmediato*.
- Graba lo que hemos hecho hasta ahora (CLC en el icono '(uardar*)
VB Access 2000 Ferm Vil 6
Recapitulemos lo que hemos hecho hasta este momento:
"structura de un rocedimiento)
Sub NombrePrograma()
..........
..........
..........
End Sub
MsgBox 'mensa8e*
Aparece una ventana que contiene el "mensaje y un botn [Aceptar]. Al hacer CLC en
el [Aceptar] anterior, se contina la ejecucin del programa.
Ya veremos ms adelante que el 'MsgBox* es otro tipo de programa, ya incorporado
al VBA, llamado funci0n.
Si queremos aBadir comentarios a un programa, basta comenzar la lnea de comentarios
con un a0strofe.
Si queremos que una "instruccin ocupe ms de una l=nea, basta "romper la lnea de
programa con el s=m&olo de su&ra7ado recedido de un esacio.
En los siguientes apartados nos iremos introduciendo poco a poco en el VBA.
f) Con el M0dulo1 a la vista. Escribe el siguiente procedimiento:
Sub Programa/()
0im n1 As 2nteger" n2 As 2nteger
n1 3 2nputBox("Escribe un n4mero")
n2 3 2nputBox("Escribe otro n4mero")
MsgBox "5a Suma es 3 " 6 n1 7 n2
End Sub
Antes de ejecutar el programa anterior observa:
- El %rograma C sirve para sumar dos nmeros: el programa nos pedir los dos nmeros
(nputBox) y nos dar (MsgBox) el resultado de sumarlos.
- Los dos nmeros a sumar son las !aria&les n1 y n2
- En un programa VBA es conveniente declarar previamente las !aria&les que hemos de
utilizar en el procedimiento.
- La forma de declarar las variables es:
Dim variable1 As 9nteger, variable2 As 9nteger
A cada variable hemos de especificar su "tipo, aunque sea el mismo.
- 9nteger quiere decir que el valor que tomarn las variables son nmeros enteros entre
32.768 y 32.767
VB Access 2000 Ferm Vil 7
- El smbolo D sirve para concatenar datos. En nuestro caso:
Aparecer el mensaje 'Ea suma es F* (porque est entre comillas) y a continuacin
(porque hay el smbolo D) el resultado de n1+n2 (porque no est entre comillas).
Veamos pues lo que hace el %rograma C:
- Definimos dos variables n1 y n2 tipo entero
- El programa nos pedir un nmero (nputBox), una vez escrito el nmero, el programa lo
"guardar en la !aria&le n1.
- El programa nos pedir otro nmero (segundo nputBox), una vez escrito, el programa lo
"asignar a la !aria&le n2.
- El programa nos mostrar (MsgBox) el mensaje 'Ea suma es F* y a continuacin el
resultado de la suma de los dos nmeros introducidos (n1 + n2).
Ejecuta el programa de la siguiente forma:
- Pulsa [2:-E][(]
- Escribe: %rogramaC y [Return]
- Al mensaje: '"scri&e un n$mero*. ntroduce el nmero @27 y haz CLC en [Aceptar] o
pulsa la tecla [Return].
- Al mensaje '"scri&e otro n$mero*, escribe 100 y [Return]
- Si todo va bien, aparece un 'MsgBox* con el mensaje: 'Ea suma es F G27*
- Haz CLC en [Aceptar]
- Si no te ha funcionado, debes observar detenidamente lo que has escrito y corregir los
errores que has hecho.
- Vuelve a ejecutar el %rograma CH
Con la "Ventana nmediato (llamada tambin ventana de "depuracin), a la vista.
Sita el cursor de escritura detrs de la palabra %rogramaC y pulsa [Return]
A la primera "pregunta escribe >@7II
A la segunda "pregunta, escribe un nmero que no sea "nteger, por ejemplo ?67
Si todo va bien, aparece:
La suma es = -5795
Es decir, el programa "funciona pero incorrectamente, ya que >@7II J ?67 F
/@7I@6?
- El error que hace el programa es el siguiente: al declarar las variables como nmeros
enteros, si introducimos un nmero no entero (por ejemplo ?67), lo transforma en nmero
entero (en nuestro caso C).
VB Access 2000 Ferm Vil 8
g) Vamos a solucionar el problema del %rogramaCH
- Escribe el siguiente programa:
Sub Programa8()
0im n1 As 0ouble" n2 As 0ouble
n1 3 2nputBox("Escribe un n4mero")
n2 3 2nputBox("Escribe otro n4mero")
MsgBox "5a Suma es 3 " 6 n1 7 n2
End Sub
Como el %rograma@ es muy parecido al %rogramaC, en lugar de escribir de nuevo el
%rograma@, sera ms rpido:
Selecciona el %rogramaC
CLC en el icono 2oiar o Men$ "dici0n > 2oiar
Sita el cursor al final del %rogramaC, en una lnea nueva.
CLC en el icono %egar
Corrige el C de la copia por un @
Corrige los 9nteger de la copia por Dou&le
- Ejecuta el %rograma@, introduciendo los nmeros:
-5,79
+2,61
Si todo va bien aparece >?61K
La instruccin:
Dim n1 As Dou&le6 n2 As Dou&le
Significa que declaramos las variables n1 y n2 como nmeros decimales.
- Acurdate de grabar todo lo que vas haciendo (CLC en el icono (uardar)
h) Vamos a hacer a partir de ahora "programas autoexplicativos, es decir: entre las lneas de
programa aparecen en comentarios (apstrofe), las explicaciones. Por supuesto, si no quieres
escribir los comentarios en tus programas, stos funcionarn exactamente igual.
- Escribe en el M0dulo1 el siguiente procedimiento:
Sub Programa9()
!:.lculo del .rea de un ;<2=>*?5+
0im bas As 0ouble
0im alt As 0ouble
0im are As 0ouble
!+bser-a #ue de(ino el .rea como -ariable $
a di(erencia del programa anterior
bas 3 2nputBox("@:u.l es la base del tri.nguloA")
alt 3 2nputBox("@:u.l es la altura del tri.nguloA")
are 3 bas B alt C 2
!+bser-a como asigno el -alor de la )D -ariable $
a partir de las otras dos
MsgBox "El .rea del tri.ngulo es " 6 are
End Sub
VB Access 2000 Ferm Vil 9
- Ejecuta el %rogramaG
- Grbalo (CLC en el icono (uardar)
i) Escribe en el M0dulo1 de la base de datos %-O(-AMA. el siguiente procedimiento:
Sub Programa7()
!Programa #ue nos pide nuestro nombre
0im nom As String
!El tipo "String" signi(ica texto
nom 3 2nputBox("Escribe tu nombre E apellidos")
MsgBox "Fola " 6 nom
End Sub
- Ejecuta el programa
- Grbalo.
j) Escribe en el M0dulo1 el siguiente procedimiento:
Sub ProgramaG()
!Estructura de programaci'n 2(H;e&nHElseHEnd 2(
0im num1 As 0ouble" num2 As 0ouble
!0e(ino dos -ariables tipo 0ouble
num1 3 2nputBox("Escribe el primer n4mero")
num2 3 2nputBox("Escribe el segundo n4mero")
!El programa nos solicita dos n4meros
!Atenci'n con la estructura de programaci'n $
#ue aparece a continuaci'n
2( num1 I num2 ;&en
MsgBox "El primer n4mero " 6 num1 6 " es menor #ue " $
6 "el segundo " 6 num2
Else
MsgBox "El primer n4mero " 6 num1 6 " no es menor #ue " $
6 "el segundo " 6 num2
End 2(
End Sub
- Prueba el programa y grbalo
- La estructura de programacin: 9f > :,en > "lse > "nd 9f es la estructura de programacin
ms sencilla, observa su funcionamiento:
9f condici0n :,en
9nstrucci0n1
9nstrucci0n2
"lse
9nstrucci0n?
9nstrucci0nC
"nd 9f
VB Access 2000 Ferm Vil 10
Traducido al castellano dira:
.i se cumple la condicin entonces
ejecuta las instrucciones 1 y 2
en caso contrario (es decir sino se cumple la condicin)
ejecuta las instrucciones 3 y 4
Fin de la estructura.
k) Escribe en el M0dulo1 el siguiente procedimiento:
Sub ProgramaJ()
0im A As String
A 3 2nputBox("@Kuieres continuar (SC>)A")
2( A 3 "S" +r A 3 "s" ;&en
MsgBox "Pepe"
End 2(
End Sub
- Prueba el programa y grbalo.
- Veamos el funcionamiento del %rogramaI:
En primer lugar definimos una variable tipo .tring, que guardar . o +
Si a la pregunta LMuieres continuarN, contestamos .. En la variable 'a* se
guardar el valor '.*
Gracias a la estructura 9f > :,en > "nd 9f (observa que no es necesaria la clusula
"lse). El programa escribir %ee o no.
l) El programa anterior tiene un problema, en efecto:
- Ejecuta el %rogramaI
- A la pregunta LMuieres continuarN, contesta: .= y [Return]
- Observa que no funciona, es decir, no aparece la ventana con el mensaje "Pepe. Es lgico
que as sea, ya que en la condicin del 9f > :,en tenemos: aF*.* Or aF*s*
Vamos a solucionar este problema:
- Escribe en el M0dulo1, el siguiente programa:
Sub Programa10()
0im A As String B 1
A 3 2nputBox("@Kuieres continuar (SC>)A")
2( A 3 "S" +r A 3 "s" ;&en
MsgBox "Pepe"
End 2(
End Sub
- Ejecuta el programa, contestando '.=* a la pregunta LMuieres continuarN.
VB Access 2000 Ferm Vil 11
- La diferencia entre el programa 10 y el 9 est en que:
En el programa 9 definimos una variable de texto de longitud variable: Dim a As
.tring
En el programa 10 definimos una variable de texto de longitud fija (exactamente de
longitud = 1 carcter): Dim a As .tringO1
- Si necesitramos una variable de texto de longitud 5, escribiramos: Dim a As .tringO@
- Acurdate de grabar el programa (CLC en el icono (uardar).
m) Escribe en el M0dulo1 el siguiente procedimiento:
Sub Programa11()
0im nom As String B 7
nom 3 2nputBox("Escribe tu nombre E apellidos")
MsgBox "Fola " 6 nom
End Sub
- Ejecuta el programa y si todo va bien observars que "trunca tu nombre+apellidos a 7
caracteres, debido a la definicin de la variable nom F .tringO7 F 7 caracteres.
n) Vamos a estudiar otra estructura de programacin, escribe en el M0dulo1 el siguiente
procedimiento:
Sub Programa12()
0im contador As 2nteger
contador 3 1
0o L&ile contador I3 8
MsgBox "Pepe"
contador 3 contador 7 1
5oop
End Sub
- Ejecuta el programa
- Si todo va bien debe aparecer 5 veces el mensaje '%ee*
- Vamos a ver si entendemos el '%rograma12*.
Dim contador As 9nteger
Definimos una variable de nombre contador y tipo 9nteger
contador F 1
nicializamos (asignamos) la variable contador a un valor igual a la unidad.
Do ;,ile condicin
nstruccin 1
nstruccin 2
Eoo
VB Access 2000 Ferm Vil 12
Se trata de la estructura de programacin Do > ;,ile > Eoo, que funciona de la
siguiente forma:
Mientras se vaya cumpliendo la condicin, se ejecutar la instruccin 1 y 2
Es decir, en nuestro caso:
Mientras la variable contador sea inferior o igual a @:
1) Aparece el mensaje '%ee*
2) El valor del contador se incrementa en una unidad.
Veamos:
nicialmente el contador = 1
Como se cumple la condicin (contador<= 5), aparece '%ee* y contador = 2
Como se cumple la condicin (contador <= 5), aparece '%ee* y contador = 3
Se repetir el proceso anterior, mientras el contador <= 5
Conclusin: al ejecutar el %rograma12, aparece @ !eces el mensaje '%ee*.
o) Se trata de hacer un programa que nos escriba tantas veces como queramos %"%"H
La solucin podra ser la siguiente:
Sub Programa1)()
0im pregunta As String B 1
pregunta 3 "S"
0o L&ile pregunta 3 "S" +r pregunta 3 "s"
MsgBox "PEPE"
pregunta 3 2nputBox("@Kuieres continuarA")
5oop
End Sub
- Escribe el programa anterior en el M0dulo1, prubalo y grbalo.
p) Se trata de hacer un programa que vaya sumando los nmeros (enteros) que queramos.
La solucin podra ser la siguiente:
Sub Programa1/()
0im num As 2nteger" total As 2nteger
total 3 0
num 3 2nputBox("Escribe un n4mero")
0o L&ile num IM 0
total 3 total 7 num
num 3 2nputBox("Escribe un nue-o -alor")
5oop
MsgBox "5a Suma total es " 6 total
End Sub
- Escribe el programa anterior en el M0dulo1. Prubalo y grbalo.
VB Access 2000 Ferm Vil 13
- Est claro, que debido a la condicin de nuestro While, para acabar hemos de escribir 0.
- Observa de qu forma conseguimos "acumular la suma:
total F total J num
Es decir: nuevo valor de total = anterior valor de total + valor actual de num.
q) Vamos a estudiar una nueva estructura de programacin.
Escribe en el M0dulo1 el siguiente programa:
Sub Programa18()
0im indice As 2nteger
Nor indice 3 1 ;o 10 Step 2
MsgBox "El -alor del %ndice es 3 " 6 indice
>ext
MsgBox "5o siento se &a acabadoO " 6 $
"El 4ltimo -alor del %ndice &a sido " 6 $
indice
End Sub
- Ejecuta el programa anterior y grbalo.
- Observa el funcionamiento del ciclo FO- > :O > +"4::
For indiceF1 :o 10 .te 2
9nstrucci0n1
9nstrucci0n2
+ext
Las instrucciones "encerradas entre For y +ext, en nuestro caso un mensaje que nos
da el valor del ndice, se van repitiendo: For indice =1 To 10 tep 2, es decir, desde el valor
inicial de "indice que es 1 hasta 10 de 2 en 2.
Veamos:
Al iniciarse el ciclo:
ndice = 1
Se muestra el mensaje '"l !alor del =ndice es F 1*
Al encontrarse la sentencia +ext, se vuelve a iniciar el ciclo.
Al volverse a iniciar el ciclo:
ndice = 3 (ya que .te F 2)
Se muestra el mensaje '"l !alor del =ndice es F ?*
Al encontrarse la sentencia +ext, se vuelve a iniciar el ciclo.
Al volverse a iniciar el ciclo:
ndice = 5
Aparece el mensaje: '"l !alor del =ndice es F @*
Al volverse a iniciar el ciclo:
ndice = 7
Aparece el mensaje: '"l !alor del =ndice es F 7*
VB Access 2000 Ferm Vil 14
Al volverse a iniciar el ciclo:
ndice = 9
Aparece el mensaje: '"l !alor del =ndice es F I*
Al volverse a iniciar el ciclo:
ndice = 11
Cmo tenamos de empezar por 1 y acabar en 10 (de 2 en 2). Salimos del ciclo For >
:o > +ext
Y aparece el mensaje (que hay fuera del ciclo):*Eo siento se ,a aca&ado# "l $ltimo !alor del
=ndice ,a sido 11*
r) Al trabajar con la sentencia MsgBox, slo podemos visualizar un mensaje o valor, ya que
para visualizar el siguiente MsgBox es necesario antes "cerrar el anterior. Nos gustara "ver
todos los mensajes o valores que genera el programa.
Escribe en el M0dulo1 el siguiente procedimiento:
Sub Programa19()
0im num As 2nteger" i As 2nteger
0im nom As String
num 3 2nputBox("@:u.ntas -eces #uieres #ue te saludeA")
nom 3 2nputBox("@:u.l es tu nombreA")
Nor i 3 1 ;o num
0ebugOPrint "Fola " 6 nom
>ext
End Sub
- Ejecuta y graba el %rograma1G
- Observa:
Definimos dos variables "nteger, la primera: 'num*, que indicar el nmero de
"mensajes, en nuestro caso el nmero de veces que se ha de repetir el ciclo For >
:o > +ext. La segunda variable integer 'i*, corresponde al '=ndice* del ciclo For >
:o > +ext
La variable 'nom*, tipo texto (String) almacenar "nuestro nombre.
El programa nos pregunta: 'cuntas !eces Aueremos el saludo*, que no es ms
que el valor de la variable 'num* o nmero de veces que queremos se repita el
ciclo For > :o > +ext.
Observa la sentencia que est en el ciclo For > :o > +ext:
De&ug#%rint '5ola ' D nom
ndica que la frase "Hola + el nombre introducido, se escriba en la Ventana 9nmediato.
La ventaja que tiene la sentencia De&ug#%rint a diferencia del MsgBox, es que todo lo que se
escribe en la ventana "nmediato, permanece.
Ten en cuenta que el anel inferior de la "Ventana nmediato, donde escribimos el nombre del
procedimiento para que se ejecute y tambin donde aparece el contenido de los "Debug.Print,
se puede hacer ms grande.
VB Access 2000 Ferm Vil 15
s) Se trata de hacer un programa que "resuelva cualquier ecuacin de 2 grado.
Recordemos:
Dada la ecuacin: ax
2
J &x J c F 0, con 'a* diferente de 0
Definimos "discriminante de la ecuacin:
Discriminante F &
2
> Cac
Si Discriminante P 0
Las soluciones de la ecuacin son:
X1 =
a
nte Discrimina b
2
+
X2 =
a
nte Discrimina b
2

Si Discriminante F 0
La nica solucin de la ecuacin es:
X =
a
b
2

Si Discriminante Q 0
La ecuacin no tiene soluciones "reales
- Escribe en el M0dulo1 el siguiente programa:
Sub Programa17()
0im A As 0ouble
0im b As 0ouble
0im c As 0ouble
0im dis As 0ouble
0im x1 As 0ouble
0im x2 As 0ouble
0im x As 0ouble
A 3 2nputBox(":oe(iciente de xP2 3 ")
0ebugOPrint ":oe(iciente de xP2 3 " 6 A
2( A 3 0 ;&en
0ebugOPrint ">o es una ecuaci'n de 2Q grado"
Else
b 3 2nputBox(":oe(iciente de x 3 ")
0ebugOPrint ":oe(iciente de x 3 " 6 b
c 3 2nputBox(";ermino independiente 3 ")
0ebugOPrint ";ermino independiente 3 " 6 c
dis 3 b P 2 H / B A B c
2( dis I 0 ;&en
0ebugOPrint "5as soluciones son imaginarias"
End 2(
2( dis 3 0 ;&en
x 3 (Hb) C (2 B A)
0ebugOPrint "5a ecuaci'n tiene una 4nica soluci'n " $
6 "#ue es 3 " 6 x
End 2(
2( dis M 0 ;&en
VB Access 2000 Ferm Vil 16
x1 3 (Hb 7 S#r(dis)) C (2 B A)
x2 3 (Hb H S#r(dis)) C (2 B A)
0ebugOPrint "x1 3 " 6 x1
0ebugOPrint "x2 3 " 6 x2
End 2(
End 2(
End Sub
- Ejecuta el programa anterior para los siguientes casos:
a = 0
a = 1, b = 1, c = 1
a = 1, b = -4, c = 4
a = 1, b = 1, c = -6
Prubalo tambin para valores decimales
- Observa detenidamente cmo estn escritos los 9F > "+D 9F
- .Ar es una funcin incorporada que calcula la raz cuadrada.
- Recuerda que es muy importante gra&ar el "trabajo que vas haciendo (CLC en el icono
(uardar)
t) Vamos a "definir otro tipo de variable.
Escribe en el M0dulo1 el siguiente procedimiento:
Sub Programa1G()
0im A(1 ;o )) As 0ouble
0im i As 2nteger
Nor i 3 1 ;o )
A(i) 3 2nputBox("2ntroduce un n4mero")
>ext
0ebugOPrint "5os n4meros #ue &aE en la matriR sonS "
Nor i 3 1 ;o )
0ebugOPrint "A(" 6 i 6 ")3 " 6 A(i)
>ext
End Sub
- Ejecuta el procedimiento %rograma1K varias veces, observando detenidamente su
funcionamiento.
- Veamos:
En nuestro programa, necesitamos "introducir 3 nmeros. Podramos utilizar 3 variables
(como hicimos en el programa 17) o una variable especial llamada matriR o arra7 de una
dimensin que "guarde tres valores.
La variable A del programa 18 es una "matriz de una dimensin (llamada tambin !ector)
de 3 valores.
VB Access 2000 Ferm Vil 17
Observa la declaracin de nuestra matriz:
Dim A(1 To 3) As Double
A= nombre de la variable
1 To 3 = valores distintos que puede tomar, llamado tambin =ndice de
la matriz.
Si en la declaracin hubiramos escrito: Dim A1?3 As Dou&le
sera equivalente a escribir: Dim A10 :o ?3 As Dou&le
es decir una matriz unidimensional de 4 valores o ndice 4, ya que por
omisin el 0 es el primero y el ltimo el nmero que se indica).
Observa de qu forma "indicamos un valor concreto de la matriz:
A(1) es el primer valor
A(2) es el segundo
A(3) es el tercero
u) Vamos a hacer un programa ms complicado.
Observa la siguiente tabla:
Lunes Martes Mircoles Jueves Viernes
nicio Jornada Laboral 8 10,5 6 9 7
Hora final de la Jornada 14 17 13,5 13 18
Resulta que cada da de la semana hacemos una jornada laboral distinta, en el ejemplo de la
tabla (que representa una semana determinada), el lunes empezamos a trabajar a las 8h y
terminamos a las 2h de la tarde, el martes empezamos a trabajar a las 10 y media y
terminamos a las 17h etc.
Necesitamos de entrada un programa que nos permita introducir los 10 nmeros que
representan la hora de inicio y la hora de finalizacin de la jornada laboral, para cada uno de
los das laborables de la semana.
La solucin a nuestro problema, podra ser la utilizacin de una matriz de 2 dimensiones. Una
dimensin indicara el inicio y el final de la jornada diaria (2 valores) y la otra dimensin
indicara cada uno de los das laborables (5 valores).
Matriz de dos dimensiones:
Una dimensin = 2 valores
Otra dimensin = 5 valores
Total de valores de la matriz = 2 x 5 = 10 !alores
La matriz correspondiente la declararemos: Dim A11 :o 26 1 :o @3 As Dou&le, de forma que:
A(1,3) indicar la hora de inicio del miSrcoles
A(2,4) indicar la hora de finaliRaci0n del 8ue!es
Etc.
- Escribe en el M0dulo1 el siguiente programa:
Sub Programa1J()
0im A(1 ;o 2" 1 ;o 8) As 0ouble
VB Access 2000 Ferm Vil 18
0im i As BEte" As BEte
Nor 3 1 ;o 8
Nor i 3 1 ;o 2
A(i" ) 3 2nputBox("&ora inicio E despuTs &ora (inaliRaci'n" para cada d%a de la semana"
empeRando por el lunes E acabando en el ue-es")
>ext
>ext
Nor 3 1 ;o 8
Nor i 3 1 ;o 2
0ebugOPrint A(i" )
>ext
>ext
End Sub
- Ejecuta el programa, introduciendo los valores de la tabla, siguiendo el orden que nos
indica el inut&ox del programa, es decir, debers escribir los nmeros de la tabla en el
orden: 8; 14; 10,5; 17; etc.
Si todo funciona correctamente, en la "ventana de depuracin deberan aparecer los
nmeros que has introducido, siguiendo el orden de introduccin.
- Vamos a intentar entender el programa 19, ya que aparecen unos cuantos "elementos
nuevos:
Dim A(1 To 2, 1 To 5) As Double
Definimos la matriz de 2 dimensiones: 2 x 5 = 10 valores tipo "Double.
Dim i, j As Byte
Definimos 2 variables tipo B7te. Byte no es ms que un nmero de 0 a 255. Ya que
stas variables (i, j) correspondern a los ndices de dos ciclos FO- > :O > +"4:, no
hay necesidad de declararlas 9nteger. La nica diferencia es que las variables B7te
ocupan menos memoria que las 9nteger
For j=1 To 5
For i=1 To 2
A(i,j) = nputBox("....)
Next
Next
Se trata de dos ciclos for to next anidados, veamos como funcionan:
Al inicio 8F1
For i=1 To 2
A(i,1)= nputBox("...)
Next
Es decir:
J=1
=1
A(1,1)=
=2
A(2,1)=
J=2
=1
A(1,2)
=2
A(2,2)
J=3
=1
VB Access 2000 Ferm Vil 19
A(1,3)
=2
A(2,3)
Etc.
Etc.
For j=1 To 5
For i=1 To 2
Debug.Print A(i,j)
Next
Next
Se trata de dos ciclos for to next anidados, igual que los anteriores, con la nica
diferencia que en este caso nos escribe en la ventana de depuracin los valores que hemos
"guardado en los anteriores ciclos for > to > next anidados.
v) El programa anterior, programa 19, es muy bueno para utilizar matrices bidimensionales y
ciclos anidados, pero es completamente intil.
Se tratara de "modificar el programa anterior para conseguir que el programa nos calculara el
n$mero total de ,oras tra&a8adas a la semana.
- Escribe en el M0dulo1 el siguiente programa:
Sub Programa20()
0im A(1 ;o 2" 1 ;o 8) As 0ouble
0im i As BEte" As BEte
0im suma As 0ouble" diaria As 0ouble
Nor 3 1 ;o 8
Nor i 3 1 ;o 2
A(i" ) 3 2nputBox("2ntroduce los -alores igual #ue antes")
>ext
>ext
suma 3 0
Nor 3 1 ;o 8
diaria 3 A(2" ) H A(1" )
suma 3 suma 7 diaria
0ebugOPrint "?na ornada3 " 6 diaria
>ext
0ebugOPrint ";oda la Semana3 " 6 suma
End Sub
- Ejecuta el programa, introduciendo los mismos valores de la tabla.
Para ejecutar el programa no es necesario que te sites en la "Ventana nmediato y
escribas %rograma20 y [Return]. Basta que sites el cursor de escritura en cualquier punto
del interior del %rograma2013 y pulses la tecla [F@].
Si todo funciona correctamente en la "ventana de depuracin aparecer:
Una jornada = 6
Una jornada = 6,5
Una jornada = 7,5
Una jornada = 4
VB Access 2000 Ferm Vil 20
Una jornada = 11
Toda la semana = 35
- Observemos de qu forma lo conseguimos:
For j=1 To 5
Diaria = A(2,j) A(1,j)
suma = suma + diaria
Debug.Print "Una jornada = & diaria
Next
Debug.Print "Toda la semana= & suma
Hemos inicializado antes de todo, la variable suma a 0
Cuando empieza el ciclo for > to > next:
J=1
diaria = A(2,1) A(1,1)
suma = suma + diaria
La variable diaria guarda la jornada laboral del 1r. da (hora final hora inicial)
La variable suma = anterior suma (0) + contenido diaria (jornada del 1r. da).
Cuando vuelve a iniciarse el ciclo:
J=2 (2 da)
diaria = A(2,2) A(1,2)
suma = suma + diaria
La variable diaria guardar la jornada del 2 da
La variable suma = suma anterior (jornada del 1r. da) + contenido de la actual
diaria (jornada del 2 da)
Est claro que la variable suma va guardando el total de '8ornadas*
Al acabarse el ciclo for > to > next, la variable suma contendr el total de horas de
trabajo de la semana. Por esta razn, la lnea: De&ug#%rint ':oda la semanaF ' D
suma, nos da lo que queramos conseguir: Toda la Semana = 35 horas de trabajo.
w) Escribe el siguiente programa en el M0dulo1:
Sub Programa21()
0im A As String B 1
0im i As BEte
Nor i 3 1 ;o 100
A 3 2nputBox("@Kuieres continuarA")
2( A 3 ">" +r A 3 "n" ;&en
Exit Nor
End 2(
>ext
MsgBox "Se acab'"
End Sub
- Ejecuta el programa anterior varias veces, hasta que descubras para qu sirve la
instruccin "xit For
VB Access 2000 Ferm Vil 21
x) Escribe en el M0dulo1 el siguiente programa:
Sub Programa22()
0im contador As 2nteger
0im (aren&eit As 2nteger
0im celsius As 2nteger
0ebugOPrint ";emperaturas Naren&eit E :elsius"
0ebugOPrint "33333333333333333333333333333333"
Nor contador 3 H2 ;o 1)
celsius 3 10 B contador
(aren&eit 3 )2 7 (celsius B J) C 8
!5a ('rmula anterior trans(orma la temperatura de
!grados cent%grados a grados (aren&eit
0ebugOPrint " " 6 celsius 6 " " 6 (aren&eit
2( celsius 3 0 ;&en
0ebugOPrint "Atenci'nS Punto de congelaci'n del Agua"
End 2(
2( celsius 3 100 ;&en
0ebugOPrint "Atenci'nS Punto de ebullici'n del agua"
End 2(
>ext
End Sub
- Prueba el programa anterior. Es "guapo verdad?. Suponiendo que te funcione, claro!.
y) Queremos hacer un programa que nos d la suma y el producto de todos los nmeros pares
hasta 30.
Escribe en el M0dulo1 el siguiente programa:
Sub Programa2)()
0im par As 2nteger
0im sum As 2nteger
0im pro As 0ouble
sum 3 0S pro 3 1
0ebugOPrint "Par H Suma parcial H Producto parcial"
Nor par 3 2 ;o )0 Step 2
sum 3 sum 7 par
pro 3 pro B par
0ebugOPrint par 6 " H " 6 sum 6 " H " 6 pro
>ext
0ebugOPrint "Suma total 3 " 6 sum
0ebugOPrint "Producto total 3 " 6 pro
End Sub
- Ejecuta el programa anterior, para comprobar que funciona.
Observa de qu manera podemos escribir varias sentencias en una misma lnea de
programa: basta seararlas con dos untos.
z) En VBA hay diferentes tipos de programas. Todos los "programas que hemos hecho hasta
ahora se llaman rocedimientos y tienen la estructura:
.u& +om&re%rograma13
HHHHH#
HHHHH#
"nd .u&
VB Access 2000 Ferm Vil 22
Veamos otro tipo de programa en VBA, que se llama funci0n.
- Escribe en el M0dulo1 la siguiente funci0n:
Nunction Media(n1 As 2nteger" n2 As 2nteger) As 0ouble
Media 3 (n1 7 n2) C 2
End Nunction
- Antes de "ejecutar el programa anterior observemos:
El programa anterior "pretende calcular el promedio de 2 nmeros enteros: n1 y n2, los
dos declarados como 9nteger.
El "resultado del programa anterior "pretende ser el valor de 'Media*, variable
declarada como Dou&le, cuyo valor debe ser el resultado de la frmula: Media F 1n1 J
n23T2, es decir el promedio de los nmeros n1 y n2.
- Vamos a "ejecutar el programa "Media, es decir:
[CTRL][G] para abrir la "ventana inmediato (si no est ya abierta).
Escribe el nombre del programa, es decir: Media y pulsa [Return]
Est claro que alguna cosa no funciona, ya que aparece un mensaje de error.
"Acepta el mensaje de error.
Escribe en la "ventana inmediato:
NMedia126?3 y [Return]
Si todo va bien, aparece 26@ (promedio de 2 y 3)
- Vuelve a ejecutar el "programa Media, para calcular el promedio de los nmeros 153 y 352
Es decir:
En la "Ventana de Depuracin, escribe:
NMedia11@?6?@23 y [Return]
Si todo va bien, debe aparecer el nmero 2@26@
- Est claro con lo hecho hasta ahora que una funci0n es un programa, pero de un tipo
distinto a un rocedimiento.
- Observa la estructura de una funcin:
Function +om1HHH##3 As HH##
HHHHHHHH
HHHHHHHH
HHHHHHHH
"nd Function
- En el parntesis que hay al lado del nombre de la funcin, hemos de colocar los
argumentos de la funcin y declararlos. En nuestra funcin Media, los argumentos son n1 y
n2, los dos tipo 9nteger.
- Los argumentos de la funcin son los valores que necesitar la funcin para ejecutarse. En
nuestro caso al escribir: Media126?3 estamos llamando a la funcin Media, con n1=2 y
n2=3.
VB Access 2000 Ferm Vil 23
- Una funcin siempre devuelve algn valor, que debe declararse. En nuestro caso es
Dou&le y la forma de declarar es:
Function nom&re 1HH 6 H##3 As Dou&le
- El "interior de la funcin debe contener la relacin entre los argumentos de entrada (n1 y
n2) con el valor de salida (Media), en nuestro caso es simplemente la frmula:
Media F 1n1 J n23 T 2
a1) Escribe en el M0dulo1 la siguiente funcin:
Nunction <aiR/(n As 0ouble) As 0ouble
<aiR/ 3 S#r(S#r(n))
End Nunction
- Ejecuta la funcin anterior de la siguiente forma:
Sitate en la "ventana inmediato
Escribe: N-aiRC1G2@3 y pulsa [Return]
Si todo va bien aparecer 5, que no es ms que la raz cuadrada de la raz cuadrada,
es decir la raz cuarta de 625.
Escribe: N-aiRC172#K13 y [Return]
Si todo va bien, aparecer: 26I2110KIGG12K@7 que no es ms que la raz cuarta de
72.81
Escribe: N.Ar172#K13 y [Return]
Escribe: N.Ar1K#@?2K77@I1IIG7C3 y [Return]
Est claro, verdad?. La instruccin .Ar no es ms que una funcin, pero diferente a la
funcin -aiRC: la .Ar es una funcin incorporada en el VBA, en cambio -aiRC es una
funcin definida por el usuario.
Escribe: NMsgBox1'5ola %ee*3 y pulsa [Return]
As pues, MsgBox tambin es una funci0n incorporada en el VBA (siempre y cuando
escribamos el argumento entre parntesis).
Escribe: N-aiRC1/73
Est claro el problema: No existe la raz cuadrada de un nmero negativo. Haz CLC en
[Finalizar] para aceptar el mensaje de error.
- Vamos a mejorar la funcin -aiRC.
Modifica la funcin -aiRC de forma que nos quede de la siguiente forma:
Nunction <aiR/(n As 0ouble) As 0ouble
2( n I 0 ;&en
MsgBox ">o se puede calcular la raiR" 6 $
" cuarta de un n4mero negati-o"
Else
<aiR/ 3 S#r(S#r(n))
End 2(
End Nunction
VB Access 2000 Ferm Vil 24
- Prueba la funcin anterior de la siguiente forma:
En la "ventana inmediato escribe: N-aiRC1173 y [Return]
Si todo va bien debe aparecer 2,03054318486893
Escribe: N-aiRC1/173 y [Return]
Si todo va bien debe aparecer el mensaje de error. "Acepta el mensaje.
b1) Sabemos como llamar una funcin desde la Ventana de Deuraci0n 1inmediato3, pero
tambin podemos ejecutar una funcin desde un procedimiento. En efecto:
Escribe en el M0dulo1 el siguiente procedimiento:
Sub Programa2/()
0im num As 0ouble
num 3 2nputBox("2ntroduce un n4mero")
0ebugOPrint "5a raiR cuarta de " 6 num 6 " es " $
6 <aiR/(num)
End Sub
- Prueba el programa 24
- Si "pruebas el programa para un nmero negativo, observars que tambin funciona
Vamos a cambiar un poco el procedimiento anterior
- Escribe en el M0dulo1 el siguiente procedimiento:
Sub Programa28()
0im num As 0ouble
num 3 2nputBox("2ntroduce un n4mero")
2( num I 0 ;&en
0ebugOPrint "5o siento" -uel-e a probarlo"
Else
0ebugOPrint "5a raiR cuarta de " 6 num 6 " es " $
6 <aiR/(num)
End 2(
End Sub
- Prueba el programa anterior utilizando nmeros positivos y tambin negativos.
c1) Vamos a estudiar en este apartado una nueva estructura de rogramaci0n.
- Escribe en el M0dulo1 el siguiente rocedimiento:
Sub Programa29()
0im sexo As String
sexo 3 2nputBox("Escribe VA<U> o FEMB<A" seg4n tu sexo")
Select :ase sexo
:ase "VA<U>"
0ebugOPrint "@KuT tal" guapoA"
:ase "FEMB<A"
VB Access 2000 Ferm Vil 25
0ebugOPrint "@KuT tal" guapaA"
:ase Else
0ebugOPrint "@KuT tal" sexo ambiguoA"
End Select
End Sub
- Ejecuta el programa anterior (espero que te funcione). Recuerda que la forma ms rpida
de ejecutar el programa, es colocar el cursor de escritura en su interior y pulsar la tecla
[F5].
- Observa la "nueva estructura de programacin .elect 2ase:
.elect 2ase !aria&le
2ase un !alor determinado de la !aria&le
.entencia 1
.entencia 2
2ase otro !alor de la !aria&le
.entencia ?
.entencia C
2ase "lse
.entencia @
.entencia G
"nd .elect
Segn el valor de la "variable se ejecutarn unas lneas de programa u otras. Si la
variable no toma ninguno de los valores que nos interesan, podemos agrupar las lneas de
programa en "Case Else. La opcin "Case Else es opcional.
d1) Escribe en el M0dulo1 los siguientes programas (3 funciones y un procedimiento):
Nunction AV?0A()
0ebugOPrint "Escribe < para calcular el .rea de un rect.ngulo"
0ebugOPrint "Escribe ; para un tri.ngulo"
End Nunction
Nunction <ect.ngulo(bas As 0ouble" alt As 0ouble) As 0ouble
<ect.ngulo 3 bas B alt
End Nunction
Nunction ;ri.ngulo(bas As 0ouble" alt As 0ouble) As 0ouble
;ri.ngulo 3 bas B alt C 2
End Nunction
Sub Programa27()
0im opci'n As String B 1
0im al As 0ouble" ba As 0ouble
opci'n 3 2nputBox("@KuT opci'nA")
Select :ase opci'n
:ase "<"
ba 3 2nputBox("Base del rect.ngulo")
al 3 2nputBox("Altura del rect.ngulo")
0ebugOPrint "El .rea del rect.ngulo es 3" 6 <ect.ngulo((ba)" (al))
VB Access 2000 Ferm Vil 26
:ase ";"
ba 3 2nputBox("Base del tri.ngulo")
al 3 2nputBox("Altura del tri.ngulo")
0ebugOPrint "El .rea del tri.ngulo es 3" 6 ;ri.ngulo((ba)" (al))
:ase Else
AV?0A
End Select
End Sub
- Ejecuta el programa 27, es decir:
Abre la "ventana de depuracin
Escribe: %rograma27 y [Return]
Juega con las diferentes opciones (debers ejecutar el programa varias veces).
%ara sa&er ms
Declaraci0n de Varia&les
Es un buen hbito de programacin la declaracin de los tipos de variable que se van a
utilizar en un procedimiento, antes de que vayan a ser utilizadas. Esto aumenta la legibilidad de
los programas.
El VB no nos obliga a declarar previamente las variables que utilizamos en un
programa, a diferencia de otros lenguajes de programacin como el C/C++. Seria interesante
o&ligar al Visual Basic a la declaracin de variables, ya que el error tpico de programacin
consiste en cambiar el nombre de una variable por error; si el VB nos obligara a declarar todas
las variables, detectaramos inmediatamente el error.
Para obligar a la declaracin previa de variables, basta escribir en la "parte General de
un mdulo la lnea: Otion "xlicit
De todas formas, podemos conseguir que el VB lo haga por nosotros, basta que hagas:
Desde el "Editor de Visual Basic:
VB Access 2000 Ferm Vil 27
Men Herramientas
Opciones...
Solapa: Editor
Activa la casilla:
-eAuerir declaraci0n de !aria&les
:ios de Varia&les ms usuales
:io Valor
Byte 0 a 255
Boolean True o False
nteger -32768 a 32767
Long -2147483648 a 2147483647
Double (nmeros decimales positivos y/o
negativos)
Date 1/1/100 a 31/12/9999
String (cadena alfanumrica)
Variant (tipo de datos por defecto)
Para ms detalles consulta el tema: "Resumen de tipos de datos de "Grupos de
"Referencia del lenguaje de Visual Basic, de la a7uda del Visual Basic del Access 2000
(basta que te sites en el "Editor de Visual Basic del Access y Men Ayuda Ayuda de
Microsoft Visual Basic)
'Variant* es el tipo de datos, para todas las variables si no se declaran explicitamente
(Dim). No es mas que un tipo de datos especial que puede contener cualquier clase de datos.
Observa el siguiente programa:
.u& %rograma413
Dim num16 num2 As 9nteger
num1 F 9nutBox 1'"scri&e un n$mero*3
num2 F 9nutBox 1'"scri&e otro n$mero*3
MsgBox 'Ea .uma es F ' D num1 J num2
"nd .u&
En principio, el programa anterior funciona sin problemas, es decir sumar los nmeros
num1 y num2, pero...
En la lnea Dim num1, num2 As Integer
Declaramos la variable num2 como 9nteger, y la variable num1 como no tiene "tipo
definido, es Variant
El Access detecta en la operacin num1 J num2, que deseamos operar dos nmeros
y convierte la variable num1 a numrica. El problema est en que la variable 'Variant* ocupa
ms espacio en memoria que una "nteger y adems el programa se ralentiza, porque debe
con!ertir la variable.
En definitiva: es conveniente declarar el tipo de cada una de las variables (aunque sea
el mismo). En nuestro caso: Dim num1 As 9nteger6 num2 As 9nteger
Funci0n MsgBox
El 'MsgBox* es una funcin incorporada en el VB que tiene muchas posibilidades,
vemoslo:
- Recupera la base de datos %-O(-AMA.#md&
- Selecciona el O&8eto) M0dulos y click en [Nuevo]
VB Access 2000 Ferm Vil 28
- Escribe el siguiente procedimiento:
.u& %rograma2K13
Dim nom As .tring
Dim -esuesta As 9nteger
nom F U%eitoU
MsgBox 1U5ola U D nom3
MsgBox U5ola U D nom
MsgBox UMira el t=tuloU6 6 U%ongo el t=tulo Aue AuieroU
MsgBox UO&ser!a esteU D !&2rEf D Utexto Aue ocua U D V
!&2rEf D Utres l=neasU6 6 U:=tuloU
MsgBox UMira el icono de U D !&2rEf D UreguntaU6 V
!&Muestion6 U9cono 9nterrogaci0nU
MsgBox UOtro iconoU6 !&2ritical6 U9cono 2r=ticoU
MsgBox UotroU6 !&"xclamation6 U9cono "xclamaci0nU
MsgBox Uotro msU6 !&9nformation6 U9cono 9nformaci0nU
-esuesta F MsgBox1UO&ser!a Aue al incluir msU D V
!&2rEf D Ude un &ot0n6 en el MsgBoxU D V
!&2rEf D Uongo arSntesis 7 utiliRoU D !&2rEf V
D Uuna !aria&le6 Aue recogerU D V
!&2rEf D Uel &ot0n Aue ,emos ulsadoU6 !&Wes+o J V
!&Muestion6 UDos &otonesU3
De&ug#%rint -esuesta
-esuesta F MsgBox1Utres &otonesU6 !&Wes+o2ancel J V
!&9nformation6 U2on icono 9nformaci0nU3
De&ug#%rint -esuesta
-esuesta F MsgBox1Utres &otones eroU D !&2rEf D V
Uel acti!o es el segundoU6 !&A&ort-etr79gnore V
J !&2ritical J !&DefaultButton26 U9cono 2riticoU3
De&ug#%rint -esuesta
"nd .u&
- Click en el icono '(uardar*
Graba el nuevo mdulo con el nombre M0dulo2
- Pulsa las teclas [CTRL][G] para abrir la ventana "nmediato
- Escribe %rograma2K y pulsa [Return]
Observa detenidamente lo que sucede y ejectalo varias veces para verlo mejor.
"xlicaci0n del %rograma2K)
El primer "MsgBox:
MsgBox("Hola & nom)
es el tipo de cuadro que ya habamos utilizado
Si observamos el segundo:
MsgBox "Hola & nom
llegamos a la conclusin que tanto da poner o no poner parntesis.
Recuerda que en Visual Basic podemos escribir lneas de programa distribuyndolas
en varias lneas, sin ms que escribir el s=m&olo de su&ra7ado (tecla del "menos)
recedido de un esacio en &lanco.
!&2rEf es una constante simblica de VB que "obliga a un retorno de carro o nueva
lnea, con su uso conseguimos distribuir el texto en varias lneas.
VB Access 2000 Ferm Vil 29
El primer argumento del MsgBox es el texto que aparece en el cuadro. El tercer
argumento es el texto que aparece como ttulo del cuadro (igual que suceda con el
nputBox)
En el segundo argumento del "msgbox podemos incluir un icono determinado y/o
varios botones y/o activar por defecto un botn determinado. Todo esto se consigue
utilizando constantes simblicas de VB o su valor numrico equivalente como aparece
en las siguientes tablas:
2onstantes ara los iconos Valor +umSrico .ignificado
vbCritical 16 cono crtico
vbQuestion 32 cono pregunta
vbExclamation 48 cono exclamacin
vbnformation 64 cono informacin
2onstantes ara los &otones Valor +umSrico .ignificado
vbOKOnly (defecto) 0 [Aceptar]
vbOKCancel 1 [Aceptar][Cancelar]
vbAbortRetrygnore 2 [Anular][Reintentar][gnorar]
vbYesNoCancel 3 [S][No][Cancelar]
vbYesNo 4 [S][No]
2onstantes ara acti!ar &ot0n Valor +umSrico .ignificado
vbDefaultButton1 (defecto) 0 Activa el primer botn
vbDefaultButton2 256 Activa el segundo botn
vbDefaultButton3 512 Activa el tercer botn
El hecho de incluir botones no tiene sentido si no recogemos el botn pulsado en una
variable (de aqu el uso de la variable resuesta en nuestro procedimiento). En este
caso hemos de escribir el MsgBox con parntesis necesariamente.
Los nmeros o constante simblica que devuelven los diferentes botones son los
siguientes:
Bot0n De!uel!e el n$mero 2onstante
Aceptar 1 vbOK
Cancelar 2 vbCancel
Anular 3 vbAbort
Reintentar 4 vbRetry
gnorar 5 vbgnore
S 6 vbYes
No 7 vbNo
Funci0n 9nutBox
gual que sucede con el MsgBox, el 9nutBox tiene ms posibilidades que las vistas hasta
ahora.
- Escribe en el M0dulo2 de %-O(-AMA. el siguiente procedimiento:
.u& %rograma2I13
Dim -esuesta As .tring
-esuesta F 9nutBox1U%rimera l=neaU D !&2rEf V
D Usegunda l=neaU6 U:=tulo del 9nutBoxU3
-esuesta F 9nutBox1U5aR 2E92 en [2ancelar]U6 V
UA !er Aue asa si canceloU3
VB Access 2000 Ferm Vil 30
De&ug#%rint UAl ulsar cancelar resultaF U D -esuesta
-esuesta F 9nutBox1UAarece un !alor or defectoU6 V
U:=tuloU6 U"sto aarece or defectoU3
-esuesta F 9nutBox1U.it$o la !entanaU6 V
U1200 t<is a la derec,a 7 1C00 ,acia a&a8oU6 V
U2oordenadas 1200x1C00U6 12006 1C003
-esuesta F 9nutBox1UOtra osici0nU6 6 6 @06 7@3
"nd .u&
- Ejecuta el programa observando detenidamente lo que sucede.
- En definitiva, la sintaxis completa de la funcin "inputbox es:
!aria&le F 9nutBox1mensa8e16 mensa8e26 mensa8e?6 num16 num23
mensaje1 = el texto que aparece en el interior del cuadro
mensaje2 = el texto que aparece como ttulo del cuadro.
mensaje3 = el texto que aparece por defecto, escrito.
num1 = coordenada horizontal en twips del extremo superior
izquierdo del cuadro.
num2 = coordenada vertical en twips del extremo superior
izquierdo del cuadro.
Si ante un cuadro nputBox, hacemos click en el botn [Cancelar], el valor de la "variable
es nula.
Ea a7uda inteligente al escri&ir c0digo
"ntelliSense es la sofisticada tecnologa de Microsoft que nos permite ahorrar trabajo cuando
estamos escribiendo cdigo.
Habrs observado que al escribir cdigo, en muchas ocasiones aparecen unos pequeos
cuadros con informacin sobre la orden que estamos escribiendo.
Veamos como funciona esta ayuda inteligente (ntelliSense), tiene tres componentes:
13 9nformaci0n rida
Siempre que escribimos una palabra reservada, seguida de un espacio o de un parntesis,
aparece una nota en pantalla que contiene la sintaxis del elemento escrito. Un ejemplo sera
cuando escribimos MsgBox1
23 Eista de roiedades 7 mStodos
Cuando escribimos el nombre de un objeto y el punto, aparece un cuadro que contiene todas
las propiedades y mtodos del objeto en cuestin.
Un ejemplo sera cuando escribimos De&ug y un punto.
Basta seleccionar la propiedad o mtodo del cuadro y pulsar la tecla [Tab].
Ya veremos ms adelante, qu es exactamente un objeto, propiedad y mtodo.
?3 Eista de constantes
La tercera posibilidad de 9ntelli.ense es que aparece un listado con todas las constantes
incorporadas de VB, segn el objeto y propiedad.
Lo habrs observado al comenzar a escribir !&###; basta seleccionar una de las constantes y
pulsar [Tab].
Si te molesta la "ayuda inteligente basta que pulses la tecla [Esc] cuando aparece.
VB Access 2000 Ferm Vil 31
2omencemos a rogramar !isualmente
En este primer captulo nos hemos introducido en el estudio del Visual Basic, sin
utilizar ninguna de las posibilidades "visuales de que dispone el Access. En el siguiente
captulo nos dedicaremos precisamente a este "estudio, pero nos gustara ejecutar los
programas que hemos escrito en el editor desde el Access no desde el editor de Visual
Basic.
- Crea un formulario en la base de datos %rogramas. Es decir:
Desde la pantalla inicial de la base de datos %rogramas
Cinta de Opciones: Crear
Grupo: Formularios
Formulario en blanco
Cinta de Opciones: Herramientas de presentacin de formulario
Ficha: Formato
Grupo: Vistas
Clic en la flechita de Ver
Vista Diseo
Observa la nueva 2inta de Ociones) 5erramientas de diseBo de formulario, con
sus fichas DiseBo y OrganiRar.
Observa los controles que tenemos en
Cinta de Opciones: Herramientas de diseo de formulario
Ficha: Diseo
Grupo: Controles
Observa tambin que el control XtiliRar Asistentes ara controles se encuentra
activado por defecto
Desactiva el control XtiliRar Asistentes ara 2ontroles
5aR clic en el icono '+&ot0n del (ruo de 2ontroles
"Marca un pequeo recuadro en el formulario
Con el 2omando0 seleccionado, haz clic en su interior.
Borra el texto que aparece por defecto y escribe en su lugar '.aludo*
- Con el botn [Saludo] seleccionado, haz clic en el icono 'Ver 20digo*:
del (ruo) 5erramientas
- Observa que hemos ido a parar al "Editor de Visual Basic
Concretamente en una ventana llamada '%-O(-AMA. / FormVFormulario1 120digo3*, que
denominaremos m0dulo del formulario (a diferencia de los otros mdulos)
VB Access 2000 Ferm Vil 32
- Observa la ventana %ro7ecto / %-O(-AMA.)
Si no la tienes a la vista, debers hacer: Men$ Ver / "xlorador de ro7ectos. Donde
podemos visualizar los diferentes objetos de nuestra base de datos, entre ellos los mdulos 1 y
2.
Tambin podemos visualizar los diferentes mdulos, detrs del que hemos llamado "mdulo del
formulario:
- Con el cursor de escritura en el interior del mdulo de formulario, haz clic en la flecha del
cuadro combinado de la izquierda:
- Selecciona la opcin 2omando0. Observa que en el cuadro combinado de la derecha
aparece automticamente 2licY.
Entre las lneas:
flecha del cadr! c!mbi"ad! de la i#$ierda
VB Access 2000 Ferm Vil 33
%ri!ate .u& 2omando0V2licY13
y
"nd .u&
Escribe: %rograma7
El programa que tenemos en el "mdulo del formulario:
%ri!ate .u& 2omando0V2licY13
%rograma7
"nd .u&
Es lo que se llama rocedimiento de e!ento (ya los estudiaremos en detalle ms adelante),
que se ejecutar al hacer clic en el botn [Saludo] (el nombre del botn en realidad es
2omando0), por esta razn el nombre del procedimiento es 2omando0V2licY
- Nuestro procedimiento de evento contiene una nica instruccin que es %rograma7. Es
decir, se ejecutar el procedimiento %rograma7 que tenemos en el Mdulo1
Vamos a ver si es verdad ...
- Sitate en el Microsoft Access, es decir, clic en el icono Ver Microsoft
Access:
- Graba el formulario con el nombre Formulario1 (clic en el icono (uardar)
- Ejecuta el Formulario1, es decir,
Cinta de Opciones: Herramientas de diseo de formulario
Ficha: Diseo
Grupo: Vistas
Clic en la flechita de Ver
Vista Formulario
- Haz clic en el botn [Saludo]
Espero que te funcione correctamente, es decir, espero que se te ejecute el %rograma7 que
habamos escrito en el M0dulo1.
Vamos a hacer otro botn ...
- Sitate en la pantalla de diseo del formulario, es decir:
Cinta de Opciones: nicio
Grupo: Vistas
Clic en la flechita de Ver
Vista Diseo
- nserta en el formulario un nuevo botn de comando.
- Vamos a cambiar el texto que aparece en su interior de otra forma:
Con el botn 2omando1 seleccionado, y el cursor del ratn en su interior
Pulsa el botn derecho del ratn; de esta forma accedemos a lo que se llama su "men
contextual.
Selecciona la opcin '%roiedades*. En la propiedad :=tulo, escribe: .uma de
n$meros 1arar aca&ar introduce el cero3
VB Access 2000 Ferm Vil 34
- Vuelve a acceder al men$ contextual del segundo botn del formulario y clic en la opcin
(enerar e!ento ###
- Selecciona la opcin (enerador de c0digo y [Aceptar]
Si todo ha funcionado correctamente nos hemos situado en el "ditor de Visual Basic,
exactamente en el m0dulo del formulario y aparece el "esqueleto del procedimiento de
evento correspondiente
- Escribe:
%ri!ate .u& 2omando1V2licY13
%rograma1C
"nd .u&
- Graba los cambios que hemos hecho (clic en el icono (uardar)
- Vuelve al Microsoft Access. Ejecuta el Formulario1 y prueba el funcionamiento del nuevo
botn.
Nos gustara hacer un nuevo botn, pero para ejecutar el %rograma1G.
Recordemos:
.u& %rograma1G13
Dim num As 9nteger6 i As 9nteger
Dim nom As .tring
num F 9nutBox1U2untas !eces Auieres Aue te salude U3
nom F 9nutBox1Ucul es tu nom&reU3
For i F 1 :o num
De&ug#%rint U5ola U D nom
+ext
"nd .u&
Observa el problema: La "salida del programa es en la Ventana de 9nmediato del editor de
VB.
Vamos a ver como lo solucionamos:
- Desde la pantalla de diseo del Formulario1, inserta un nuevo botn de comando con el
texto -eite .aludo
- Accede al m0dulo del formulario y escribe el siguiente procedimiento de evento:
%ri!ate .u& 2omando2V2licY13
%rograma1G
Do2md#OenModule UM0dulo1U6 UU
"nd .u&
La instruccin: Do2md#OenModule UM0dulo1U6 UU, no es ms que una instruccin "Visual
Basic pero prpia del Access (que ya iremos estudiando ms adelante), que simplemente
abrir el M0dulo1
En definitiva nuestro programa har lo siguiente:
Ejecutar el %rograma1G
Nos situaremos en el "ditor Visual Basic, para visualizar la ejecucin en la Ventana
nmediato (por supuesto que hemos de dejar abierta esta ventana).
VB Access 2000 Ferm Vil 35
- Recuerda de grabar los cambios que hemos hecho y sitate en el Formulario1
- Haz clic en [Repite Saludo]
Espero que te funcione correctamente.
Para acabar este captulo, vamos a hacer una ltima "mejora ...
Ya que hemos empezado a ver las posibilidades "visuales del VBA del Access, supongo que
estars de acuerdo conmigo en que es muy triste ejecutar un programa utilizando la ventana
9nmediato.
En realidad, la utilidad de la ventana 9nmediato est en depurar un programa, es decir
bsicamente para probarlo.
Vamos a modificar el %rograma1G para que sea ms vistoso ...
- Sitate en el "Editor de Visual Basic
- Accede al M0dulo2, es decir haz un doble clic en M0dulo2 en la ventana de %ro7ectos.
- Sitate al final del M0dulo2 y escribe el siguiente programa:
.u& %rograma?013
Dim num6 i As 9nteger
Dim nom As .tring6 salida As .tring
salida F UU
num F 9nutBox1U2untas !eces Auieres Aue te salude U3
nom F 9nutBox1Ucul es tu nom&reU3
For i F 1 :o num
salida F salida D U5ola U D nom D !&2rEf
+ext
MsgBox salida
"nd .u&
- Vuelve al Microsoft Access
- nserta en el Formulario1 un nuevo botn (Comando3) con el texto: -eite .aludo
Me8orado
- Sitate en el Editor VB
- Sitate en el mdulo del formulariuo. Basta hacer un doble clic en 'FormVFormulario1* de
la !entana de ro7ectos
- Escribe el siguiente procedimiento de evento:
%ri!ate .u& 2omando?V2licY13
%rograma?0
"nd .u&
- Ejecuta el Formulario1 y haz clic en [Repite Saludo Mejorado]
Espero que te funcione.
- Sitate en el "ditor Visual Basic - M0dulo2 para visualizar el %rograma?0:
.u& %rograma?013
VB Access 2000 Ferm Vil 36
Dim num6 i As 9nteger
Dim nom As .tring6 salida As .tring
salida F UU
num F 9nutBox1U2untas !eces Auieres Aue te salude U3
nom F 9nutBox1Ucul es tu nom&reU3
For i F 1 :o num
salida F salida D U5ola U D nom D !&2rEf
+ext
MsgBox salida
"nd .u&
Definimos una nueva variable .tring, de nombre "salida que inicializamos a vacio (").
salidaFsalida D ' 5ola ' D nom D !&2rEf
En la variable salida se ir acumulando (salida = salida &), la palabra "Hola, el valor de la
variable nom y un !&2rEf (es decir un [Return]).
Por ltimo mostramos con un cuadro de mensajes el valor final de "salida: MsgBox
salida
Autoe!aluaci0n 1
En la &ase de datos %rogramas, crea un nuevo mdulo de nombre Autoe!aluaci0n1,
donde has de escribir los siguientes procedimientos:
1) Haz un programa de nombre %rog1, que funcione de la siguiente forma:
- El programa nos pide que escribamos dos nmeros positivos menores de 57.
- El programa nos da como resultado el producto de los dos nmeros.
- Si los nmeros no son positivos o son mayores de 57, el programa nos lo dice y salimos del
programa.
- El programa nos pregunta al final si queremos volver a empezar.
2) Escribe un procedimiento de nombre %rog2, que nos vaya pidiendo nmeros. Si escribimos
el nmero 9999 se acaba; por ltimo, el programa nos da como resultado el nmero de
nmeros introducidos, exceptuando el 9999.
3) Escribe un procedimiento de nombre %rog?, que haga lo mismo que el anterior, pero
adems nos d la suma de todos los nmeros introducidos, exceptuando el 9999
4) Escribe un procedimiento de nombre %rogC, que haga lo mismo que el anterior, pero
adems nos d el producto de los nmeros introducidos, exceptuando el 9999.
5) Escribe un procedimiento de nombre %rog@, que escriba todos los mltiplos de 23 inferiores
a 1000 y por ltimo nos d la suma de todos ellos.
6) Escribe un procedimiento de nombre %rogG, que sirva para hacer una tabla de valores de la
funcin 7Fsen17x/@3
- El programa nos pide los dos valores de "x (valores mximo y mnimo)
- El programa nos pide el incremento (variacin) de la "x.
7) Escribe un procedimiento de nombre %rog7, que sirva para calcular un cateto de un
tringulo rectngulo a partir del otro cateto y la hipotenusa de la siguiente forma:
VB Access 2000 Ferm Vil 37
- El programa nos pide el valor de la hipotenusa
- El programa nos pide el valor de un cateto.
- Si el cateto es mayor que la hipotenusa, el programa nos da un mensaje de error y se
acaba.
- El programa nos da como resultado el valor del otro cateto y nos pregunta si queremos
volver a empezar.
8) Escribe un procedimiento de nombre %rogK, que escriba los 15 primeros mltiplos de 7, su
suma y su producto. El programa ha de tener la posibilidad de volver a empezar.
9) Escribe un procedimiento de nombre %rogI, que sirva para calcular el rea de un tringulo
o el rea de un rectngulo o el rea de un crculo. El programa ha de tener la posibilidad de
volver a empezar. Utiliza la estructura "Case.
10) Escribe un procedimiento de nombre %rog10, que "dibuje un rectngulo de asteriscos a
partir de la base y la altura.
11) Escribe un procedimiento de nombre %rog11, que "dibuje un cuadrado con el carcter
que introducimos por teclado, a partir del lado.
12) Escribe un procedimiento de nombre %rog12, que nos pida un nmero y d como
resultado la tabla de multiplicar del nmero introducido.
13) Escribe un procedimiento de nombre %rog1?, que nos d las opciones:
- Calcular una suma (crea una "function de nombre suma)
- Calcular una raz cuadrada (crea una "function de nombre raizcua)
- Calcular un logarimo neperiano (crea una "function de nombre neperiano).
14) Escribe un procedimiento de nombre %rog1C, que nos pida dos sumandos y nos d la
suma de sus cuadrados y su diferencia (utiliza las funciones: SumaCuadrado y
RestaCuadrado)
15) Escribe un procedimiento de nombre %rog1@ que funcione de la siguiente forma:
- El programa nos pide 10 valores.
- El programa calcula la media aritmtica (function).
- El programa calcula las desviaciones respecto a la media.
- El programa calcula la desviacin media (llamada a la funcin anterior).
- El programa calcula la varianza (llamada a la funcin anterior).
- Por ltimo el programa calcula la desviacin tpica.
16) Escribe un procedimiento de nombre %rog1G, que calcule los 25 primeros trminos de la
sucesin de trmino general: (3n+1) / (2n-1)
17) Crea un formulario de nombre Formulario2 en la B. D. Programas con 5 botones, que
permitan ejecutar los programas:
Prog8 Mltiplos de 7
Prog11 Dibuja cuadrado
Prog14 Suma y Resta de cuadrados
Prog15 Estadstica
Prog16 Sucesin.
VB Access 2000 Ferm Vil 38
2
9ntroducci0n a la %rogramaci0n Visual
a) Haz una nue!a base de datos de nombre V9.XAE, en TuCarpeta
En la base de datos V9.XAE crea un formulario de la siguiente forma:
Cinta de Opciones: Crear
Formulario en blanco
Ver
Vista DiseBo
- Si el icono 'XtiliRar Asistente ara controles* est activado:
desactvalo.
b) Se trata de colocar en el formulario un 2ontrol) 2uadro de :exto, de la siguiente forma:
- CLC en el icono '2uadro de texto* del (ruo) 2ontroles
- Haz CLC en cualquier punto del centro del formulario.
- Sitate en la "etiqueta del "cuadro de texto que acabamos de crear. Es decir, CLC en
:exto0 para seleccionar la etiqueta y otro CLC para situarnos en su interior.
- Borra el texto que aparece por defecto y escribe en su lugar: Mensa8e
- Haz CLC en cualquier punto del formulario, fuera de la etiqueta del cuadro de texto.
- Vuelve a seleccionar el "cuadro de texto, es decir: CLC en el interior del "cuadro, donde
aparece el texto "ndependiente
- Puedes mover la etiAueta del "cuadro de texto, sin ms que situar el cursor del ratn en el
extremo superior - izquierdo, y "arrastrar el cursor hasta situar la etiqueta donde quieras.
- Puedes mover el cuadro de texto (recuadro donde aparece el texto "ndependiente), de la
misma forma:
Cursor en su extremo superior izquierdo
"Arrastra el cursor del ratn.
VB Access 2000 Ferm Vil 39
- Mueve la "etiqueta y el "cuadro de texto de forma que nos quede aproximadamente de la
siguiente forma:
c) Vamos a colocar en nuestro formulario un botn ..
- CLC en el icono 'Bot0n* del (ruo) 2ontroles
- Haz CLC en cualquier punto del formulario, que no sea en el "cuadro de texto.
- Con el botn que acabamos de crear, seleccionado. Haz CLC en su interior. Borra el texto
que aparece por defecto y escribe en su lugar: VAE"
- CLC en cualquier punto fuera del botn.
- Graba el formulario con el nombre %-O(1, sin salir de la pantalla de diseo. Es decir:
Clic en el icono (uardar del extremo superior izquierdo de la pantalla.
En el campo '+om&re del formulario*
Escribe: %-O(1
CLC en [Aceptar]
d) Vamos a crear un '%rocedimiento* asociado al botn [VAE"], pero antes.
- Selecciona el "cuadro de texto (CLC en su interior, donde hay el texto "ndependiente)
- CLC en el icono '5o8a de %roiedades*, del (ruo) 5erramientas
- Aparece la ventana de propiedades del control seleccionado, en nuestro caso del "cuadro
de texto.
Asegrate que la %estaBa):odas est activada.
- En la propiedad '+om&re*, aparece siempre un texto por defecto, normalmente Texto0,
Texto1, etc.
Cambia el texto que aparece en la propiedad "Nombre por 2XAD-O
Lo que hemos hecho es "bautizar nuestro "cuadro de texto, con el nombre 2XAD-O.
- Bautiza "nuestro botn con el nombre BO:Z+1. Es decir:
Selecciona el botn [VALE]. Es decir, CLC en su interior.
VB Access 2000 Ferm Vil 40
Cambia el contenido de la %roiedad) +om&re, por BO:Z+1 (no te dejes el acento).
"Desmarca el botn (CLC en cualquier punto fuera del botn).
Tenemos de momento un formulario de nombre %-O(1 (por cierto, haz CLC en el icono
del "disquete para guardar los ltimos cambios). Formulario que contiene 2 controles:
Un "cuadro de texto de nombre 2XAD-O (aunque no se vea este nombre)
Un "botn de nombre BO:Z+1 (aunque no se vea este nombre).
Antes de continuar: No se debe confundir el nombre que se ve en un control (en el caso del
botn: VALE) con el nombre interno del control (en el caso del botn: BOTN1) que no se
v sino abrimos su ventana de propiedades.
En la "programacin de los controles, lo que cuenta es su "nombre interno.
e) Vamos a crear un "procedimiento para el botn VALE (nombre: BOTN1).
- Selecciona el botn [VALE]
- Botn Derecho: Generar evento ...
- Si aparece una ventana que nos permite elegir entre tres generadores, haz CLC en
(enerador de c0digo y [Aceptar]
- Entre las lneas:
%ri!ate .u& BO:Z+1V2licY13
y
"nd .u&
Escribe: [2XAD-O]F*[5ola6 AuS tal\*
- Observa nuestro rocedimiento:
%ri!ate .u& BO:Z+1V2licY
[2XAD-O]F*[5ola6 AuS tal\*
"nd .u&
Que quiere decir: "Cundo hagas CLC en el control BO:Z+1, aparecer en el control
2XAD-O, la frase [5ola6 AuS tal\*
- Debes salir del "Editor de Visual Basic, para volver al Access. Es decir, CLC en el icono
'Ver Microsoft Access*:
O si t quieres: CLC en el botn [Microsoft Access] de la "Barra de Tareas
- Vuelve a grabar el formulario con el mismo nombre %-O(1 (CLC en el icono del
disquete).
f) Vamos a ver lo que hemos conseguido:
VB Access 2000 Ferm Vil 41
En estos momentos tenemos el formulario %-O(1 en 'Modo DiseBo*. Haz CLC en la
flechita del icono Ver, para pasar a Vista Formulario
- Haz CLC en el botn [VALE]
- Si todo funciona correctamente, en el "cuadro de texto acaba de aparecer la frase [5ola6
AuS tal\
- Vuelve a hacer CLC en la flechita del icono Ver para volver a Vista DiseBo
Vamos a crear en el formulario %-O(1 otro botn de nombre BO--A- (con nombre
interno FX"-A), que sirva para borrar el contenido del cuadro de texto (el cdigo
correspondiente ser: [2XAD-O]F**).
- CLC en el icono 'Bot0n*
- CLC en el lugar del formulario donde quieras colocar el nuevo botn.
- Accede a sus '%roiedades*:
- En la propiedad '+om&re* escribe: FX"-A
- Con el nuevo botn seleccionado. Haz CLC en su interior para acceder a su "nombre
externo.
- Borra el texto que aparece por defecto y escribe en su lugar BO--A-
- CLC en cualquier punto fuera del botn.
- Selecciona el botn [BORRAR]
- Accede a su men contextual (botn derecho del ratn) y "Generar evento...
- CLC en '(enerador de c0digo* y [Aceptar]
- Escribe entre las lneas:
%ri!ate .u& FX"-AV2licY13
y
"nd .u&
La lnea:
[2XAD-O]F**
- Vuelve al Microsoft Access
- Graba de nuevo el formulario con el mismo nombre %-O(1
- CLC en [BORRAR]
- CLC en [VALE]
- CLC en [BORRAR]
g) Antes de continuar con la 'rogramaci0n de controles*, vamos a mejorar el "aspecto del
formulario.
- Tenemos en estos momentos el formulario %-O(1 a la vista, en 'Modo "8ecuci0n*.
Se tratara de eliminar los elementos que aparecen en el formulario, que slo tienen sentido
en un formulario de &ase de datos (Observa los iconos de navegacin de la ltima lnea
de la pantalla) . Veamos:
VB Access 2000 Ferm Vil 42
Sitate en 'Vista DiseBo*
"Selecciona el formulario, es decir: CLC en el botn:
Sabremos que el formulario est seleccionado, si aparece un cuadrado negro en el
centro del botn anterior.
CLC en el icono '5o8a de %roiedades*
Modifica las siguientes propiedades:
Selectores de registro: No
Botones de desplazamiento: No
Separadores de registros: No
Ejecuta el formulario, es decir: Ver) Vista Formulario
Supongo que estars de acuerdo conmigo en que el "formulario tiene una presencia ms
elegante (no aparece el cuadro de controles de navegacin en la ltima lnea de la
pantalla):
Vamos a mejorar an ms, el aspecto del formulario:
- Sitate en Vista DiseBo de nuevo
- Selecciona el "cuadro de texto.
Se trata de que consigas el siguiente aspecto (aproximado) para el formulario %-O(1
(utilizando las opciones de la 2inta de Ociones):
- Graba el formulario %-O(1 con todos sus cambios con el mismo nombre.
- Ejecuta el formulario %-O(1, y juega con "sus botones.
h) Vamos a hacer otro programa.
- Crea un nuevo formulario de nombre %-O(2, en la base de datos V9.XAE, es decir:
Cinta de Opciones: Crear
Formulario en blanco
Graba el formulario con el nombre %-O(2 y sitate en Vista DiseBo
VB Access 2000 Ferm Vil 43
- nserta en el formulario %-O(2 un "cuadro de texto con las siguientes caractersticas:
Etiqueta: %edido de fec,a
Propiedades:
Nombre: %"D9DO
Origen del Control: FFec,a13
- Graba el formulario con el mismo nombre %-O(2 (CLC en el icono del disquete).
- Vamos a ver lo que hemos conseguido:
Ejecuta el formulario
Si todo va bien, aparece en el campo "Pedido de fecha, la fecha actual (del reloj del
ordenador).
El programa que tenemos hecho de momento (PROG2) consiste en un "cuadro de texto
que tiene asociado una funcin. Una funcin, que en nuestro caso es "incorporada por el
Access (podramos definir una funcin propia, paciencia, ya lo veremos).
La "funcin que podemos asociar al cuadro de texto, puede ser mas o menos complicada,
puede ser incorporada o no incorporada por el Access, puede consistir tambin en una
"operacin de funciones. Pero lo que es ms importante por ahora es que observes "de
qu manera asociamos una funcin a un control.
Para asociar una funcin a un control, basta acceder a las "propiedades del control y en la
propiedad 'Origen del 2ontrol*, escribir: igual y a continuacin el nom&re de la funcin.
En nuestro caso: FFec,a13
i) Vamos a "complicar el programa %-O(2H
- Se trata de incluir otro "cuadro de texto en el programa %-O(2 con las siguientes
caractersticas:
Etiqueta: Fec,a de Facturaci0n
Propiedades:
Nombre: FA2:X-A
Origen del Control: F%rimeroMes13
Tendremos de "programar una funcin de nombre '%rimeroMes13*, que nos d la
fecha del primero de mes siguiente a la fecha actual.
- Vamos a crear la funcin %rimeroMes13.
Clic en Ver 20digo del (ruo) 5erramientas
Con el cursor en la ventana: V9.XAE/FormV%-O(2 120digo3, es decir el mdulo de
nuestro formulario PROG2
Para escribir la funcin, haz lo siguiente:
Men nsertar
Procedimiento.
Asegrate que estn activadas las opciones: Funci0n y Am&ito %$&lico.
En el campo +om&re, escribe: %rimeroMes y CLC en [Aceptar]
Escribe entre las lneas:
%u&lic Function %rimeroMes13
y
"nd Function
La siguiente lnea:
%rimeroMesF Date.erial1Wear1+o<36 Mont,1+o<3 J16 13
(no te preocupes de momento en "entender la lnea de programa anterior)
CLC en el icono '(uardar*.
VB Access 2000 Ferm Vil 44
Vuelve al 'Microsoft Access*
- "Ejecuta el %-O(2 (CLC en el icono 'Vista*, para pasar a "Modo Ejecucin)
Si todo funciona correctamente en el campo 'Fec,a de Facturaci0n* aparece el da 1 del
mes siguiente a la fecha que tienes en el campo '%edido de fec,a*.
Antes de continuar deberamos tener claro lo que significa:
Date.erial 1Wear1+o<36 Mont,1+o<3J16 13
En lugar de explicarte lo que quiere decir la frmula anterior; prefiero ensearte cmo
puedes descubrirlo t mismo.
Haz lo siguiente:
En primer lugar debes situarte en el "ditor de Visual Basic
Men Ayuda
Ayuda de Microsoft Visual Basic
Referencia del lenguaje de Visual Basic
Funciones
M-P
Now
etc
- Nos quedara "investigar lo que hace 'Date.erial* y 'Mont,*. Es importante que te
acostumbres a "navegar por la ayuda, ya que hay mas informacin en la a7uda del
Access que en el libro ms grueso que puedas encontrar en cualquier librera (y adems
es ms barato). Tambin es cierto, que muchas veces el "lenguaje tcnico que utiliza la
ayuda no es demasiado afortunado. Piensa de todas formas, que cunto ms sepas sobre
el "Visual Basic para Aplicaciones, ms provecho podrs sacar de la ayuda.
j) Vamos a "completar el %-O(2.
- Se trata de hacer una nueva funcin parecida a %rimeroMes13, pero que sirva para
cualquier fecha.
Accede al ""ditor de Visual Basic
La nueva funcin que haremos, la colocaremos en un nuevo mdulo. Haz lo siguiente:
Men nsertar
Mdulo y
Men nsertar
Procedimiento.
Tipo: Funcin
mbito: Pblico
En el campo '+om&re* escribe: %rimeroMes2ualAuiera y CLC en [Aceptar]
Escribe:
%u&lic Function %rimeroMes2ualAuiera12ual As Date3 As Date
%rimeroMes2ualAuieraFDate.erial1Wear12ual36 Mont,12ual3J16 13
"nd Function
"Vuelve la ventana 'Microsoft Access*.
VB Access 2000 Ferm Vil 45
- Vamos a colocar la funcin %rimeroMes2ualAuiera en el formulario %-O(2 de la
siguiente forma:
"Abre en modo diseBo el formulario %-O(2
nserta un nuevo "cuadro de texto con las caractersticas:
Etiqueta: "scri&e una fec,a
Propiedades:
Nombre: F"25A
Formato: Fec,a corta
Valor predeterminado: FFec,a13
nserta otro "cuadro de texto con las siguientes caractersticas:
Etiqueta: elimnala (selecciona la etiqueta y pulsa [Supr])
Propiedades:
Origen del control: F%rimeroMes2ualAuiera1[F"25A]3
Formato: Fec,a larga
- Graba el formulario %-O(2 con el mismo nombre y ejectalo:
Escribe en el campo '"scri&e una fec,a*, la fecha que quieras.
Deseo fervientemente que te funcione correctamente, ya que en caso contrario
debers repasarlo todo y si no encuentras los posibles errores, debers repetirlo.
k) "Cierra la base de datos V9.XAE y crea una nueva base de datos (en tu carpeta) de nombre
V9.XAE1.
- Vamos a crear un formulario (en V9.XAE1) de nombre :-9]+(XEO que sirva para
calcular el rea de un tringulo...
Crea un Formulario en blanco y sitate en Vista DiseBo
Desactiva (si est activado) el icono 'XtiliRar Asistentes ara controles* del (ruo)
2ontroles.
Graba el formulario con el nombre :-9]+(XEO
Vamos a colocar en primer lugar un "ttulo guapo a nuestro formulario...
CLC en el icono '"tiAueta* del "(ruo) 2ontroles:
Traza un rectngulo en la parte superior del formulario (contendr la frase: REA DE
UN TRNGULO)
Escribe: ]-"A D" X+ :-9]+(XEO y CLC en cualquier punto fuera de la "etiqueta.
Haz CLC en la "etiqueta anterior para seleccionarla.
Utilizando las opciones del (ruo) Fuente y (ruo) 2ontroles
Consigue aproximadamente lo siguiente:
VB Access 2000 Ferm Vil 46
Utilizando el icono 'E=nea*:
el icono '-ectngulo*:
Adems del icono '"tiAueta* que hemos utilizado anteriormente del '2uadro de
5erramientas*. Consigue, aproximadamente lo siguiente:
nserta en el formulario, 3 cuadros de texto, con las siguientes caractersticas:
Cuadro de texto 1: Etiqueta = BA." (en +egrita)
Propiedad '+om&re* = &ase
Cuadro de texto 2: Etiqueta = AE:X-A (en +egrita)
Propiedad '+om&re* = altura
Cuadro de texto 3: Etiqueta = ]-"A (Negrita y Tamao de Fuente: 12)
Propiedad '+om&re* = tringulo (negr. y fuen:12)
Coloca los 3 cuadros de texto aproximadamente con la siguiente distribucin:
VB Access 2000 Ferm Vil 47
Selecciona el formulario, es decir: CLC en el botn
CLC en el icono '%roiedades*:
Cambia las propiedades:
Barras de desplazamiento: +inguna
Selectores de registro: +o
Botones de desplazamiento: +o
Separadores de registro: +o
Graba el formulario con el mismo nombre :-9]+(XEO
Pasa a "Modo Ejecucin (Vista Formulario)
Debers tener aproximadamente lo siguiente:
Vuelve a "Vista Diseo
nserta en nuestro formulario 2 botones de comando con las siguientes caractersticas:
Botn 1: Nombre Externo: 2AE2XEA-
Propiedad '+om&re*: calcular
Botn 2: Nombre Externo: BO--A-
Propiedad '+om&re*: &orrar
Graba de nuevo el formulario con el mismo nombre :-9]+(XEO
Bien, la parte "visual del programa ya est hecha, vamos a por la parte de "creacin de
cdigo...
Se trata de hacer el siguiente programa:
"Al hacer CLC en [CALCULAR], el programa nos pregunta cul es la base y la altura
del tringulo y a continuacin nos escribe en el formulario la base y la altura que hemos
introducido y tambin nos escribe en el campo correspondiente, el rea del tringulo.
VB Access 2000 Ferm Vil 48
Veamos:
Selecciona el botn [CALCULAR]
Men Contextual
Generar evento...
Selecciona la opcin '(enerador de c0digo* y [Aceptar]
Escribe el siguiente programa:
%ri!ate .u& calcularV2licY13
Dim &as As Dou&le
Dim alt As Dou&le
Dim are As Dou&le
&as F 9nutBox1'L2ul es la BA." del tringuloN*3
alt F 9nutBox 1'L2ul es la AE:X-A del tringuloN*3
are F &asOalt T 2
[&ase] F &as
[altura] F alt
[tringulo] F are
"nd .u&
Graba lo que hemos hecho (CLC en el icono "Guardar)
Vuelve al "Microsoft Access
Pasa a "Modo Ejecucin y CLC en [CALCULAR]
Sera conveniente que probaras varias veces el "programa
Vuelve a "Modo Diseo
Vamos a "programar el botn [BORRAR].
. Selecciona el botn [BORRAR]
. Selecciona la opcin 'Ver c0digo*
. Escribe el siguiente programa:
%ri!ate .u& &orrarV2licY13
[&ase] F '*
[altura] F '*
[tringulo] F '*
"nd .u&
. Vuelve al "Microsoft Access
. Pasa a "Modo Ejecucin y CLC en [BORRAR]
Sera conveniente que probaras varias veces el "programa, es decir, el funcionamiento
de los botones [CALCULAR] y [BORRAR]
l) Se trata de hacer en este apartado lo mismo que en el anterior, pero para el "trapecio.
- Desde la pantalla inicial de la base de datos V9.XAE1
- Crear Formulario en &lanco
- "Vista Diseo
VB Access 2000 Ferm Vil 49
- Desactiva, si est activado, el icono "Utilizar Asistentes para controles del Grupo:
Controles.
- Graba el formulario con el nombre :-A%"29O
- Consigue aproximadamente el formulario que aparece en la siguiente ilustracin:
Y con las siguientes caractersticas:
Un control '"tiAueta* que contiene el texto: ]-"A D" X+ :-A%"29O
El dibujo de un trapecio, utilizando el icono 'E=nea*
Tres controles 'etiAueta* que contienen el texto:
base mayor
base menor
altura
del dibujo.
Un control "etiqueta que contiene la "explicacin del rea de un trapecio.
Cuatro "cuadros de texto con las siguientes caractersticas:
Cuadro de Texto 1: Etiqueta = BA." MAWO-
Propiedad '+om&re* = &ase1
Cuadro de Texto 2: Etiqueta = BA." M"+O-
Propiedad '+om&re* = &ase2
Cuadro de Texto 3: Etiqueta = AE:X-A
Propiedad '+om&re* = altura
Cuadro de Texto 4: Etiqueta = ]-"A
Propiedad '+om&re* = traecio
Dos "botones de comando con las caractersticas:
Botn 1: Nombre externo = 2AE2XEA-
Propiedad '+om&re* = calcular
Botn 2: Nombre externo = BO--A-
Propiedad '+om&re* = &orrar
VB Access 2000 Ferm Vil 50
Un recuadro que rodea todo el formulario, utilizando el icono -ectngulo del
'(ruo) 2ontroles*.
Cambia las siguientes 'roiedades del formulario*:
Barras de desplazamiento = +inguna
Selectores de registro = +o
Botones de desplazamiento = +o
Separadores de registro = +o
- Asocia el siguiente programa al botn [2AE2XEA-]:
%ri!ate .u& calcularV2licY13
Dim &ma7or As Dou&le
Dim &menor As Dou&le
Dim alt As Dou&le
Dim trae As Dou&le
&ma7or F 9nutBox 1'L2ul es la &ase ma7orN*3
&menor F 9nutBox 1'L2ul es la &ase menorN*3
alt F 9nutBox 1'L2ul es la alturaN*3
trae F &ma7or J &menor O alt T2
[&ase1] F &ma7or
[&ase2] F &menor
[altura] F alt
[traecio] F trae
"nd .u&
- Asocia el siguiente procedimiento al botn [BO--A-]:
%ri!ate .u& &orrarV2licY13
[&ase1] F '*
[&ase2] F '*
[altura] F '*
[traecio] F '*
"nd .u&
- Prueba el funcionamiento del formulario :-A%"29O
m) Vamos a hacer en la B. de D. V9.XAE1 un nuevo formulario de nombre %-O(-AMA1 que
haga las veces de "MEN para los dos formularios anteriores: :-9]+(XEO y :-A%"29O.
- Haz un nue!o formulario en blanco de nombre %-O(-AMA1 con el siguiente aspecto y
caractersticas:
Asecto)
VB Access 2000 Ferm Vil 51
2aracter=sticas)
Un control "etiqueta que contiene el texto: 2]E2XEO D" ]-"A.
Tres "botones de comando:
Botn 1: Propiedad "Nombre: tringulo
Propiedad "Ttulo: ]rea de un :ringulo
Botn 2: Propiedad "Nombre: traecio
Propiedad "Ttulo: ]rea de un :raecio
Botn 3: Propiedad "Nombre: fuera
Propiedad "Ttulo: .alir del %rograma
Cambia las propiedades de siempre en el formulario %-O(-AMA1:
Barras de desplazamiento = +inguna
Selectores de registro = +o
Botones de desplazamiento = +o
Separadores de registro = +o
- El 'c0digo* correspondiente deber ser el siguiente:
Para el botn 1:
%ri!ate .u& tringuloV2licY13
Do2md#OenForm ':-9]+(XEO*
"nd .u&
Para el botn 2:
%ri!ate .u& traecioV2licY13
Do2md#OenForm ':-A%"29O*
"nd .u&
Para el botn 3:
%ri!ate .u& fueraV2licY13
Do2md#Muit ac"xit
"nd .u&
Observa la instruccin que sirve para "abrir un formulario y la instruccin que sirve
para salir del Access.
- Ejecuta y prueba los botones del formulario %-O(-AMA1, pero antes graba el formulario.
n) Se trata de hacer en la B. de D. V9.XAE1, un nuevo formulario de nombre %-O(-AMA2
que haga lo mismo que el formulario %-O(-AMA1, pero utilizando 'Botones de oci0n* en
lugar de 'Botones de 2omando*.
- Haz un nuevo formulario en blanco, de nombre %-O(-AMA2 con el siguiente aspecto y
caractersticas:
VB Access 2000 Ferm Vil 52
Aspecto:
2aracter=sticas)
Un control "etiqueta que contiene el texto: '2lculo de ]reas*
Un control 'Bot0n de oci0n*, debers hacer CLC en el icono 'Bot0n de
oci0n* del "Grupo: Controles:
Con las siguientes caractersticas:
Propiedad '+om&re*: tringulo
En la etiqueta del botn, escribe: ]rea de un :ringulo
Un segundo "botn de opcin con las siguientes caractersticas:
Propiedad '+om&re* = traecio
Etiqueta = ]rea de un :raecio
Cambia las "propiedades de siempre en el formulario %-O(-AMA2
Un "botn de comando con las siguientes propiedades:
Propiedad "Nombre = continuar
Propiedad "Ttulo = A2"%:A-
- El 'c0digo* que debes asociar al botn [A2"%:A-] es el siguiente:
%ri!ate .u& continuarV2licY13
9f [tringulo] F :rue :,en Do2md#OenForm ':-9]+(XEO*
9f [traecio] F :rue :,en Do2md#OenForm ':-A%"29O*
"nd .u&
Es decir:
Si el botn de opcin 1 ([tringulo]) est activado (True), se abrir el formulario
:-9]+(XEO. Exactamente lo mismo para el formulario :-A%"29O.
VB Access 2000 Ferm Vil 53
- Ejecuta y prueba el funcionamiento del formulario %-O(-AMA2
Observa lo que sucede si tenemos "activados los dos botones de opcin y hacemos CLC
en [Aceptar].
o) Se trata de hacer otro formulario para la B. de D. V9.XAE1, de nombre %-O(-AMA? que
haga lo mismo que el %-O(-AMA2, pero solucionando el problema que hemos observado en
el anterior formulario y adems trabajaremos con un nuevo "control: '2asilla de !erificaci0n*
que es muy parecido al "botn de opcin.
- Haz un nuevo formulario en blanco de nombre %-O(-AMA? con el siguiente aspecto y
caractersticas:
Asecto)
Caractersticas:
Un control "etiqueta con el texto: 2lculo de ]reas
Un control '(ruo de ociones*, debers hacer CLC en el icono '(ruo de
Ociones* del "Grupo: Controles:
Con las siguientes caractersticas:
Propiedad '+om&re* = todo
En la etiqueta del "grupo de opciones escribe: 5aR 2E92 en la oci0n deseada.
Tres controles '2asilla de !erificaci0n* (bscalo en el "Grupo: Controles), que
debes colocar en el interior del "Grupo de Opciones, es decir, con el "Grupo de
Opciones seleccionado, haz CLC en el icono '2asilla de !erificaci0n* y CLC en
el interior del gruo de ociones. Y escribe como "etiqueta de las tres casillas de
verificacin:
]rea :ringulo
]rea :raecio
.alir
Un "botn de comando con las siguientes propiedades:
Propiedad "Nombre = continuar
Propiedad "Ttulo: A2"%:A-
Cambia las propiedades de siempre, en el formulario %-O(-AMA?.
VB Access 2000 Ferm Vil 54
- El 'c0digo* que debes asociar al botn [ACEPTAR] es el siguiente:
%ri!ate .u& continuarV2licY13
.elect 2ase [todo]
2ase 1
Do2md#OenForm ':-9]+(XEO*
2ase 2
Do2md#OenForm ':-A%"29O*
2ase ?
Do2md#Muit ac"xit
"nd .elect
"nd .u&
Antes de continuar, observa:
Utilizamos la estructura '.elect 2ase > "nd .elect, para evitar escribir tres
estructuras '9f > :,en*, una para cada una de las 3 posibilidades de nuestro
'gruo de ociones*.
Nuestro "grupo de opciones tiene 3 posibilidades, ya que contiene 3 casillas de
verificacin (sera igual si fueran tres botones de opcin). El valor del grupo de
opciones: [todo], puede ser 1 (si est activada la 1 casilla), 2 (si lo est la 2) y ?
(si lo est la 3).
- Ejecuta y prueba el formulario %-O(-AMA?.
Observars que slo puedes activar una de las tres opciones, esto es debido a que se
encuentran en un control "grupo de opciones.
p) Como el formulario %-O(-AMA? nos ha quedado muy bien, nos gustara que se
autoejecutara al abrir la B. de D. V9.XAE1. Haz lo siguiente:
- Desde la pantalla inicial de la B. de D. V9.XAE1, haz:
Botn del Office
Opciones de Access
Base de datos actual
Ttulo de la aplicacin, escribe: ]-"A.
Mostrar formulario: PROGRAMA3
[Aceptar]
- "Cierra y vuelve a abrir la B. de D. V9.XAE1. Si todo funciona correctamente debe
aparecer el formulario %-O(-AMA? y en la primera lnea de la pantalla al lado del icono
del "Access debe aparecer el texto ]-"A..
q) Vamos a hacer en este apartado, un programa que sirva para calcular el .V.A. ntentaremos
que sea un programa "cerrado es decir que no se pueda modificar (una vez acabado) y que
tenga un "aspecto profesional...
- Crea una nueva "base de datos de nombre 9VA (en tu carpeta).
VB Access 2000 Ferm Vil 55
- Crea un formulario en blanco de nombre '2lculo del 9VA* con el siguiente aspecto y
caractersticas:
Asecto)
Caractersticas:
Control 'etiAueta* con el texto: 2lculo del 9#V#A#
Control 'cuadro de texto* de caractersticas:
Propiedad "Nombre: cantidad
Propiedad "Formato: Fi8o
Propiedad "Lugares decimales: 2
En su "etiqueta escribe: '2A+:9DAD)*
Control 'gruo de ociones* con dos &otones de oci0n:
Grupo de Opciones:
Propiedad '+om&re*: moneda
Propiedad 'Valor redeterminado*: 1
Elimina su "etiqueta
Botn de opcin 1:
Etiqueta: %:.#
Botn de opcin 2:
Etiqueta: "X-O.
Control 'gruo de ociones* con tres casillas de !erificaci0n:
Grupo de Opciones:
Propiedad '+om&re*: i!a
Propiedad 'Valor redeterminado*: 2
Etiqueta: '^ 9#V#A*
Casilla de verificacin 1:
Etiqueta: C^
Casilla de verificacin 2:
Etiqueta: 7^
Casilla de verificacin 3:
Etiqueta: 1G^
Control '&ot0n de comando*:
Propiedad '+om&re*: O_
Propiedad ':=tulo*: Acetar
Propiedades del formulario:
Barras de desplazamiento = +inguna
Selectores de registro = +o
VB Access 2000 Ferm Vil 56
Botones de desplazamiento = +o
Separadores de registro = +o
- "Cierra de momento el formulario '2lculo del 9VA* y crea un nuevo formulario en blanco
de nombre -".XE:ADO con el siguiente aspecto y caractersticas:
Aspecto:
Caractersticas:
Cinco controles 'etiAueta* con el texto:
PESETAS
EUROS
CANTDAD:
.V.A.:
P.V.P.:
Seis 'cuadros de texto*, todos ellos sin etiqueta y propiedad '+om&re*:
PESETAS EUROS
CANTDAD cants caneur
.V.A. i!ats i!aeur
P.V.P. !ts !eur
Y todos ellos con la propiedad 'Formato* F Fi8o y la propiedad Eugares
decimales F 2
VB Access 2000 Ferm Vil 57
Propiedades del formulario:
Barras de desplazamiento = +inguna
Selectores de registro = +o
Botones de desplazamiento = +o
Separadores de registro = +o
Ajuste de tamao Automtico = +o
- Supongo que te habrs dado cuenta de lo que pretendemos, se trata de conseguir el
siguiente programa:
<< Escribimos en el cuadro de texto [cantidad] del formulario '2lculo del 9VA* un nmero,
seleccionamos %:. o "X-O., seleccionamos uno de los tres '^ de 9VA*. Al pulsar el botn
[Acetar] pretendemos que se abra el formulario '-".XE:ADO* con sus 6 campos que nos
muestran el resultado de los clculos >>.
Veamos:
Selecciona en 'Modo DiseBo* el botn [Aceptar] del formulario '2lculo del 9VA*
y asciale el siguiente 'c0digo*:
Pri-ate Sub +W$:licX()
0o:mdO+penNorm "<ES?5;A0+"
2( YmonedaZ 3 1 ;&en
Norms[Y<ES?5;A0+ZOYcaneurZ 3 ""
Norms[Y<ES?5;A0+ZOYcanptsZ 3 YcantidadZ
End 2(
2( YmonedaZ 3 2 ;&en
Norms[Y<ES?5;A0+ZOYcanptsZ 3 ""
Norms[Y<ES?5;A0+ZOYcaneurZ 3 YcantidadZ
End 2(
2( Norms[Y<ES?5;A0+ZOYcanptsZ 3 "" ;&en Norms[Y<ES?5;A0+ZOYcanptsZ 3 $
Norms[Y<ES?5;A0+ZOYcaneurZ B 199O)G9
2( Norms[Y<ES?5;A0+ZOYcaneurZ 3 "" ;&en Norms[Y<ES?5;A0+ZOYcaneurZ 3 $
Norms[Y<ES?5;A0+ZOYcanptsZ C 199O)G9
2( Y2VAZ 3 1 ;&en
Norms[Y<ES?5;A0+ZOYi-aptsZ 3 Norms[Y<ES?5;A0+ZOYcanptsZ B 0O0/
Norms[Y<ES?5;A0+ZOYi-aeurZ 3 Norms[Y<ES?5;A0+ZOYcaneurZ B 0O0/
End 2(
2( Y2VAZ 3 2 ;&en
Norms[Y<ES?5;A0+ZOYi-aptsZ 3 Norms[Y<ES?5;A0+ZOYcanptsZ B 0O07
Norms[Y<ES?5;A0+ZOYi-aeurZ 3 Norms[Y<ES?5;A0+ZOYcaneurZ B 0O07
End 2(
2( Y2VAZ 3 ) ;&en
Norms[Y<ES?5;A0+ZOYi-aptsZ 3 Norms[Y<ES?5;A0+ZOYcanptsZ B 0O19
Norms[Y<ES?5;A0+ZOYi-aeurZ 3 Norms[Y<ES?5;A0+ZOYcaneurZ B 0O19
End 2(
Norms[Y<ES?5;A0+ZOYp-pptsZ 3 :0bl(Norms[Y<ES?5;A0+ZOYcanptsZ) $
7 :0bl(Norms[Y<ES?5;A0+ZOYi-aptsZ)
Norms[Y<ES?5;A0+ZOYp-peurZ 3 :0bl(Norms[Y<ES?5;A0+ZOYcaneurZ) $
7 :0bl(Norms[Y<ES?5;A0+ZOYi-aeurZ)
End Sub
Bien, antes de continuar observemos:
Debido a que el procedimiento lo llamaremos desde el formulari "Clculo del VA,
al referirnos a los campos del formulario "RESULTADO: [canpts], [caneur], etc.
VB Access 2000 Ferm Vil 58
Debemos anteponer el prefijo: Forms\[-".XE:ADO]#, a cada uno de los campos,
ya que en caso contrario el programa no podra "encontrarlos.
La estructura del programa es sencilla (lo que "marea es el prefijo Forms\
[-".XE:ADO]#, por todos sitios), ya que utilizamos nicamente la estructura de
programacin '9f > :,en*. Estdialo con detalle, recuerda que [moneda] es el
nombre del primer "grupo de opciones de forma que si [moneda] = 1, significa que
son "pesetas y si [moneda] = 2 son "euros. Exactamente lo mismo sucede con
[iva] que puede valer 1 (4%), 2 (7%) o 3 (16%).
En las dos ltimas lneas del programa aparece una nueva funcin incorporada:
2D&l. Utilizamos esta nueva funcin que convierte el contenido de un cuadro de
texto, en nmero tipo Dou&le. En los dems casos no nos hemos preocupado de la
"conversin, porque al multiplicar o dividir un cuadro de texto por un nmero, el VB
los convierte implcitamente. En las ltimas lneas del programa anterior hemos de
convertir los dos cuadros de texto explcitamente con la funcin 2D&l, porque
sumamos. El signo de sumar en dos cuadros de texto (si no los convertimos a
numrico), es equivalente a concatenar los valores de los dos cuadros. Como
puedes comprobar fcilmente si en el programa anterior eliminas los dos 2D&l. El
problema se ha presentado por primera vez en este programa, porque es el
primero en que no utilizamos variables que declaramos previamente (utilizamos
directamente los nombres de los diferentes controles del formulario) y adems
necesitamos "sumar precisamente.
- Prueba exhaustivamente el funcionamiento del formulario '2lculo del 9VA*. Espero que
te funcione correctamente.
- Vamos a intentar "mejorar el programa:
Observamos al ejecutar el programa (al hacer CLC en el [Aceptar] del formulario
'2lculo del 9VA*) que el enfoque del cursor queda situado en el campo
2A+:9DAD T %".":A., por otro lado podemos escribir en cualquiera de los 6
campos del formulario RESULTADO. Para solucionar el problema haz lo siguiente:
Accede al formulario "RESULTADO en 'Modo DiseBo*.
Selecciona los 6 campos (has de mantener pulsada una de las teclas de
maysculas).
CLC en el icono '%roiedades*
Cambia la propiedad:
Bloqueado = .=
Graba de nuevo el formulario
Ejecuta y prueba el formulario: 2lculo del 9VA
Si intentas borrar o cambiar cualquier campo del formulario "RESULTADO, como
podrs observar no podrs.
Pero continuamos con el problema de que el primer campo queda seleccionado y
adems podemos colocar el cursor en cualquiera de los campos de "RESULTADO
Ya que todo lo que aparece en el formulario "RESULTADO es slo "informativo,
haz lo siguiente:
VB Access 2000 Ferm Vil 59
Vuelve a acceder a las "propiedades de los 6 campos de "RESULTADO y cambia
la propiedad:
Activado = +o
Si pruebas de nuevo el programa vers que hemos conseguido lo que queramos.
- Otra "mejora que podramos hacer es la siguiente:
Si abres el formulario '2lculo del 9VA* y en el campo '2A+:9DAD)* no escribes
nada y haces CLC en [Aceptar], aparecer como es lgico un mensaje de error.
Para salir del "error haz CLC en [Terminar]
Para solucionar el problema haz lo siguiente:
"Edita el programa que tenemos asociado al botn [Aceptar]:
%ri!ate .u& O_V2licY13
########
########
########
"nd .u&
Y aade las siguientes lneas:
Private Sub OK_Click()
9f 9s+ull1[cantidad]3 :,en
MsgBox 1'De&es escri&ir un n$mero en 2A+:9DAD*3
"lse
DoCmd.OpenForm "RESULTADO
.....
.....
.....
"nd 9f
End Sub
Graba de nuevo el formulario y prubalo. Espero que te funcione correctamente si
haces CLC en el [Aceptar] del formulario y no has escrito nada en el campo
"CANTDAD:.
- Supongamos que estamos totalmente satisfechos con nuestro programa, ha quedado tan
bonito que pretendemos venderlo, pero para ello nos encontramos con varios problemas:
1) Queremos que aparezca nuestro nom&re.
2) No nos interesa que 'modifiAuen* nuestro programa.
3) Nos gustara que el programa se "autoejecutara y no apareciera ni la Base de
Datos '9VA*, ni cualquier referencia al Access.
Para solucionar estos inconvenientes, haz lo siguiente:
Botn del Office
Opciones de Access
Base de datos actual
Ttulo de la aplicacin: 1escri&e tu nom&re 7 aellidos3
Mostrar el formulario: 2lculo del 9VA
Desactiva todas las opciones que aparecen por defecto en toda la ventana.
Activa la opcin: Ventanas sueruestas
VB Access 2000 Ferm Vil 60
[Acetar]
[.=]
[Acetar]
Cierra la base de datos 9VA y vuelvela a abrir.
Prueba "nuestro programa
Observa que puedes hacer que se visualizen los dos formularios
ntenta cambiar alguna cosa .
- Resulta que ahora que ya hemos acabado y "protegido nuestro programa, nos gustara
cambiar alguna cosa.
No hay problema, haz lo siguiente:
Sal de nuestro programa: Men Archivo Salir
Ejecuta el "Access
Localiza nuestra '&ase de datos) 9VA*. Cuando la tengas seleccionada y antes de
hacer CLC en [Abrir], pulsa y mantn pulsada una de las dos teclas de
maysculas. Con la tecla de maysculas pulsada haz CLC en [Abrir], espera unos
segundos antes de dejar de pulsar la tecla. Si todo va bien aparecer la base de
datos 9VA, con todas sus "posibilidades, dicho de otra forma: si mantenemos
pulsada una de las dos teclas de masculas al abrir una base de datos, anulamos
las posibles '0rdenes de 9nicio*.
r) Uno de los errores ms frecuentes al programar en VBA es por culpa de los "tipos de datos.
Vamos a trabajar con una nueva base de datos para intentar "aclarar el problema.
- Crea una nueva base de datos de nombre Aclaremos, en TuCarpeta.
- Crea un mdulo en Aclaremos de nombre M0dulo1
- Escribe en el M0dulo1 el siguiente programa:
.u& %ro&lema1A13
Dim x As 9nteger6 7 As 9nteger
x F 9nutBox1U"scri&e un n$meroU3
7 F 9nutBox1U"scri&e otro n$meroU3
MsgBox UEa suma es F U D 1x J 73
MsgBox U"l roducto es F U D 1x O 73
"nd .u&
- Ejecuta el programa desde la ventana 9nmediato. En principio no hemos de observar
ningn problema, siempre y cuando los dos nmeros que introduzcamos sean 9nteger.
- Escribe en el M0dulo1 y a continuacin del anterior, el siguiente programa:
.u& %ro&lema1B13
x F 9nutBox1U"scri&e un n$meroU3
7 F 9nutBox1U"scri&e otro n$meroU3
MsgBox UEa suma es F U D 1x J 73
MsgBox U"l roducto es F U D 1x O 73
"nd .u&
- Ejecuta el programa %ro&lema1B desde la ventana "nmediato:
A la primera pregunta, contesta escribiendo 2.
A la segunda pregunta, contesta escribiendo C.
Si todo funciona correctamente, el primer resultado ha de ser: Ea suma es F 2C y
el segundo resultado "l roducto es F K
VB Access 2000 Ferm Vil 61
Conclusin: multiplica bien pero no sabe sumar.
El problema se presenta porque en el %ro&lema1B, no hemos declarado las variables x e 7. Y
el 9nutBox es una funcin que devuelve (por defecto) .tring. Es decir, los valores de x e 7
son textos.
El operador "+ en el caso de textos es equivalente al operador "&, es decir concatena los dos
textos, por esta razn aparece 2C.
Por otro lado, el operador "* siempre multiplica nmeros. El VB, al encontrarse un producto
entre textos, convierte automticamente (si tiene sentido) los dos textos a nmeros; se dice que
el VB con!ierte iml=citamente los dos textos a nmeros.
- Para verlo ms claro, vuelve a ejecutar el %ro&lema1B ...
A la primera pregunta, contesta escribiendo %ee
A la segunda pregunta, contesta escribiendo %aco
Si todo funciona correctamente, el primer resultado ser %ee%aco y el segundo
resultado dar el error n 13: +o coinciden los tios de datos, es decir no puede
convertir los dos textos a nmeros y por lo tanto no puede multiplicarlos.
Haz clic en [Finalizar] para salir del "error.
- Vuelve a ejecutar el %ro&lema1B:
A la primera pregunta, contesta escribiendo 162
A la segunda pregunta, contesta escribiendo @6C
Si todo funciona correctamente, el primer resultado ser 162@6C y el segundo G6CK.
Es decir, VB convierte los dos textos a Dou&le automticamente y calcula
correctamente su producto.
La conclusin que hemos de sacar de lo que hemos hecho es: "s mu7 imortante declarar
las !aria&les antes de utiliRarlas.
De todas formas es muy fcil, en un programa con muchas variables despistarse y llegar al
fatdico error n` 1?) +o coinciden los tios.
Vamos a ver un "truco que nos permite descubrir el "tipo de datos en cada momento ...
- Escribe en el M0dulo1 de la B#D# Aclaremos el siguiente programa:
.u& %ro&lema1213
Dim x As 9nteger
Dim 7 As Dou&le
x F 9nutBox1U"scri&e un n$mero enteroU3
MsgBox U"l !alor x F U D x D U es U D :7e+ame1x3
7 F 9nutBox1U"scri&e un n$mero decimalU3
MsgBox U"l !alor 7 F U D 7 D U es U D :7e+ame173
R F 9nutBox1U"scri&e lo Aue AuierasU3
MsgBox U"l !alor R F U D R D U es U D :7e+ame1R3
"nd .u&
- Ejecuta el procedimiento %ro&lema12. Espero que est ms "claro nuestro problema:
:7e+ame1!aria&le3 es una funcin incorporada en el VB, que nos devuelve el
tio de la variable.
Observa que en la variable R siempre aparecer .tring, hayamos escrito o no un
nmero.
- Existe una alternativa a la instruccin Dim, que nos permite declarar variables, y es la
instruccin .tatic, aunque no es exactamente lo mismo ...
Escribe en el M0dulo1 el siguiente procedimiento:
VB Access 2000 Ferm Vil 62
.u& %ro&lema1D13
Dim n As 9nteger
Dim s As 9nteger
For i F 1 :o ?
n F 9nutBox1U"scri&e un enteroU3
s F s J n
+ext
MsgBox UEa suma es F U D s
"nd .u&
Ejecuta un par o tres de veces el %ro&lema1D. En principio no ha de haber
diferencia cada vez que ejecutes el programa: nos pregunta 3 nmeros y nos da
como resultado su suma. Observa de todas formas que el contador suma) sFsJn,
no lo hemos inicializado a cero.
Escribe en el M0dulo1 de la B.D. Aclaremos, el siguiente procedimiento:
.u& %ro&lema1"13
Dim n As 9nteger
.tatic s As 9nteger
For i F 1 :o ?
n F 9nutBox1U"scri&e un enteroU3
s F s J n
+ext
MsgBox UEa suma es F U D s
"nd .u&
Ejecuta un par o tres de veces el %ro&lema1". Observars que la primera vez que
ejecutas el programa, calcula correctamente la suma de los tres nmeros
introducidos; pero si vuelves a ejecutar el programa, la suma de los tres nuevos
nmeros se acumula a la suma anterior.
2onclusi0n
Cada vez que se ejecuta una instruccin Dim, la variable correspondiente se inicializa (0 para
numrico, vaco para String). En cambio una instruccin .tatic, no inicializa el valor de la
variable: conser!a el !alor anterior. Dicho de otra forma, las dos instrucciones siguientes:
.tatic s As 9nteger
s F 0
son equivalentes a Dim s As 9nteger
Si repasas los programas del captulo anterior, vers que en muchos casos no era necesario
inicializar las variables, porque utilizamos Dim; pero en algn caso s era necesario, por
ejemplo en una variable que acumula un producto: es necesario inicializar la variable a 1, ya
que en caso contrario el roducto acumulado siempre nos dar 0.
- Crea un formulario (de nombre Formulario1) en blanco, para la B# D# Aclaremos.
- nserta en el Formulario1, cuatro cuadros de texto con las siguientes caractersticas:
Cuadro de Texto 1:
Etiqueta: +$mero "ntero
Propiedad Nombre: x
Cuadro de Texto 2:
Etiqueta: Otro "ntero
Propiedad Nombre: 7
Cuadro de Texto 3:
Etiqueta: .uma
Propiedad Nombre: sum
Cuadro de Texto 4:
Etiqueta: %roducto
VB Access 2000 Ferm Vil 63
Propiedad Nombre: rod
- nserta en el Formulario1 un botn de comando con las siguientes caractersticas:
Etiqueta: Borrar
Propiedad Nombre: Borrar
En el mdulo del formulario1, escribe el siguiente procedimiento de evento:
%ri!ate .u& BorrarV2licY13
[x] F UU
[7] F UU
[sum] F UU
[rod] F UU
"nd .u&
- nserta en el Formulario1 otro botn de comando con las siguientes caractersticas:
Propiedad Nombre: %ro&lema2A
Propiedad Ttulo: %ro&lema2A
Asocia al botn el siguiente procedimiento de evento:
%ri!ate .u& %ro&lema2AV2licY13
Dim a As 9nteger6 & As 9nteger
a F [x]
& F [7]
[sum] F a J &
[rod] F a O &
"nd .u&
Prueba el funcionamiento del [Problema2A].
Si todo funciona correctamente no hay nada que decir.
- nserta en el Formulario1 otro botn de comando con las siguientes caractersticas:
Propiedad Nombre: %ro&lema2B
Propiedad Ttulo: %ro&lema2B
Asocia al botn el siguiente programa:
%ri!ate .u& %ro&lema2BV2licY13
[sum] F [x] J [7]
[rod] F [x] O [7]
"nd .u&
Prueba el funcionamiento del [Problema2B]. Si todo funciona correctamente
llegars a la conclusin que se nos presenta el mismo problema que en los
9nutBoxas.
El problema es exactamente el mismo: un cuadro de texto, igual que un nputBox
(por defecto) contiene un texto
La conclusin debera ser la misma: es muy importante utilizar variables que declaramos
previamente segn el "tipo que nos interese.
De todas formas vamos a solucionar el problema de otra forma, que tambin podramos utilizar
para los 9nutBoxas ...
- nserta en el Formulario1 otro botn de comando con las siguientes caractersticas:
Propiedad Nombre: %ro&lema22
Propiedad Ttulo: %ro&lema22
Asocia al botn el siguiente cdigo:
%ri!ate .u& %ro&lema22V2licY13
[sum] F 29nt1[x]3 J 29nt1[7]3
[rod] F 29nt1[x]3 O 29nt1[7]3
VB Access 2000 Ferm Vil 64
"nd .u&
- Prueba el programa anterior.
Observa que tenemos una alternativa al uso de variables "declaradas y es el uso de funciones
de con!ersi0n:
29nt1argumento3 = convierte el "argumento en nmero entero.
Si quieres consultar las diferentes funciones de conversin, accede a la ayuda de Visual Basic
(no del Access), concretamente el tema: Funciones de con!ersi0n de tios.
s) Hasta ahora nos hemos dedicado a programar en VBA sin utilizar "datos de la base de
datos subyacente a nuestros programas. Aunque en los ltimos ejercicios hemos utilizado
formularios, slo los hemos utilizado como soorte '!isual*.
Vamos a comenzar a trabajar con "datos de nuestras bases de datos. Piensa, que en realidad
la "programacin en Visual Basic del Access, ha de ser un instrumento para me8orar la
gesti0n de nuestras bases de datos Access.
En algunos de los ejercicios anteriores hemos utilizado rdenes propias del Access, como
Do2md#OenForm ':ringulo*; veremos en este apartado una forma muy fcil de estudiar
este tipo de instrucciones.
- Crea una nueva base de datos de nombre Access1 en TuCarpeta.
- Define en Access1 una tabla con la siguiente estructura (basta que accedas a Vista
DiseBo haciendo clic con el botn derecho en la pestaa [Tabla1], grbala como :a&la1):
+om&re del camo :io de datos
NumSocio Texto
NombreApell Texto
NF Texto
Direccin Texto
Telfono Texto
Observa que el primer campo (NumSocio) es la 2la!e %rincial, por defecto
(aparece una pequea llave a la izquierda del nombre)
La idea es disponer de una tabla que controle los "socios de un club.
- "Abre la tabla :a&la1 (es decir, Vista 5o8a de Datos) e introduce los siguientes registros:
NumSocio: 001A NumSocio: 002A
NombreApell: %eito (rillo NombreApell: Francisca .nc,eR
NF: C#?@2#7I?V NF: 7#I?2#0015
Direccin: Direccin: Eas %almeras @16 1`6 ?b
Telfono: @27 ?1 C2 Telfono: ?I7 @2 71
- Crea un Formulario (Cinta de Opciones: Crear Formularios - Formulario) para la tabla
:a&la1, y grbalo con el nombre .ocios.
- Utilizando el formulario anterior introduce el siguiente registro:
NumSocio: 00?A
NombreApell: %aAuito %SreR
NF:
Direccin:
Telfono: CI? ?? @@
VB Access 2000 Ferm Vil 65
El problema que nos planteamos es el siguiente:
1) En el formulario nos interesa visualizar el nmero de socio y el nombre y apellidos del ltimo
registro introducido.
2) En el formulario nos interesa un control que llamaremos "Nivel Confianza, y que segn el
valor que escribamos en dicho control nos interesa que suceda una cosa u otra, de la siguiente
forma:
Si el "Nivel de Confianza es 1, despus de introducir el nombre y apellidos del
socio, el cursor se coloca automticamente en el campo :elSfono
Dicho de otra forma: para un nivel igual a 1 no hemos de "rellenar el +if ni la
Direcci0n.
El socio 00?A seria un ejemplo de nivel 1.
Si el "Nivel de Confianza es 2, no es necesario introducir la Direcci0n. Es decir,
despus de introducir el +9F, el cursor debera situarse automticamente en el
:elSfono.
El socio 001A es un socio de nivel 2.
Si el "Nivel de Confianza no es ni 1 ni 2 no sucede nada especial, es decir, en
principio hemos de introducir todos los datos del socio.
El socio 002A seria un ejemplo de nivel "normal.
Vamos a ver si lo conseguimos:
- Sitate en la pantalla de diseBo del formulario .ocios e inserta tres cuadros de texto (en la
parte Detalle del formulario) con las siguientes propiedades:
Cuadro 1:
Etiqueta: .ocio Anterior
Propiedades:
Nombre: .ocioA
Activado: +o
Cuadro 2:
Etiqueta: (ninguna)
Propiedades:
Nombre: +om
Activado: +o
Cuadro 3:
Etiqueta: +i!el de 2onfianRa
Propiedades:
Nombre: +i!el
ndice de tabulacin: 1
- Cambia la distribucin del
formulario hasta que te
quede aproximadamente
de la siguiente forma (todo
ha de estar en la parte
Detalle del formulario, el
encabezado que aparecia
por defecto brralo):
VB Access 2000 Ferm Vil 66
- Nos interesa que en los controles .ocioA y +om aparezcan el +um.ocio y el
+om&reAell del ltimo registro, para ello, entre otras cosas, necesitamos "codificar unas
cuantas rdenes propias del Access:
"ltimo registro para poder recoger los valores ltimos de +um.ocio y
+om&reAell
"Nuevo registro para poder situarnos en un nuevo socio.
- Sitate en la pantalla de diseo del formulario .ocios y selecciona el formulario, es decir:
Sabremos que hemos seleccionado el formulario, si aparece un punto negro:
- Con el cursor del ratn en el "punto negro pulsa el botn derecho del ratn y accede a sus
roiedades.
- Sita el cursor de escritura en la propiedad Al A&rir y clic en [...], que aparece a la
derecha.
- Escoge la opcin '(enerador de c0digo* y [Aceptar]
- Acabamos de situarnos en el m0dulo del formulario .ocios, para escribir el
procedimiento de evento FormVOen, es decir, programa que se ejecutar al abrir el
formulario (Form_Open).
- Escribe el siguiente programa:
%ri!ate .u& FormVOen12ancel As 9nteger3
Dim x As .tring6 7 As .tring
Do2md#(o:o-ecord 6 UU6 acEast
x F [+um.ocio]) 7 F [+om&reAell]
Do2md#(o:o-ecord 6 UU6 ac+e<-ec
[.ocioA] F x
[+om] F 7
"nd .u&
clic
VB Access 2000 Ferm Vil 67
Observemos el programa:
Al abrir el formulario (Form_Open)
Declaramos dos variables x, y de tipo String
Nos situamos en el ltimo registro (acLast)
Asignamos a x e y los valores de los campos +um.ocio y +om&reAell, que
sern los ltimos, porque estamos situados en el ltimo registro.
Nos situamos en un nuevo registro (acNewRec)
Asignamos a los controles .ocioA y +om, los valores de las variables x e y.
Vamos a ver si funciona:
- Ejecuta el formulario "Socios
Si todo funciona correctamente, en los dos controles superiores aparecer: 00?A %aAuito
%SreR
- Escribe el nuevo registro:
NumSocio: 00CA
Nivel de Confianza: 1 (como es lgico no suceder nada especial)
NombreApell: 5erminia E0eR
NF: no escribas nada
Direccin: no escribas nada
Telfono: C1? @@ ?2 Pulsa [Tab] o [Return] para pasar al siguiente campo, que
corresponder a un nuevo registro.
- Supongo que te das cuenta del problema: estamos en un nuevo registro pero los datol que
aparecen en los dos primeros controles del formulario, no corresponden al ltimo registro.
Vamos a intentar solucionar el problema:
Sitate en la pantalla de diseo del formulario .ocios
nserta un botn de comando con las siguientes propiedades:
Nombre: +-egistro
Ttulo: Otro
Accede al mdulo del formulario y escribe el siguiente procedimiento de evento:
%ri!ate .u& +-egistroV2licY13
Dim x As .tring6 7 As .tring
Do2md#(o:o-ecord 6 UU6 acEast
x F [+um.ocio]) 7 F [+om&reAell]
Do2md#(o:o-ecord 6 UU6 ac+e<-ec
[.ocioA] F x
[+om] F 7
"nd .u&
Como puedes observar se trata de exactamente el mismo programa FormVOen
- Vuelve a la pantalla de diseo del formulario .ocios
Selecciona el formulario
Accede a las propiedades del formulario
Cambia las propiedades siguientes:
Selectores de registro: No
Botones de desplazamiento: No
Separadores de registro: No
- Abre el formulario .ocios e inventa un par o tres de registros para observar que los dos
primeros controles del formulario nos muestran los datos del "ltimo registro.
Espero que te funcione.
Seguramente habrs observado una incomodidad: al hacer clic en [Otro], el cursor no queda
situado (se llama foco), en el campo +um.ocio.
Corrige el procedimiento +-egistroV2licY de forma que nos quede:
VB Access 2000 Ferm Vil 68
%ri!ate .u& +-egistroV2licY13
Dim x As .tring6 7 As .tring
Do2md#(o:o-ecord 6 UU6 acEast
x F [+um.ocio]) 7 F [+om&reAell]
Do2md#(o:o-ecord 6 UU6 ac+e<-ec
[.ocioA] F x
[+om] F 7
+um.ocio#.etFocus
"nd .u&
Es decir, aadimos una nueva instruccin: +um.ocio#.etFocus, que forzar al cursor a
colocarse (SetFocus), en el campo +um.ocio.
Recuerda que es importante ir grabando todos los cambios que vamos haciendo.
- Vuelve a "ejecutar el formulario .ocios e inventa unos cuantos "socios.
- Vamos a resolver la segunda parte del problema que nos habamos propuesto (el del Nivel
de Confianza), que ser muy fcil de solucionar gracias a la nueva instruccin:
+om&re2amo#.etFocus: coloca el foco en "NombreCampo
Sitate en la pantalla de diseo del formulario
Selecciona el campo +om&reAell
Coloca el cursor en su propiedad Al salir
Accede al procedimiento de evento correspondiente (botn [...])
Escribe el siguiente procedimiento:
%ri!ate .u& +om&reAellV"xit12ancel As 9nteger3
9f [+i!el] F U1U :,en
:elSfono#.etFocus
"nd 9f
"nd .u&
Observa:
"Al salir del campo +om&reAell (NombreApell_Exit)
"Si en el control +i!el hay un 1 (f [Nivel]=1)
"Entonces sitate en el campo :elSfono (Then Telfono.SetFocus)
Es decir, que en la prctica nos saltaremos los campos +9F y Direcci0n.
Sitate al final del mdulo del formulario y escribe:
%ri!ate .u& +9FV"xit12ancel As 9nteger3
9f [+i!el] F U2U :,en
:elSfono#.etFocus
"nd 9f
"nd .u&
Graba todos los cambios que hemos hecho.
- Slo falta probar lo que hemos "programado. Ejecuta el formulario e inventa unos cuantos
registros con "niveles de confianza distintos.
La conclusin que deberamos sacar de nuestro trabajo con la B# D# Access1, es que podemos
manipular "datos (hasta cierto punto, ya veremos en su momento, cuando estudiemos la
programacin DAO, la verdadera "manipulacin de los datos Access), de la misma forma que
hacamos con los controles independientes de un formulario: '+om&re del camo* siempre y
cuando lo escribamos entre corchetes.
VB Access 2000 Ferm Vil 69
%ara sa&er ms
"!ento
Es una accin del usuario o del sistema que afecta a un objeto (control) y provoca la
ejecucin del cdigo correspondiente.
BO:Z+1V2licY : al hacer click en el botn de nombre "BOTN1
FormVOen: al abrir el formulario
+9FV"xit: al salir del control NF
Ya veremos en el siguiente ejercicio otros eventos.
M0dulos 7 %rocedimientos
El m0dulo es la estructura del Access que nos permite introducir cdigo VBA. Hay de
dos tipos:
- M0dulos estndar)
Accedemos a ellos a travs de la pantalla inicial de la BD, o&8eto) M0dulos y click
en [Nuevo] o [Diseo]
En dichos mdulos escribimos los procedimientos "Sub y las funciones.
- M0dulos de formulario 7 informe:
Accedemos a ellos desde la pantalla de diseo del formulario o informe, haciendo
click en el icono Ver 20digo:
(Cinta de Opciones: Herramientas de diseo
de formulario)
O con un control seleccionado, haciendo click en el icono '(enerar* y
seleccionando la opcin '(enerador de 20digo*
En estos mdulos escribimos los 'rocedimientos de e!ento*, es decir
programas que se ejecutan segn el evento del control correspondiente.
En todos los casos un mdulo presenta dos partes bien diferenciadas:
%adr!
&b'e(!
)r!cedimie"(!s
* f"ci!"es
%!"(r!les +,e"(!s
MU0?5+ ES;=>0A< MU0?5+ 0E N+<M?5A<2+
VB Access 2000 Ferm Vil 70
]m&ito de un rocedimiento)
Un procedimiento puede ser:
- %ri!ate)
ndica que el procedimiento slo es accesible para los procedimientos restantes del mdulo
en el que se encuentra.
- %u&lic:
ndica que el procedimiento es accesible para todos los procedimientos de todos los
mdulos.
- Adems de "Private o "Public, un procedimiento puede ser .tatic:
ndica que todas las variables locales del procedimiento mantienen su valor entre llamadas.
Declaraci0n de Varia&les
Existen dos maneras de declarar variables: implcita y explcitamente
Declaraci0n 9ml=cita
Cuando VBA encuentra una variable que no ha sido declarada explcitamente, la declara de
manera implcita utilizando el tipo que corresponda al valor que le es asignado.
Declaraci0n "xl=cita
La variable se declara antes de ser utilizada.
Las declaraciones explcitas de variables pueden realizarse en la seccin de declaraciones de
los mdulos o en el cuerpo de un procedimiento o de una funcin.
La declaracin se lleva a cabo mediante una de las cuatro instrucciones siguientes, utilizando la
misma sintaxis:
- A nivel de procedimiento o funcin:
Dim Total As nteger
Static Cont As nteger
- A nivel de mdulo:
Private Nombre As String
Public FechaNacimiento As Date
Cada vez que se ejecuta la instruccin Dim, la variable se reinicializa (0 para numrico, vaco
para String). Si es necesario conservar el valor anterior, se debe utilizar .tatic en lugar de Dim.
Recuerda que podemos obligar a la declaracin explcita de variables utilizando la instruccin
Otion "xlicit, en la seccin de declaraciones de cada mdulo.
VB Access 2000 Ferm Vil 71
Autoe!aluaci0n 2
1) Haz un "programa que nos permita calcular el rea y la longitud de una circunferencia a
partir del radio, pero de forma !isual.
De la siguiente forma:
- Crea una base de datos de nombre "!al2A
- Crea en "Eval2A un formulario de nombre Formul1, con los siguientes controles y aspecto
aproximado:
- Crea en "Eval2A otro formulario de nombre Formul2, con los siguientes controles y
aspecto aproximado:
- Crea las siguientes ociones de inicio:
Mostrar Formulario: Formul1
Desacti!a el resto de ociones
2) Repite el %rog12 del captulo anterior pero de forma visual
El %rog12 nos peda un nmero y nos daba como resultado la tabla de multiplicar del nmero
introducido:
.u& %rog1213
Dim num As 9nteger6 i As 9nteger
Dim salida As .tring
salida F UU
num F 9nutBox1U:a&la del n$meroU3
For i F 1 :o I
salida F salida D num D U O U D i D U F U D num O i D !&2rEf
+ext
MsgBox salida
"nd .u&
VB Access 2000 Ferm Vil 72
Una solucin podra ser la siguiente:
Crea una base de datos de nombre "!al2B, con un formulario de nombre :a&la Multilicar:
Parece muy complicado de hacer, pero si procedes de la siguiente forma es muy fcil:
a) Haz el formulario:
b) Selecciona la primera multiplicacin, es decir los 3 cuadros de texto y las dos etiquetas (X, =)
a la derecha del primer cuadro de texto (Tabla del)
- Clic en el icono 2oiar
- Clic en el icono %egar, 8 veces.
VB Access 2000 Ferm Vil 73
+om&res de los controles)
El primer cuadro: num
Primera columna de controles:
a0
a1
a2
a3
a4
a5
a6
a7
a8
Segunda columna: b0, b1, b2, b3, b4, b5, b6, b7, b8
Tercera columna: c0, c1, c2, c3, c4, c5, c6, c7, c8.
- El cdigo es muy sencillo si utilizas 3 matrices: a10 :o K36 &10 :o K36 c10 :o K3
En la primera matriz asignas: 1, 2, 3, 4, 5, 6, 7, 8, 9.
En la segunda matriz asignas a cada elemento el nmero que tenemos en [num]
En la tercera matriz asignas el producto del elemento correspondiente de la primera
y segunda matriz.
Por ltimo asignas a nuestros campos del formulario, los valores de las matrices:
[a0] F a103 ) [a1] F a113 ) ####
- ntroduce las mismas opciones de inicio que en el ejercicio anterior.
3) Repite el %rog1@ del captulo anterior, pero de forma !isual.
Procede de la siguiente forma:
- Crea una base de datos de nombre "!al22 y crea un formulario de nombre "stad=stica,
aproximadamente igual al siguiente:
)rimera
c!lm"a
de
c!"(r!les
-e."da
c!lm"a
/ercera
%!lm"a
VB Access 2000 Ferm Vil 74
- Crea un mdulo de nombre M0dulo1, que contenga la funcin Media10, ya hecha en el
captulo 1 (autoevaluacin1)
- Crea las mismas opciones de 9nicio que los ejercicios anteriores
4) Haz un programa !isual que sirva para simplificar fracciones.
- Dada una fraccin xT7 el verdadero problema para poder simplificarla es camcular el
mximo comn divisor de x e y, ya que:
x T M2D1x673
/////////////////
7 T M2D1x673 nos dar la fraccin simplificada
- Deber crear una funcin que calcule el mximo comn divisor de dos nmeros (MCD)
La mejor forma de "programar el MCD de dos nmeros es utilizar el mStodo de "uclides.
Recordemos el mtodo de "Euclides con un ejemplo:
1) Dividimos el mayor entre el menor:
48 entre 36 resulta: Cociente =1 y Resto=12
2) Dividimos el divisor entre el resto:
36 entre 12 resulta: Cociente = 3 y Resto =0
3) Continuamos dividiendo de esta ltima forma: di!isor entre resto, hasta que la divisin
sea exacta.
4) El M2D es el ltimo resto distinto de cero (el divisor que nos da la divisin exacta. Es
decir, en nuestro ejemplo: M2D1CK6 ?G3 F 12
La "function correspondiente podra ser la siguiente:
Function M2D1a As 9nteger6 & As 9nteger3 As 9nteger
Dim resto As 9nteger6 aux As 9nteger
9f a Q & :,en
aux F a
a F &
& F aux
"nd 9f
9f a Mod & F 0 :,en
resto F &
"nd 9f
Do ;,ile a Mod & QP 0
resto F a Mod &
a F &
& F resto
Eoo
M2D F resto
"nd Function
Observa:
- x Mod 7 es un operador de Visual Basic que nos da el resto de la divisin entera entre x e
y
- Observa la forma de conseguir que la variable "a corresponda al nmero mayor:
9f a Q & :,en
VB Access 2000 Ferm Vil 75
aux F a
a F &
& F aux
"nd 9f
Utilizamos lo que se llama una variable auxiliar (aux)
- Crea una base de datos de nombre "!al2D, con un formulario de nombre .imlificaci0n,
con el siguiente aspecto y contenido:
- Crea en la B.D. Eval2D, un mdulo de nombre M0dulo1 que contenga la funcin M2D
anterior.
- Considera las opciones de 9nicio, que hemos hecho en los ejercicios anteriores.
El resto del programa deberas hacerlo t.
5) Crea una base de datos de nombre "!al2"
- Crea en "!al2" una tabla de nombre :a&la1 con la siguiente estructura:
Campo1 Autonumrico y Clave Principal
Campo2 Texto
Campo3 Numrico
Campo4 Texto
Campo5 Texto
Campo6 Texto
- Crea un autoformulario para la :a&la1 de nombre Formul1
- nserta en el Formul1, un cuadro de texto independiente con las siguientes caractersticas:
Etiqueta: ninguna
Propiedades: Nombre= Campo7
Activado: No
- Crea un procedimiento de evento "Al salir del Campo3, que funcione de la siguiente forma:
Si el nmero que escribimos en 2amo? es mayor que 1000:
En el Campo7 aparece "Demasiado Grande
VB Access 2000 Ferm Vil 76
En el Campo4 aparece "Mayor que 1000
El cursor queda situado en el Campo6 (es decir, saltamos el Campo5)
Si el nmero que escribimos en Campo3, no es mayor que 1000:
En el Campo7 aparece "Vale
En el Campo4 aparece "No es mayor que 1000
El cursor se sita en Campo5
- Crea otro procedimiento de evento para el Formul1 (Al cerrar el Formul1), que genere una
ventana con el mensaje: 'Atenci0n6 se !a a cerrar el formulario*.
VB Access 2000 Ferm Vil 121
?
Formularios 7 2ontroles
a) Crea una nueva base de datos Access en TuCarpeta de nombre 2O+:-OE"..
Crea en la B.D 2O+:-OE". un formulario en blanco, con el siguiente contenido:
- Borra la etiqueta del cuadro de texto.
b) Tenemos un formulario con un cuadro de texto y tres botones.
- Graba el formulario con el nombre controles1 y accede al "mdulo del formulario,
haciendo click en el icono 'Ver 20digo*)
- Acabamos de situarnos en el "ditor de Visual Basic, deberamos tener a la vista:
* La ventana de cdigo: 2O+:-OE". > FormVcontroles1 120digo3
O Ea !entana de roiedades. Si no la tienes a la vista debers hacer: Men Ver
Ventana Propiedades o pulsar la tecla [F4]
* La ventana "xlorador de ro7ectos. Si no la tienes a la vista debers hacer:
Men Ver Explorador de proyectos.
- Sitate en la Ventana de %roiedades y selecciona del
cuadro:
el formulario, es decir:
click en controles1 FormVcontroles1
Automticamente visualizars en dicha ventana las
propiedades del objeto seleccionado, en nuestro caso
del formulario controles1
VB Access 2000 Ferm Vil 122
c) Selecciona en la Ventana de %roiedades el control :extBox (cuadro de texto)
- Localiza la propiedad +ame, borra el texto que aparece por defecto y escribe en su
lugar txt2a8a
- Selecciona en la Ventana de %roiedades el control 2ommandButton,
correspondiente al primer botn que has colocado en el formulario.
Cambia las siguientes propiedades:
+ame) cmdAzul
2ation: AZUL
- Selecciona el segundo CommandButton y cambia las siguientes propiedades:
+ame) cmdRojo
2ation: ROJO
- Cambia las siguientes propiedades del ltimo botn:
+ame) cmdVerde
2ation: VERDE
d) Selecciona en la "Ventana de Propiedades el formulario: controles1
FormVcontroles1, y cambia las siguientes propiedades:
2ation) Colores
Di!iding Eines) False
+a!igationButtons) False
-ecord.electors) False
e) Vuelve al Microsoft Access, graba de nuevo el formulario (con el mismo nombre
controles1) y ejecuta el formulario. Si todo funciona correctamente aparecer:
f) Vuelve a la pantalla de diseo del formulario y al "Editor de Visual Basic.
- Disponemos de un formulario de nombre (Name) controles1 con las propiedades:
2ation) Colores (texto que aparece en la barra de ttulos del form)
Di!idingEines) False (no aparece la raya vertical ni horizontal que delimita el form)
+a!igationButtons) False (no aparecen los controles de navegacin por los registros)
-ecord.electors) False (no aparece el selector de registro)
Y los siguientes controles:
VB Access 2000 Ferm Vil 123
- Un :extBox (cuadro de texto) de Name: txt2a8a
- Tres 2ommandButtons (botones de comando) con:
* Name= cmdAzul Caption= AZUL
* Name= cmdRojo Caption= ROJO
* Name= cmdVerde Caption= VERDE
- Pretendemos conseguir lo siguiente:
* Al hacer click en [AZUL], es decir cmdARulV2licY13, queremos que el cuadro de
texto txt2a8a, tome el color AZUL, es decir: txt2a8a#BacY2olor F !&Blue
Observa: +om&re2ontrol#%roiedad F Valor
La propiedad responsable del color de un objeto es BacY2olor, !&Blue es una
constante ya definida en VBA que representa el color azul.
* Sitate en la ventana 2O+:-OE". > FormVcontroles1 120digo3 y selecciona
en el cuadro combinado de controles (Objetos) el cmdARul, automticamente nos
aparece:
%ri!ate .u& cmdARulV2licY13
"nd .u&
Es decir, el procedimiento de evento 2licY del CommandButton (aparece por defecto el
evento 2licY, porque es el ms usual en un botn).
* Escribe entre las lneas:
%ri!ate .u& cmdARulV2licY13
Y
"nd .u&
La siguiente lnea de cdigo: txt2a8a#BacY2olor F !&Blue
- Accede al procedimiento de evento 2licY del CommandButton cmd-o8o, es decir,
selecciona el objeto cmd-o8o y escribe:
%ri!ate .u& cmd-o8oV2licY13
txt2a8a#BacY2olor F !&-ed
"nd .u&
- Haz lo mismo para el cmdVerde, para conseguir el siguiente rocedimiento de
"!ento:
%ri!ate .u& cmdVerdeV2licY13
txt2a8a#BacY2olor F !&(reen
"nd .u&
.) Vuelve al 'Microsoft Access*, graba de nuevo el formulario (con el mismo nombre) y
ejectalo.
Espero que te funcione. Est claro que !&-ed y !&(reen son constantes de VB, que
representan los colores rojo y verde respectivamente.
VB Access 2000 Ferm Vil 124
h) Haz un nuevo formulario para la base de datos 2O+:-OE"., de nombre controles2
con el siguiente contenido:
- Vamos a cambiar una serie de propiedades, pero a diferencia del formulario anterior, se
trata de hacerlo desde la pantalla de diseo del formulario...
* Selecciona el formulario (click en el botn correspondiente)
* Click en el icono '5o8a de %roiedades*
* Cambia las siguientes propiedades:
Ttulo (Caption) = Contrasea Secreta
Selectores de Registro (RecordSelectors) = No
Botones de Desplazamiento (NavigationButtons) = No
Separadores de registro (DividingLines) = No
* Selecciona la .ecci0n) Detalle del formulario, accede a sus propiedades y
cambia el valor de:
Color del fondo (BackColor) = verde oscuro (32768 o #008000)
* Selecciona el cuadro de texto 1:extBox3 y cambia las propiedades:
Nombre (Name) = txtContrasea
Mscara de entrada (nputMask) = Accede al asistente, haciendo click
en [...] y selecciona 2ontraseBa
Cambia el contenido de su etiqueta por: "scri&e la 2ontraseBa
* Selecciona el botn de la izquierda (CommandButton) y cambia las propiedades:
Nombre (Name) = cmdAceptar
Ttulo (Caption) = &Aceptar
Observa que en el botn aparece Acetar. La utilidad de lo que acabamos de
hacer est, en que al ejecutar el formulario, en lugar de activar el botn
haciendo click con el ratn, bastar pulsar las teclas [ALT][A]
* Selecciona el botn de la derecha y cambia las propiedades:
Nombre (Name) = cmdCancelar
Ttulo (Caption) = &Cancelar
- Graba el formulario con el mismo nombre controles2
- Accede al mdulo del formulario controles2 y contrasta las propiedades en la "ventana
de propiedades, que tenemos en el Editor de Visual Basic, con las propiedades que
hemos cambiado desde la pantalla de diseo del formulario. Est claro que son las
mismas, pero en el "ditor de Visual Basic tenemos la versin en ingls.
Aunque no nos guste, es ms importante sta ltima, ya que en nuestros
procedimientos, si deseamos cambiar una propiedad, como suceda en controles1,
necesriamente hemos de utilizar la "versin inglesa de la propiedad correspondiente.
- Volvamos a "nuestro programa...
Resulta que la contrasea correcta es %"%9:O o eito
VB Access 2000 Ferm Vil 125
Accede al mdulo del formulario controles2 y escribe los siguientes procedimientos de
evento:
%ri!ate .u& cmdAcetarV2licY13
9f X2ase1[txt2ontraseBa]3 QP U%"%9:OU :,en
MsgBox U+o ,as acertadoU6 !&2ritical
cmd2ancelarV2licY
"lse
MsgBox UMu7 &ien6 es correctoU6 !&"xclamation
cmd2ancelarV2licY
"nd 9f
"nd .u&
%ri!ate .u& cmd2ancelarV2licY13
txt2ontraseBa F UU
txt2ontraseBa#.etFocus
"nd .u&
- Vuelve al 'Microsoft Access*. Graba de nuevo el formulario y ejectalo. Prubalo,
escribiendo %"%9:O, eito y cualquier otra cosa.
Veamos:
O Xcase es una funcin incorporada en el VB que convierte a maysculas el texto
que escribimos entre parntesis (en nuestro caso el contenido del cuadro de texto
txt2ontraseBa)
* Observa tambin que en el ejercicio anterior escribamos el cuadro de texto entre
corchetes, est claro que no son necesarios.
* Es conveniente que pruebes el uso de las teclas [ALT][A y [ALT][C]
i) Vamos a ver en este apartado un "evento que no habamos visto ...
- Crea en la base de datos 2O+:-OE". otro formulario (controles3), con un nico
cuadro de texto.
- Elimina la etiqueta del cuadro de texto, y escribe como propiedad +ame: txtColorines
- Graba el formulario con el nombre controles?
- Accede al mdulo del formulario controles? y
* Selecciona el O&8eto) Detalle y el "!ento) MouseMo!e
* Escribe el siguiente procedimiento de evento:
%ri!ate .u& DetalleVMouseMo!e1Button As 9nteger6 .,ift As V
9nteger6 4 As .ingle6 W As .ingle3
txt2olorines#BacY2olor F -(B1-nd O 2@G6 -nd O 2@G6 -nd O 2@G3
"nd .u&
- Vuelve al "Microsoft Access y ejecuta el formulario.
Si todo funciona correctamente, al mover el ratn por la seccin detalle del formulario
(Detalle_MouseMove), el color del cuadro de texto cambia aleatoriamente.
O -(B (argumento1, argumento2, argumento3) es una funcin incorporada en el
VBA, que nos da como resultado un color:
Argumento1: componente rojo (nmero del 0 al 255)
Argumento2: componente verde (nmero del 0 al 255)
VB Access 2000 Ferm Vil 126
Argumento3: componente azul (nmero del 0 al 255)
O -nd, es otra funcin incorporada en VBA, que devuelve un nmero aleatorio
entre 0 y 1
O -ndO2@G: devolver un nmero aleatorio entre 0 y 255
') Vamos a trabajar con otro e!ento, que no depende del usuario sino del sistema...
- Crea en la base de datos 2O+:-OE"., otro formulario con una etiqueta que contenga
la frase '5ola Aue tal* y un botn de comando.
Graba el formulario con el nombre controlesC
- Accede al mdulo del formulario anterior y cambia las siguientes propiedades:
O FormVcontrolesC
Caption= El Evento Timer
RecordSelectors= False
NavigationButtons= False
DividingLines= False
Timernterval= 1000
Con la propiedad :imer9nter!al del formulario a 1000, acabamos de crear un
cronmetro, de forma que cada 1000 milisegundos, es decir cada segundo, se ejcute el
e!ento :imer del formulario (que an no hemos programado)
O "tiAueta (Label)
Name= lblSaludo
O 2ommandButton
Name= cmdCambia
Caption= Otro Color
- Vamos a escribir los procedimientos de evento:
Al hacer click en el botn, nos interesa que cambie el color del formulario (en
realidad, de la Seccin Detalle del formulario).
Haz lo siguiente:
Selecciona en la ventana 2O+:-OE". > FormVcontrolesC 120digo3, el objeto
cmd2am&ia
Escribe:
%ri!ate .u& cmd2am&iaV2licY13
Detalle#BacY2olor F -(B1-nd O 2@G6 -nd O 2@G6 -nd O 2@G3
"nd .u&
* Nos gustara que la frase '5ola Aue tal* parpadee cada segundo: ya hemos
definido un cronmetro a 1 seg, nos falta "programar el evento correspondiente.
Haz lo siguiente:
Selecciona en la ventana de cdigo el o&8eto) Form y el e!ento) :imer
Escribe:
%ri!ate .u& FormV:imer13
l&l.aludo#Visi&le F +ot 1l&l.aludo#Visi&le3
"nd .u&
'Visi&le* es una propiedad comn a muchos controles y su funcionamiento es:
NombreControl.Visible = False (el control desaparece)
NombreControl.Visible = True (el control aparece)
VB Access 2000 Ferm Vil 127
'+ot* es una funcin incorporada en el VB, que funciona de la siguiente forma:
Not(True) = False
Not(False) = True
- Vuelve al "Microsoft Access. Graba de nuevo el form controlesC y ejectalo.
Espero que te guste.
- Habrs observado que al cambiar de color, aparecen dos barras, una horizontal y otra
vertical de color gris que no cambian de color; dichas barras corresponden a las "barras
de desplazamiento vertical y horizontal del formulario. Si no te gustan, cambia la
siguiente propiedad del form: .crollBars F 0
- Si quieres un "parpadeo diferente del mensaje '5ola Aue tal*, cambia el valor de la
propiedad :imer9nter!al a 100, por ejemplo.
0) Vamos a trabajar con otro e!ento, ahora de un :extBox
- Crea en la base de datos 2O+:-OE". otro formulario con dos cuadros de texto y un
botn
Coloca como etiqueta del primer cuadro de texto: '"scri&e un n$mero* y como
etiqueta del segundo: '"l factorial es)*
Graba el formulario con el nombre controles@
- Accede al mdulo del formulario anterior y cambia las siguientes propiedades:
O FormVcontroles@
DividingLines: False
NavigationButton: False
RecordSelectors: False
ScrollBars: 0
O :extBox1
Name: txtFactorial
O :extBox0
Name: txtNumero
EnterKeyBehavior: True
O 2ommandButton
Name: cmdSalir
Caption: Salir
- Vamos a escribir el cdigo.
Como habrs adivinado se trata de calcular el factorial de un nmero. Recordemos que el
factorial de un nmero, por ejemplo 5 es: 1*2*3*4*5 = 120, es decir es el producto del
nmero por los sucesivos nmeros anteriores hasta llegar a la unidad.
Por lo tanto, el cdigo para calcular el factorial podra ser:
factorial F1
For iF1 :o n$mero
Factorial F factorialOi
+ext
La variable "factorial nos dara lo que buscamos.
VB Access 2000 Ferm Vil 128
Vamos a utilizar una funci0n para calcular el factorial, es decir:
Desde el Editor de Visual Basic
Men nsertar Mdulo
Men nsertar Procedimiento
Nombre: Factorial
Funcin
Pblico
Escribe:
%u&lic Function Factorial1num As Eong3 As Eong
Dim i As Eong
Factorial F 1
For i F 1 :o num
Factorial F Factorial O i
+ext
"nd Function
Vamos a probar si funciona:
En la !entana 9nmediato, escribe:
?Factorial(5) [Return]
?Factorial(12) [Return]
Si escribes ?Factorial(13), aparece un mensaje de error, ya que el mximo nmero
Eong era 2.147.483.647 y Factorial(13)= 6.227.020.800 que es superior
Graba el mdulo estndar con el nombre Xtilidades
Como ya estamos situados en el "Editor de Visual Basic, accede al m0dulo
del formulario controles@, basta que hagas un doble click en
'FormVcontroles@* de la Ventana de %ro7ecto#
Bien, el problema que nos planteamos es el siguiente:
Al escribir un nmero (inferior a 13) en el TextBox txt+umero y pulsar [Return], nos
interesa que en el txtFactorial aparezca el factorial del nmero introducido.
Es decir: al pulsar [Return] (la tecla "Return tiene por cdigo Ascii el nmero 13), en el
txt+umero: Evento _e7%ress
Haz lo siguiente:
Selecciona el control) txt+umero (en la ventana de cdigo de controles@) y
el "!ento) _e7%ress
Escribe:
%ri!ate .u& txt+umeroV_e7%ress1_e7Ascii As 9nteger3
9f _e7Ascii F 1? :,en
txtFactorial F Factorial11txt+umero#:ext33
txtFactorial#.etFocus
"nd 9f
"nd .u&
Selecciona el control) cmd.alir y escribe:
%ri!ate .u& cmd.alirV2licY13
Do2md#2lose
"nd .u&
- Vuelve a [Microsoft Access], graba de nuevo el formulario y prubalo.
VB Access 2000 Ferm Vil 129
l) Vamos a investigar en este apartado, cmo funcionan las medidas en VB...
- Crea en la base de datos 2O+:-OE". otro formulario, con la seccin detalle de un
tamao aproximado de 10cm x 6cm:
- Nos interesa un tamao exacto de 10cm x 6cm. Haz lo siguiente:
83. Selecciona el formulario y accede a sus propiedades
841 En la propiedad Anc,o escribe 10cm
851 Selecciona la seccin Detalle y accede a sus propiedades. En la propiedad
Alto escribe Gcm
- Accede a las propiedades del formulario y cambia las cuatro propiedades famosas:
Barras de desplazamiento: Ninguna
Selectores de registro: No
Botones de desplazamiento: No
Separadores de registros: No
- Nos gustara trabajar con un ie de formulario. Haz lo siguiente:
Cinta de Opciones: Herramientas de diseo de formulario
Ficha: Organizar
Grupo: Mostrar u Ocultar
Encabezado o Pie de formulario
- Selecciona el '"nca&eRado del formulario*. Accede a sus propiedades y en la
propiedad Alto, escribe 0cm#
Es decir, acabamos de esconder el "encabezado
- Selecciona el "Pie del formulario, y en su propiedad 'Alto*, escribe 26@cm.
- Graba el formulario con el nombre controlesG
- Accede al m0dulo del formulario controlesG
- Selecciona en la ventana de propiedades: Detalle .ection, y localiza el valor de la
propiedad 5eig,t. Si todo funciona correctamente aparece 5eig,t) ?C02
Ms exactamente: el alto (height) de la "seccin Detalle es de ?#C02 t<is
:<is es la unidad de medida que utiliza el Visual Basic: 1cm = 567 twips
Tenamos: alto de detalle= 6cm, es decir 5eig,t de DetalleF Gx@G7 F ?C02 t<is
VB Access 2000 Ferm Vil 130
- Localiza el valor de la propiedad 5eig,t (alto) de %ieDelFormulario .ection, tenemos
Height = 1418 twips = 2,5cm x 567 = 1417,5
- Localiza el valor de la propiedad ;idt, del formulario (controles6 Form_controles6),
tenemos:
Width (ancho) = 5670 twips = 10cm x 567
En definitiva:
Ancho de nuestro formulario: Width F @G70 t<is = 10 cm
Alto de nuestro formulario: Height de Detalle = 3402 twips = 6cm
Height del Pie = 1418 twips = 2,5cm
---------------------------------------------------
Height = CK20 t<is
- Si quieres que al ejecutar el formulario, sus medidas correspondan a: Height = 4820
twips y Width = 5670 twips, debes acceder a las propiedades del FormVcontrolesG y
cambiar las propiedades:
9nside5eig,t F CK20
9nside;idt, F @G70
Siempre y cuando antes:
Botn del Office: Opciones de Access
Base de datos actual
Ventanas superpuestas
Desactiva: Mostrar fichas de documento
- Vuelve a la pantalla de diseo del formulario controlesG.
nserta cuatro botones de comando en el ie del formulario, no te preocupes de su
tamao ni de su posicin.
- Accede al mdulo del formulario controlesG y cambia las siguientes propiedades:
+ame 2ation 5eig,t ;idt,
2omando0 cmdArriba ^ 567 567
2omando1 cmdAbajo v 567 567
2omando2 cmdDerecha > 567 567
2omando? cmdzquierda < 567 567
- Vuelve a la pantalla de diseo del formulario y observa lo que acabamos de conseguir:
4 botones de exactamente 1cm x 1cm = 567 twips x 567 twips
Vamos a preocuparnos de su osici0n...
- La posicin de un control queda determinada por dos propiedades: ':o* y 'Eeft*
- Vuelve al mdulo del formulario controlesG y cambia las siguientes propiedades:
VB Access 2000 Ferm Vil 131
Eeft :o
cmd9RAuierda 3628 396
cmdDerec,a 4762 396
cmdArri&a 4195 113
cmdA&a8o 4195 680
- Vuelve a la pantalla de diseo y vers lo que hemos conseguido.
Desde la pantalla de diseo, haz click en el control 9magen:
y "dibuja un pequeo recuadro en la seccin detalla del
formulario
Automticamente aparece el cuadro '9nsertar imagen*, selecciona un
archivo grfico de tu ordenador.
- Accede a las propiedades del control anterior y cambia la propiedad: Modo de cam&iar
el tamaBoF coom
- Accede al mdulo del formulario controlesG. En la ventana de propiedades, selecciona
el control '9mage* y cambia las siguientes propiedades:
Name: imgA
Height: 1000
Left: 2335
Top: 1201
Width: 1000
- Vamos a escribir el c0digo de nuestro formulario (pretendemos "mover la imagen):
Escribe los siguientes procedimientos de evento:
%ri!ate .u& cmdA&a8oV2licY13
9f imgA#:o J ?@ Q 2C02 :,en
imgA#:o F imgA#:o J ?@
"nd 9f
"nd .u&
%ri!ate .u& cmdArri&aV2licY13
9f imgA#:o / ?@ P 0 :,en
imgA#:o F imgA#:o / ?@
"nd 9f
"nd .u&
%ri!ate .u& cmdDerec,aV2licY13
9f imgA#Eeft J ?@ Q CG70 :,en
imgA#Eeft F imgA#Eeft J ?@
"nd 9f
"nd .u&
%ri!ate .u& cmd9RAuierdaV2licY13
9f imgA#Eeft / ?@ P 0 :,en
imgA#Eeft F imgA#Eeft / ?@
"nd 9f
"nd .u&
%ri!ate .u& FormVXnload12ancel As 9nteger3
9f MsgBox1ULDeseas .alirNU6 !&O_2ancel6 U.alidaU3 F !&2ancel :,en
2ancel F :rue
"nd 9f
"nd .u&
VB Access 2000 Ferm Vil 132
- Vuelve al "Microsoft Access, graba de nuevo el formulario y prubalo.
Cuando ests cansado de "mover la imagen por el formulario, "cierra el formulario (click
en la X del extremo superior derecho del formulario).
m) Vamos a trabajar en este apartado con un nuevo control
- Crea en la base de datos 2O+:-OE"., otro formulario y coloca los siguientes
controles:
Para el control Eista, debes hacer click en el icono '2uadro de Eista*)
- Cambia la etiqueta del cuadro de texto superior por: 9ntroduce un +$mero
- Cambia la etiqueta de la Lista por: Eistado de +$meros
- Cambia la etiqueta del cuadro de texto inferior por: Ea M"D9A es)
- Graba el formulario con el nombre controles7
- Accede al mdulo del formulario
- Cambia las siguientes propiedades:
O FormVcontroles7
Caption: Cuadro de Lista
DividingLines: False
NavigationButton: False
RecordSelectors: False
ScrollBars: 0
O Bot0n de 2omando suerior
Name: cmdAadir
Caption: Aadir
O Bot0n de comando inferior
Name: cmdCalcular
Caption: Calcular
O :extBox) '9ntroduce un n$mero*
Name: txtNumero
O :extBox) Ea M"D9A es
Name: txtMedia
VB Access 2000 Ferm Vil 133
O 2uadro de Eista
Name: lstListado
RowSourceType: Value List
El cuadro de lista nos permite guardar o mostrar un listado de valores. Por defecto,
dicho listado de valores corresponde a un campo de una tabla o consulta, por esta razn
hemos cambiado la propiedad -o<.ource:7e, que era :a&leTMuer7 (tabla/Consulta) por
"lista de valores (Value List).
- La idea del programa que pretendemos hacer es:
* Escribir nmeros en el primer :extBox
* El botn [Aadir] nos permite introducir dichos nmeros en el cuadro de lista.
* En un momento determinado, si hacemos click en [Calcular] en el TextBox
txtMedia, aparece la media aritmtica de los nmeros que estamos viendo en el
EistBox
Vamos a ver si lo conseguimos:
Escribe los siguientes procedimientos de evento:
%ri!ate .u& cmdABadirV2licY13
9f lstEistado#-o<.ource F UU :,en
lstEistado#-o<.ource F txt+umero
"lse
lstEistado#-o<.ource F lstEistado#-o<.ource D UdU D txt+umero
"nd 9f
txt+umero F UU
txt+umero#.etFocus
"nd .u&
%ri!ate .u& cmd2alcularV2licY13
Dim n As 9nteger6 sum As 9nteger
Dim !al As 9nteger
sum F 0
For n F 0 :o lstEistado#Eist2ount / 1
lstEistado#.elected1n3 F :rue
!al F lstEistado#2olumn1Eist9ndex3
sum F sum J !al
+ext
txtMedia F sum T lstEistado#Eist2ount
"nd .u&
- Los dos procedimientos anteriores son muy sencillos, siempre y cuando tengamos en
cuenta:
O -o<.ource
Es la propiedad de un EistBox que "guarda los valores de la lista, separados
por un punto y coma, siempre y cuando la propiedad -o<.ource:7e sea
"Value List, como es nuestro caso.
O Eist2ount
Es otra propiedad de un ListBox, que no es ms que el nmero de valores que
contiene la lista.
O .elected1?3
Es otra propiedad de un EistBox, que indica si est seleccionado el elemento
cuarto de la lista (True) o no lo est (False)
VB Access 2000 Ferm Vil 134
O 2olumn1?3
Determina el valor del nmero cuatro de la lista.
O Eist9ndex
Devuelve el ndice del valor seleccionado en la "lista (n valores: indice 0, ndice
1, ndice 2, .... ndice n-1).
- Vuelve al "Microsoft Access, graba de nuevo el formulario controles7 y prubalo.
n) Vamos a trabajar con otro control que a diferencia del ListBox, nos permitir escribir
directamente nuevos valores en el listado.
- Crea en la base de datos 2O+:-OE". otro formulario y coloca los siguientes
controles:
* Para colocar el "cuadro combinado debes hacer clic en el icono '2uadro
2om&inado*)
* Elimina la etiqueta del cuadro combinado
* En la etiqueta del CommandButton superior, escribe ABadir
* En la etiqueta del segundo botn, escribe: "scri&e
* Elimina las etiquetas de los dos TextBoxs
* En el ltimo botn escribe: ABadir al 2om&oBox
- Graba el formulario con el nombre controlesK
- Accede al m0dulo del formulario y cambia las siguientes propiedades:
O FormVcontrolesK
Caption: Cuadro Combinado
DividingLines: False
NavigationButton: False
RecordSelectors: False
ScrollBars: 0
O 2om&oBox
Name: cboCuadro
RowSourceType: Value List
RowSource: Lunes ; Martes ; Miercoles
VB Access 2000 Ferm Vil 135
O %rimer 2ommandButton
Name: cmdAadir
O .egundo 2ommandButton
Name: cmdEscribe
O :ercer 2ommandButton
Name: cmdAadirAlCombo
O %rimer :extBox
Name: txtValorDelCombo
O .egundo :extBox
Name: txtValorAlCombo
Observa las dos propiedades del 2uadro 2om&inado, que son comunes con el ListBox:
-o<.ource:7e= Value List
Que por defecto tiene el valor: Tabla/Consulta
-o<.ource= Lunes ; Martes ; Miercoles
Que son los valores que aparecern en el 2om&oBox, observa que hemos de separar los
valores utilizando un punto y coma.
- Escribe los siguientes rocedimientos de e!ento)
%ri!ate .u& cmdABadirV2licY13
c&o2uadro#-o<.ource F c&o2uadro#-o<.ource D 'd* D V
c&o2uadro#Value
"nd .u&
Es decir, el valor que hay escrito en el 2om&oBox se aadir al listado de valores del
Cuadro Combinado.
%ri!ate .u& cmd"scri&eV2licY13
txtValorDel2om&o F c&o2uadro#Value
"nd .u&
Es decir, en el TextBox aparecer el valor que hay escrito en el ComboBox
%ri!ate .u& cmdABadirAl2om&oV2licY13
c&o2uadro#-o<.ource F c&o2uadro#-o<.ource D 'd* D V
txtValorAl2om&o
"nd .u&
Es decir, el valor escrito en el TextBox se aadir al listado del Cuadro Combinado.
- Vuelve al "Microsoft Access, graba de nuevo el formulario y prubalo.
") Hasta ahora hemos trabajado con los m0dulos asociados a formularios, vamos a ver
como funcionan los m0dulos asociados a informes.
VB Access 2000 Ferm Vil 136
- Crea en la base de datos 2O+:-OE". un informe en Vista DiseBo
Es decir: Cinta de Opciones: Crear
nforme en blanco
Sitate en Vista Diseo
- Elimina el encabezado y pie de pgina (Herramientas de diseo de informe: Organizar)
- Vamos a definir un rea del informe de 10cm x 10cm = 5670 twips x 5670 twips:
1241Accede a las propiedades del nforme y cambia la propiedad Anc,o) 10cm
1251Selecciona la seccin Detalle y accediendo a sus propiedades, cambia la
propiedad Alto) 10cm
- Graba el informe con el nombre 9nforme1
- Accede al m0dulo del informe (como siempre: click en el icono 'Ver 20digo*)
- En la ventana 2O+:-OE". > -eortV9nforme1 120digo3, selecciona el objeto
Detalle y el evento %rint
Escribe el siguiente procedimiento de evento:
%ri!ate .u& DetalleV%rint12ancel As 9nteger6 %rint2ount As 9nteger3
Dra<;idt, F ?0
Eine 11006 1003/1@@006 @@0036 MB2olor1236 B
Fill.t7le F 0
Fill2olor F MB2olor1-nd O 1@3
2ircle 12K006 2K0036 27006 MB2olor1C3
"nd .u&
- Vuelve al "Microsoft Access, graba de nuevo el informe y accede a la 'Vista %reliminar* del
nforme1
Si todo funciona correctamente aparecer:
- Bien, vamos a ver lo que hemos hecho:
O 2ircle y Eine son mtodos de dibujo, que nos permiten "dibujar en un 9nforme
1-eort3, cuando se produce el evento %rint
VB Access 2000 Ferm Vil 137
O Dra<;idt, = 30
Establece el ancho de lnea a 30 twips.
O MB2olor(argumento)
Es una funcin incorporada al Visual Basic, que determina un color. Argumento
= de 0 a 15
Por ejemplo: QBColor(0): negro
QBColor(2): verde
QBColor(6): amarillo
O Eine 110061003 > 1@@006@@0036 MB2olor1236 B
Dibuja un rectngulo de color verde, cuyos vrtices opuestos tienen por
coordenadas (100,100) y (5500,5500)
O Fill.t7leF 0
A partir de este momento los elementos grficos tendrn un relleno no
transparente
O Fill2olor F MB2olor1-ndO1@3
A partir de este momento los elementos grficos tendrn por relleno un color
aleatorio (Rnd).
O 2ircle 12K0062K0036 27006 MB2olor1C3
Dibuja un crculo de centro (2800,2800) y radio 2700 twips y color rojo
(QBColor(4)).
Seria conveniente que consultaras la ayuda de Visual Basic, sobre los mStodos de
di&u8o y sus propiedades, ya que hay infinidad de posibilidades que no tocaremos en este
manual.
- Crea un nue!o informe en vista diseo, cuya seccin detalle tenga las medidas: 10cm
x 10cm. Grbalo con el nombre 9nforme2
* Accede a su mdulo y escribe el siguiente procedimiento de evento:
%ri!ate .u& DetalleV%rint12ancel As 9nteger6 %rint2ount As 9nteger3
Dim n As 9nteger
Dra<;idt, F 10
For n F 100 :o 2700 .te 100
Eine 1n6 n3/1@G00 / n6 @G00 / n36 MB2olor1-nd O 1@36 B
+ext
"nd .u&
* Vuelve a la pantalla de diseo del nforme2, grba de nuevo el informe y ejectalo
(Vista Preliminar).
Si todo funciona correctamente tendremos:
VB Access 2000 Ferm Vil 138
- Haz un nuevo informe de nombre 9nforme? de medidas 10cm x 10cm con el siguiente
procedimiento de evento:
%ri!ate .u& DetalleV%rint12ancel As 9nteger6 %rint2ount As 9nteger3
Dra<;idt, F 10
Dim n As 9nteger
For n F 100 :o 2700 .te 100
2ircle 12K006 2K0036 n6 MB2olor1-nd O 1@3
+ext
"nd .u&
Si todo funciona correctamente tendremos:
o) Vamos a trabajar con otro tipo de control que es muy importante para trabajar con
fechas ...
- Crea en la base de datos 2O+:-OE"., un nuevo formulario en blanco de nombre
controles10.
* Haz clic en el icono 9nsertar control Acti!e4 del cuadro de Controles
* Selecciona la opcin '2ontrol de 2alendario 12#0*
Observa que por defecto, la fecha del calendario corresponde a la fecha actual
del sistema.
* Accede a las propiedades del calendario y en la propiedad +om&re escribe:
2alendar
- nserta en el formulario controles10 un botn de comando, relativamente grande con
las roiedades:
Nombre: cmd"sta&leceFec,a
Ttulo) 5aR clic en una fec,a del calendario 7 clic aAu= ara esta&lecer la
fec,a 9+929AE
- nserta en el formulario controles10, dos cuadros de texto con las caractersticas:
Nombre: txt9nicial
Etiqueta: Fec,a 9nicial
Nombre: txtFinal
Etiqueta: Fec,a Final
- Accede al mdulo del formulario controles10 y escribe el siguiente procedimiento de
evento:
VB Access 2000 Ferm Vil 139
%ri!ate .u& cmd"sta&leceFec,aV2licY13
Dim mensa8e As .tring
Dim titulo1 As .tring6 titulo2 As .tring
mensa8e F UF"25A. 9+2O--"2:A. )U V
D UEa fec,a inicial de&e ser U V
D Uanterior a la finalU
titulo1 F U5aR clic en una fec,a del calendarioU V
D U 7 clic aAu= ara esta&lecer la fec,aU V
D U 9+929AEU
titulo2 F U5aR clic en una fec,a del calendarioU V
D U 7 clic aAu= ara esta&lecer la fec,aU V
D U F9+AEU
9f cmd"sta&leceFec,a#2ation F titulo1 :,en
cmd"sta&leceFec,a#2ation F titulo2
txt9nicial F 2alendar#Value
cmd"sta&leceFec,a#Fore2olor F 2@@
"lse
txtFinal F 2alendar#Value
cmd"sta&leceFec,a#2ation F titulo1
cmd"sta&leceFec,a#Fore2olor F 0
9f [txt9nicial] P [txtFinal] :,en
MsgBox mensa8e
Do2md#2ancel"!ent
"nd 9f
"nd 9f
"nd .u&
- Ejecuta el formulario controles10 y prueba nuestro programa: est claro que a partir de
ahora no ser necesario introducir fechas "a mano verdad?.
p) Utilizando el control "Calendar vamos a "programar nuestros calendarios ...
- En la base de datos CONTROLES, crea un nuevo formulario en blanco de nombre
controles11, con las siguientes propiedades:
* Selectores de registro = No
* Botones de desplazamiento = No
* Separadores de registro = No
- Selecciona la seccin 'Detalle* de controles11, accede a sus "Propiedades:
* Sita el cursor de escritura en la propiedad 2olor del fondo
* Clic en el icono [...], a la derecha de la propiedad.
* Selecciona el color blanco y [Aceptar]
- Para hacer aparecer el "encabezado del formulario, haz:
Cinta de Opciones: Herramientas de diseo de formulario
Ficha: Organizar
Encabezado o pie de formulario
- Haz el "encabezado ms pequeo e inserta en el encabezado un cuadro de texto con
las siguientes caractersticas:
* Elimina su etiqueta
* Nombre: txt"nca&
* Activado: +o
VB Access 2000 Ferm Vil 140
- nserta en la seccin "Detalle de controles11 un "Control de Calendario 12.0 con las
siguientes propiedades:
* Nombre: 2al1
* Ancho: C6KICcm
Alto: C6?G@cm
* Day: 0
* ShowDateSelectors: No
- Copia el control anterior dos veces y colcalos a la derecha del primero:
- Establece como propiedad +om&re del segundo calendario: 2al2 y 2al? el tercero.
- Selecciona los tres "calendar y cpialos 4 veces para tener los 12 meses de un ao.
- Sitate en 'Vista reliminar*
Bot0n del Office
9mrimir
Vista %reliminar
Para "ver el calendario de todo un ao en una hoja DN A4. Si lo consideras conveniente
cambia el tamao o la situacin de los meses, para que quede el calendario ms esttico
en la hoja DN A4.
- Cambia el nombre de los nueve meses: 2alC6 2al@6 ###6 2al12.
- Recuerda que has de grabar los cambios hechos en controles11.
Vamos a "programar nuestro calendario ...
- Crea en la B. D. CONTROLES un nuevo formulario en blanco de nombre controles12.
- nserta los
siguientes
controles:
VB Access 2000 Ferm Vil 141
* El primer control: cuadro de lista con las opciones ABo normal y 2urso escolar,
tiene por nombre lst:io
* El cuadro de texto 'ABo* tiene por nombre txtAn
* El botn de comando [Calcular], tiene por nombre cmd2alcular
Supongo que habrs adivinado lo que pretendemos conseguir:
- En el formulario controles12, escogemos el tipo de calendario y el ao.
- Al hacer clic en [Calcular] se abre el formulario controles11 con el calendario
correspondiente.
Vamos a ver si lo conseguimos:
- Sitate en el mdulo del formulario controles12 y escribe el siguiente programa:
%ri!ate .u& cmd2alcularV2licY13
Dim oc As .tring6 an As 9nteger
oc F lst:io#Value
an F [txtAn]
Do2md#OenForm Ucontroles11U
9f oc F UABo normalU :,en
Forms\controles11#txt"nca& F an
Forms\controles11#cal1#Mont, F 1
Forms\controles11#cal1#Wear F an
Forms\controles11#cal1#Da7 F False
Forms\controles11#cal2#Mont, F 2
Forms\controles11#cal2#Wear F an
Forms\controles11#cal2#Da7 F False
Forms\controles11#cal?#Mont, F ?
Forms\controles11#cal?#Wear F an
Forms\controles11#cal?#Da7 F False
Forms\controles11#calC#Mont, F C
Forms\controles11#calC#Wear F an
Forms\controles11#calC#Da7 F False
Forms\controles11#cal@#Mont, F @
Forms\controles11#cal@#Wear F an
Forms\controles11#cal@#Da7 F False
Forms\controles11#calG#Mont, F G
Forms\controles11#calG#Wear F an
Forms\controles11#calG#Da7 F False
Forms\controles11#cal7#Mont, F 7
Forms\controles11#cal7#Wear F an
Forms\controles11#cal7#Da7 F False
Forms\controles11#calK#Mont, F K
Forms\controles11#calK#Wear F an
Forms\controles11#calK#Da7 F False
Forms\controles11#calI#Mont, F I
Forms\controles11#calI#Wear F an
Forms\controles11#calI#Da7 F False
Forms\controles11#cal10#Mont, F 10
Forms\controles11#cal10#Wear F an
Forms\controles11#cal10#Da7 F False
Forms\controles11#cal11#Mont, F 11
Forms\controles11#cal11#Wear F an
Forms\controles11#cal11#Da7 F False
VB Access 2000 Ferm Vil 142
Forms\controles11#cal12#Mont, F 12
Forms\controles11#cal12#Wear F an
Forms\controles11#cal12#Da7 F False
"lse
Forms\controles11#txt"nca& F an D UTU D 1an J 13
Forms\controles11#cal1#Mont, F I
Forms\controles11#cal1#Wear F an
Forms\controles11#cal1#Da7 F False
Forms\controles11#cal2#Mont, F 10
Forms\controles11#cal2#Wear F an
Forms\controles11#cal2#Da7 F False
Forms\controles11#cal?#Mont, F 11
Forms\controles11#cal?#Wear F an
Forms\controles11#cal?#Da7 F False
Forms\controles11#calC#Mont, F 12
Forms\controles11#calC#Wear F an
Forms\controles11#calC#Da7 F False
Forms\controles11#cal@#Mont, F 1
Forms\controles11#cal@#Wear F an J 1
Forms\controles11#cal@#Da7 F False
Forms\controles11#calG#Mont, F 2
Forms\controles11#calG#Wear F an J 1
Forms\controles11#calG#Da7 F False
Forms\controles11#cal7#Mont, F ?
Forms\controles11#cal7#Wear F an J 1
Forms\controles11#cal7#Da7 F False
Forms\controles11#calK#Mont, F C
Forms\controles11#calK#Wear F an J 1
Forms\controles11#calK#Da7 F False
Forms\controles11#calI#Mont, F @
Forms\controles11#calI#Wear F an J 1
Forms\controles11#calI#Da7 F False
Forms\controles11#cal10#Mont, F G
Forms\controles11#cal10#Wear F an J 1
Forms\controles11#cal10#Da7 F False
Forms\controles11#cal11#Mont, F 7
Forms\controles11#cal11#Wear F an J 1
Forms\controles11#cal11#Da7 F False
Forms\controles11#cal12#Mont, F K
Forms\controles11#cal12#Wear F an J 1
Forms\controles11#cal12#Da7 F False
"nd 9f
"nd .u&
- Graba los cambios hechos en controles12 y slo queda "jugar a hacer calendarios.
Espero que te funcionen.
VB Access 2000 Ferm Vil 143
%ara .a&er ms
+otaci0n 5$ngara
Habrs notado que hemos "nombrado los diferentes controles de una forma un tanto especial.
Dentro del mundo de la programacin en Visual Basic, existe una notacin ampliamente usada
que consiste en nombrar un control con tres letras, abreviatura del control en ingls, y a
continuacin una palabra que indica de alguna forma lo que hace el control.
Ejemplo:
cmd.alir , ser el nombre de un CommandButton (cmd) que tiene alguna relacin con
"salir.
A continuacin tienes las abreviaturas de los controles ms usuales:
cmd CommandButton
txt TextBox
lbl Label
lst ListBox
cbo ComboBox
img mage
"l lengua8e de rogramaci0n 'Visual Basic*
Se dice que el Visual Basic es un lenguaje de programacin orientado a los o&8etos y
conducido por e!entos.
Concretemos ms:
Todos los controles, formularios, informes, etc son o&8etos. Un objeto consta de propiedades,
mtodos y eventos:
- %roiedades) caractersticas del objeto
Ejemplo:
txt2a8a#BacY2olor F !&Blue
"BackColor es una propiedad del TextBox txt2a8a, que le asignamos el color azul.
- MStodos: lo que puede hacerse en el objeto. No son ms que procedimientos ya
escritos y asociados a los objetos.
Ejemplo:
txt+umero#.etFocus
El "foco se sita en el objeto txtNumero
- "!entos) situaciones que se producen por accin del usuario o del sistema
Ejemplo:
cmd.alirV2licY
Al hacer click en el botn "cmdSalir
VB Access 2000 Ferm Vil 144
Autoe!aluaci0n ?
1) Haz un programa que sirva para repasar las tablas de multiplicar:
- Crea una base de datos de nombre "!al?A con un formulario de nombre Multilicar,
con el siguiente contenido y aspecto:
- Nombres:
txt+um txt%en
txtXno txtDos txt-esul
txtBien txt2orrec
txtMal
txt2orrec
txt+ota
cmdOtra
Adems hay otro botn con la propiedad Visi&le F False, de nombre cmd.alir
- Crea un mdulo de nombre M0dulo1, que contenga una funcin que nos d la nota
final.
- El problema que nos planteamos creo que est claro:
* Al abrir el formulario, escribimos en txt+um el nmero de multiplicaciones que
queremos hacer.
* En el txt%en aparece en cada momento el nmero de multiplicaciones que
tenemos pendientes.
* En los cuadros txtXno y txtDos aparecen dos nmeros aleatorios entre 1 y 9
* En el cuadro txt-esul escribimos el resultado de la multiplicacin, que aparece
en txtXno y txtDos.
* Si la respuesta es correcta, aparece en el cuadro txt2orrec la frase "Muy Bien
* Si la respuesta es incorrecta, aparece en el cuadro txt2orrec la contestacin
correcta.
* Los cuadros txtBien y txtMal, cuentan el nmero de respuestas correctas e
incorrectas respectivamente.
* El botn cmdOtra sirve para una nueva multiplicacin.
VB Access 2000 Ferm Vil 145
* Al acabarse todas las multiplicaciones: en el cuadro txt+ota, aparece la nota
cualitativa (Excelente, Notable, Bien, etc). El botn [Otra] se hace invisible y
aparece el botn [Salir]
2) Haz un programa que nos permita jugar a los dados:
- Crea una base de datos de nombre "!al?B, con un formulario de nombre Dados con el
siguiente contenido y aspecto:
- Nombres:
txt1 txt2 txt? txtC txt@
&1 &2 &? &C &@
l&l9ns
cmd:irada cmd"meRar cmd.alir
- Crea un mdulo de nombre M0dulo1, que contenga una funcin de nombre Dado, que
sirva para asignar a cada nmero (del 1 al 6) cada una de las caras del dado (0, K, Q,
J, 9, 10).
- El programa debera hacer lo siguiente:
* Al abrir el formulario Dados, se inicializan los controles txt1, txt2, ..., txt5 a "vaco,
el botn [Tirada] desaparece y el mensaje l&l9ns tambin.
* Al hacer clic en [Empezar partida]: aparecen en txt1, txt2, ..., txt5 los valores
"aleatorios de los dados, el botn [Tirada] y el mensaje l&l9ns se hacen visibles.
* Al hacer lo que nos dice el mensaje (clic en b1, b2, b3, ..., b5), desaparecen los
dados correspondientes.
* Al hacer clic en [Tirada], los dados que haban desaparecido se hacen visibles
con otros valores "aleatorios.
VB Access 2000 Ferm Vil 146
3) Haz un programa que nos permita rellenar una tabla Access con los campos: +om&re6
Fec,a+acimiento6 "dad utilizando un formulario donde nicamente hemos de escribir el
nom&re y seleccionar la fecha de nacimiento en un control 2alendar:
- Crea una base de datos de nombre "!al?2, con una tabla de nombre :a&la1 de
estructura:
Nombre Texto y Clave Principal
FechaNacimiento Fecha/Hora
Edad Numrico
- Crea un autoformulario para la tabla anterior y grbalo con el nombre Formulario1
- nserta un control 2alendar y un &ot0n de comando en el formulario1:
Control Calendar: Nombre= 2al
ndice de tabulacin= 1
Botn de comando: Nombre= cmd2orrecto
ndice de tabulacin= 2
- El programa ha de funcionar de la siguiente forma:
* Escribimos el "Nombre
* Seleccionamos en el calendario la fecha de nacimiento.
* Al hacer clic en [Correcto], se rellenan automticamente los campos
Fec,a+acimiento y "dad.
VB Access 2000 Ferm Vil 147
C
O&8etos de Acceso a Datos 1DAO3
Despus de la introduccin al Visual Basic que hemos visto en los ejercicios anteriores, vamos
a aplicar los conocimientos adquiridos de VB en nuestras bases de datos, que de hecho es lo
que nos interesa.
Para trabajar con DAO, es conveniente trabajar con versiones anteriores al Access 2007, de
esta forma conservamos la compatibilidad de "referencias.
Vamos a crear un programa que nos permita controlar las llamadas telefnicas .
* Crea una nueva base de datos de nombre EEAMADA. en TuCarpeta, en formato
Access 2002T200? (la extensin ser MDB), cuando grabes la base de datos en :io
debera aparecer: Base de datos de Microsoft Office Access 1formato 2002/200?3
* En la B.D. LLAMADAS crea una tabla de nombre Datos con la siguiente estructura:
2amos :io
d Autonumrico
DiaHora Fecha/Hora
Empleado Texto
Elquellama Texto
Presente S/No
Notas Memo
Clave principal: 9d
- Vamos a crear en la B.D. LLAMADAS un formulario que "recoja los datos de una llamada
telefnica.
Crea un formulario en blanco con los siguientes controles:
* Un ttulo bonito (control Etiqueta) de contenido: Elamadas :elef0nicas
* Un "Cuadro de Texto sin etiqueta. Supondr que su propiedad +om&re es :exto1
* Un "Cuadro de Lista con las siguientes propiedades:
Nombre: Lista3
Tipo de origen: Lista de Valores
Origen de la fila: "Gerente;Secretaria Administracin
;Contable;Secretaria Direccin ; Jefe de Ventas
Etiqueta: Llamada para:
* Un "Cuadro de texto de nombre :exto@ y etiqueta: 'de arte*
* Un "Grupo de Opciones de nombre Marco7 y etiqueta: '"st*, que contenga dos
"botones de opcin:
Nombre: Oci0nI Etiqueta: .=
Nombre: Oci0n11 Etiqueta: +o
* Un "Cuadro de Texto de nombre :exto1? y etiqueta: +otas
* Un "Botn de Comando de nombre 2omando1@ y etiqueta:.iguiente Elamada
VB Access 2000 Ferm Vil 148
* Graba el formulario con el nombre %ortada
- Pasemos al "ditor de Visual Basic (mdulo del formulario), es decir click en el icono
'Ver 20digo*.
Cambia las siguientes roiedades:
Form
Caption: Control de Llamadas Telefnicas
DividingLines: False
NavigationButtons: False
RecordSelectors: False
:ext&ox) :exto1
Enabled: False
Vamos a introducir el c0digo, escribe:
%ri!ate .u& FormVEoad13
[:exto1] F +o<
"nd .u&
%ri!ate .u& 2omando1@V2licY13
Dim d&f As Data&ase6 registros As -ecordset
.et d&f F 2urrentD&
.et registros F d&f#Oen-ecordset1UDatosU6 d&OenD7naset3
registros#Add+e<
registros1UDia5oraU3 F Forms\[%ortada]\:exto1
registros1U"mleadoU3 F Forms\[%ortada]\Eista?
registros1U"lAuellamaU3 F Forms\[%ortada]\:exto@
9f Forms\[%ortada]\Marco7 F 1 :,en
registros1U%resenteU3 F 1
"lse
registros1U%resenteU3 F 0
"nd 9f
registros1U+otasU3 F Forms\[%ortada]\[:exto1?]
registros#Xdate
"nd .u&
Para que funcione el programa anterior (primer programa DAO que hacemos. DAO= Objetos
de Acceso a Datos), debes hacer lo siguiente:
* Desde la pantalla del editor de Visual Basic.
* Men Herramientas
Referencias.
* Debes tener activas las siguientes referencias:
Microsoft Access 12.0 Object Library
Microsoft DAO 3.6 Object Library
OLE Automation
Visual Basic For Applications
Microsoft Visual Basic for Applications Extensibility 5.3
Probablemente debers activar la "Microsoft DAO 3.6 Object Library, en este caso ...
VB Access 2000 Ferm Vil 149
* Utilizando las flechas de '%rioridad*, debes colocar la referencia "Microsoft DAO 3.6
Object Library por debajo de "Microsoft Access 12.0 Object Library.
* Por ltimo haz clic en [Aceptar] de la ventana '-eferencias/EEAMADA.*
Antes de estudiar lo que acabamos de hacer, vamos a ver si funciona:
- Ejecuta el formulario '%ortada*
La tabla "Datos es conveniente que est cerrada
* Si todo funciona correctamente, aparece en el primer campo el da y hora "actuales.
* Selecciona en el segundo campo (cuadro de lista), el valor "Contable.
* "de parte de:: %eito Valdemoro
* "Est:: .=
* "Notas: inventa lo que quieras.
* Clic en [Siguiente Llamada]
* "Cierra el formulario y accede al contenido de la tabla Datos
Espero que te haya funcionado: aparece un primer registro que contiene los datos de la
"llamada que nos acaban de hacer.
- nvestiguemos el nuevo programa DAO: accede al mdulo del formulario, y observa el
procedimiento 2omando1@V2licY13
O Dim d&f As Data&ase6 registros As -ecordset
Declaramos una variable de nombre d&f y tipo &ase de datos (DataBase). Declaramos
otra variable de nombre registros y tipo gruo de registros (RecordSet)
O .et d&fF 2urrentD&
Asignamos a la variable d&f la base de datos activa (CurrentDb), en nuestro caso la B.D.
LLAMADAS
O .et registrosFd&f#Oen-ecordset1'Datos*6d&OenD7naset3
Asignamos a la variable registros, los registros de la tabla Datos
O registros#Add+e<
Aadimos un nuevo registro en blanco (en la tabla Datos).
O registros1'Dia5ora*3FForms\[%ortada]\:exto1
En el campo 'Dia5ora* de la tabla 'Datos* del registro nuevo, que se acaba de crear, se
coloca lo que tenemos en el :exto1 del formulario %ortada
* Lo mismo para el resto de los campos. En el caso concreto del campo '%resente*,
hemos de asignar el valor 1 (S) o 0 (No) segn el botn de opcin del Marco7 que hay
activado.
O registros#Xdate
"Actualizamos el registro, es decir gra&amos el registro de la tabla 'Datos*.
VB Access 2000 Ferm Vil 150
Observa de qu forma tan sencilla enlazamos los datos "independientes de un formulario con
una tabla Access.
- Vamos a mejorar el programa:
* nserta en el formulario %ortada, dos nuevos cuadros de texto con las siguientes
caractersticas:
* Cuadro de texto:
Etiqueta: :otal de llamadas
Nombre: x
Activado: +o
* Cuadro de texto:
Etiqueta: +$mero de llamada
Nombre: 7
Activado: +o
* Crea el siguiente procedimiento de evento (hazlo a partir del anterior %ri!ate .u&
FormVEoad3:
%ri!ate .u& FormVEoad13
[:exto1] F +o<
Dim d&f As Data&ase6 reg As -ecordset
.et d&f F 2urrentD&
.et reg F d&f#Oen-ecordset1UDatosU6 d&OenD7naset3
reg#Mo!eEast
[x] F reg#-ecord2ount
reg#2lose
d&f#2lose
[7] F [x] J 1
[Eista?] F UU
[:exto@] F UU
[Marco7] F UU
[:exto1?] F UU
Eista?#.etFocus
"nd .u&
Observa:
* Al abrir el formulario (Form_Load)
O reg#Mo!eEast
Nos situamos en el ltimo registro del "recordset
O reg#-ecord2ount
"Cuenta todos los registros del "recordset (en nuestro caso de "Datos). Es
conveniente que previamente nos situemos en el ltimo registro (MoveLast).
O reg#2lose6 d&f#2lose
Cerramos el recordset (Tabla: Datos) y la base de datos.
En definitiva: si todo funciona correctamente, al abrir el formulario %ortada en el cuadro "x
aparecer el nmero de registros de la tabla "Datos, es decir aparecer el n$mero de
llamadas y en el cuadro "y aparecer una unidad ms, es decir, el cuadro nos mostrar la
llamada "actual.
VB Access 2000 Ferm Vil 151
* No pruebes an el programa, ya que hemos de corregir el correspondiente a "grabar las
llamadas.
* En efecto, corrige el 2omando1@V2licY13:
%ri!ate .u& 2omando1@V2licY13
Dim d&f As Data&ase6 registros As -ecordset
.et d&f F 2urrentD&
.et registros F d&f#Oen-ecordset1UDatosU6 d&OenD7naset3
registros#Add+e<
registros1UDia5oraU3 F Forms\[%ortada]\:exto1
registros1U"mleadoU3 F Forms\[%ortada]\Eista?
registros1U"lAuellamaU3 F Forms\[%ortada]\:exto@
9f Forms\[%ortada]\Marco7 F 1 :,en
registros1U%resenteU3 F 1
"lse
registros1U%resenteU3 F 0
"nd 9f
registros1U+otasU3 F Forms\[%ortada]\[:exto1?]
registros#Xdate
registros#Mo!eEast
[x] F registros#-ecord2ount
registros#2lose
d&f#2lose
[7] F [x] J 1
[Eista?] F UU
[:exto@] F UU
[Marco7] F UU
[:exto1?] F UU
Eista?#.etFocus
"nd .u&
* Prueba nuestro programa, introduciendo unas cuantas llamadas.
Espero que te funcione.
* Otra mejora que podramos introducir:
Corrige:
%ri!ate .u& 2omando1@V2licY13
9f MsgBox1UMuieres gra&ar esta llamadaNU6 !&Wes+o3 F !&+o :,en
[Eista?] F UU
[:exto@] F UU
[Marco7] F UU
[:exto1?] F UU
Eista?#.etFocus
"xit .u&
"nd 9f

Dim d&f As Data&ase6 registros As -ecordset
.et d&f F 2urrentD&
.et registros F d&f#Oen-ecordset1UDatosU6 d&OenD7naset3
registros#Add+e<
registros1UDia5oraU3 F Forms\[%ortada]\:exto1
registros1U"mleadoU3 F Forms\[%ortada]\Eista?
registros1U"lAuellamaU3 F Forms\[%ortada]\:exto@
9f Forms\[%ortada]\Marco7 F 1 :,en
registros1U%resenteU3 F 1
"lse
VB Access 2000 Ferm Vil 152
registros1U%resenteU3 F 0
"nd 9f
registros1U+otasU3 F Forms\[%ortada]\[:exto1?]
registros#Xdate
registros#Mo!eEast
[x] F registros#-ecord2ount
registros#2lose
d&f#2lose
[7] F [x] J 1
[Eista?] F UU
[:exto@] F UU
[Marco7] F UU
[:exto1?] F UU
Eista?#.etFocus
"nd .u&
* Ejecuta el programa para probarlo.
- Resulta que el campo correspondiente a "El que llama, lo hemos introducido, con las prisas,
en letras minsculas. Nos gustara hacer un programa DAO, que cambiara el contenido del
campo "El que llama a letras minsculas ...
* En la B.D. LLAMADAS, crea un formulario en blanco de nombre Mantenimiento, con las
siguientes propiedades:
Caption: Mantenimiento de Llamadas
DividingLines: False
NavigationButtons: False
RecordSelectors: False
* nserta en el formulario Mantenimiento un botn de comando con las siguientes
propiedades:
Name: cmdMayus
Caption: El que llama en Maysculas
* Escribe el siguiente procedimiento de evento:
%ri!ate .u& cmdMa7usV2licY13
Dim & As Data&ase
Dim r As -ecordset
.et & F 2urrentD&
.et r F &#Oen-ecordset1UDatosU6 d&Oen:a&le3
r#Mo!eFirst
Do Xntil r#"OF
r#"dit
r1U"lAuellamaU3 F X2ase1r1U"lAuellamaU33
r#Xdate
r#Mo!e+ext
Eoo
r#2lose
"nd .u&
* Antes de continuar, vamos a ver si funciona, es decir:
* Ejecuta el formulario "Mantenimiento
* Clic en [El que llama en Maysculas]
* Abre la tabla 'Datos* y comprueba que el contenido de la columna "Elquellama est en
letras maysculas.
VB Access 2000 Ferm Vil 153
Vamos a analizar el programa cmdMa7usV2licY, porque aparecen bastantes elementos
nuevos:
En primer lugar la esctructura bsica de un programa DAO:
Dim & As Data&ase
Dim r As -ecordset
.et &F2urrentD&
.et rF ###
###############################
###############################
r#2lose
Es decir:
Declaracin de una base de datos (b) y un grupo de registros (r).
Asignacin de la base de datos a la acti!a (CurrentDb)
Asignacin del grupo de registros (r)
Lneas del programa.
ltima sentencia: r#2lose, es decir, cerramos el "recodset.
Asignacin del recordset: .et rF&#Oen-ecordset1'Datos*6d&Oen:a&le3
Es decir, "r no es ms que los registros de la tabla "Datos.
En los programas DAO anteriores, en lugar de d&Oen:a&le, habamos utilizado el
argumento d&OenD7naset.
Para los programas que hemos hecho hasta ahora, es indiferente utilizar dbOpenTable o
dbOpenDynaset.
d&Oen:a&le se utiliza para tablas locales, encambio d&OenD7naset se utiliza para
tablas locales, o vinculadas o consultas o sentencia sAl.
O r#Mo!eFirst
Nos situamos en el primer registro del recordset (primer registro de la tabla "Datos)
O Do Xntil r#"OF
sentencia 1
sentencia 2
sentencia ?
r#Mo!e+ext
Eoo
La estructura anterior: recorrer cada uno de los registros del recordset, ejecutando en cada
registro las sentencias 1, 2 y 3
En nuestro caso, en cada registro:
1) r#"dit
Editar el registro correspondiente.
2) r1'"lAuellama*3FX2ase1r1'"lAuellama*33
Cambiar el contenido del campo "Elquellama, por el mismo contenido, pero en maysculas
(UCase).
3) r#Xdate
Actualizar los cambios hechos en el registro.
- Vamos a utilizar la estructura Do Xntil r#"OF / Eoo para visualizar el contenido de un
campo, desde "fuera ....
nserta en el formulario Mantenimiento otro botn de comando con las siguientes
propiedades:
VB Access 2000 Ferm Vil 154
Name: cmdVer
Caption: Ver los que han llamado.
* Escribe el siguiente cdigo:
%ri!ate .u& cmdVerV2licY13
Dim x As Data&ase
Dim 7 As -ecordset
.et x F 2urrentD&
.et 7 F x#Oen-ecordset1UDatosU3
7#Mo!eFirst
Do Xntil 7#"OF
MsgBox 71U"lAuellamaU3
7#Mo!e+ext
Eoo
7#2lose
"nd .u&
* Prueba el funcionamiento del programa, es decir: ejecuta el formulario "Mantenimiento y
clic en [Ver los que han llamado].
Observa que en el "OpenRecordset no especificamos el tio, sea d&Oen:a&le o
d&OenD7naset
Vamos a hacerlo ms elegante. Modifica el programa anterior de la siguiente forma:
%ri!ate .u& cmdVerV2licY13
Dim x As Data&ase
Dim 7 As -ecordset
Dim salida As .tring
.et x F 2urrentD&
.et 7 F x#Oen-ecordset1UDatosU3
7#Mo!eFirst
Do Xntil 7#"OF
salida F salida D 71U"lAuellamaU3 D !&2rEf
7#Mo!e+ext
Eoo
7#2lose
MsgBox salida
"nd .u&
* Prubalo.
- Vamos a continuar "manipulando datos ...
Nos gustara hacer un programa que hiciera lo siguiente:
1) Crear por DAO un nuevo campo de nombre +om&re"mleado para la tabla "Datos.
2) En el nuevo campo aparece el nombre del empleado correspondiente que resulta ser:
Gerente Paquito
Secretaria Administracin Felipa
Contable Pepito
Secretaria Direccin Herminia
Jefe de Ventas Ambrosio
Vamos a ver si lo conseguimos:
VB Access 2000 Ferm Vil 155
* nserta en el formulario Mantenimiento un botn de comando con las propiedades:
Name: cmdNombreEmpleado
Caption: Nombre de los Empleados
* Vamos a hacer una funcin que "traduzca: Gerente por Pepito, Secretaria Administracin
por Felipa, etc.
Crea un M0dulo de nombre M0dulo1, que contenga el siguiente programa:
%u&lic Function :raduce1a As .tring3 As .tring
.elect 2ase a
2ase U(erenteU
:raduce F U%aAuitoU
2ase U.ecretaria Administraci0nU
:raduce F UFeliaU
2ase U2onta&leU
:raduce F U%eitoU
2ase U.ecretaria Direcci0nU
:raduce F U5erminiaU
2ase Ueefe de VentasU
:raduce F UAm&rosioU
"nd .elect
"nd Function
* Escribe el siguiente cdigo:
%ri!ate .u& cmd+om&re"mleadoV2licY13
Dim &d As Data&ase
Dim t& As :a&leDef
Dim fld As Field
.et &d F 2urrentD&
.et t& F &d#:a&leDefs1UDatosU3
.et fld F t&#2reateField1U+om&re"mleadoU6 d&:ext3
t&#Fields#Aend fld
Dim 7 As -ecordset
.et 7 F &d#Oen-ecordset1UDatosU3
7#Mo!eFirst
Do Xntil 7#"OF
7#"dit
71U+om&re"mleadoU3 F :raduce171U"mleadoU33
7#Xdate
7#Mo!e+ext
Eoo
7#2lose
"nd .u&
* Antes de nada, vamos a ver si funciona, es decir:
* "Abre el formulario Mantenimiento
* Clic en [Nombre de los Empleados]
* "Cierra el formulario
* "Abre la tabla Datos. Si todo ha funcionado correctamente, tenemos un nuevo campo de
nombre +om&re"mleado, donde aparece: Pepito, Felipa, Ambrosio, etc, segn el
contenido del campo "mleado correspondiente.
VB Access 2000 Ferm Vil 156
Observemos el procedimiento cmd+om&re"mleado ya que aparecen elementos nuevos:
Dim t& As :a&leDef
Declaramos una variable de nombre t& y tipo "tabla
Dim fld As Field
Declaramos una variable de nombre fld y tipo camo
.et t&F&d#:a&leDefs1'Datos*3
Asignamos la variable t& a nuestra tabla 'Datos*
.et fldFt&#2reateField1'+om&re"mleado*6d&:ext3
Asignamos la variable "fld al campo "NombreEmpleado tipo texto (dbText) de la tabla
"tb (Datos).
t&#Fields#Aend fld
Aadimos el campo "fld (NombreEmpleado) a la tabla "tb (Datos).
El resto del programa creo que est claro, ya que utilizamos instrucciones ya
conocidas.
- Vamos a comenzar a trabajar con el .ME ...
El .ME (lenguaje de consulta estructurado) es el lenguaje utilizado por todos los gestores de
bases de datos para consultar, actualizar y administrar bases de datos relacionales.
.ME se puede utilizar para recuperar, ordenar y filtrar datos especficos que se van a extraer de
la base de datos.
nserta en el formulario Mantenimiento un botn de comando con las siguientes
propiedades:
Name: cmdOrdenar
Caption: Listado ordenado por Empleado
Escribe el siguiente cdigo:
%ri!ate .u& cmdOrdenarV2licY13
Dim d& As Data&ase6 r As -ecordset
Dim sAl As .tring6 salida As .tring
.et d& F 2urrentD&
sAl F U."E"2: O F-OM Datos O-D"- BW "mleadoU
.et r F d&#Oen-ecordset1sAl3
r#Mo!eFirst
Do Xntil r#"OF
salida F salida D r1U9dU3 D U / U D V
r1U"mleadoU3 D U / U D r1U"lAuellamaU3 D V
!&2rEf
r#Mo!e+ext
Eoo
r#2lose
MsgBox salida
"nd .u&
Ejecuta el programa, es decir:
"Abre el formulario Mantenimiento
Clic en [Listado ordenado por Empleados]
Si todo funciona correctamente aparecer el listado de nuestra tabla Datos (campos:
d, Empleado y Elquellama), ordenado segn el campo "mleado
Estudiemos el programa cmdOrdenarV2licY:
VB Access 2000 Ferm Vil 157
Dim sql As String
Declaramos una variable de texto de nombre sAl (podra ser cualquier otro nombre).
sAlF*."E"2: O F-OM Datos O-D"- BW "mleado*
Asignamos a la variable sAl una sentencia SQL, que indica lo siguiente: "Selecciona
todos los campos (*) de la tabla Datos y ordena los registros, segn el campo
Empleado
.et rFd&#Oen-ecordset1sAl3
Asignamos a "r el grupo de registros correspondiente a la sentencia sql.
Observa pues, que el "Recordset no tiene porqu ser una tabla determinada.
Supongo que intuyes la "potencia de lo que acabamos de hacer: una sentencia .ME
como '-ecordset*. Est claro pues, la importancia de conocer el lenguaje
estructurado SQL. No te preocupes de momento, dedicaremos el prximo captulo del
manual a rogramar en .ME
- Vamos a trabajar con otro objeto DAO: las consultas.
nserta en el formulario Mantenimiento un nuevo botn de comando con las propiedades:
Name: cmdConsulta
Caption: Crea Consulta
Escribe el siguiente cdigo:
%ri!ate .u& cmd2onsultaV2licY13
Dim &d As Data&ase
Dim t& As :a&leDef
Dim A As Muer7Def
.et &d F 2urrentD&
.et A F &d#2reateMuer7Def1UElamadas ordenadas or "mleadoU3
A#sAl F U."E"2: O F-OM Datos O-D"- BW "mleadoU
"nd .u&
Ejecuta el programa, es decir:
"Abre el formulario Mantenimiento
Clic en el botn [Crea Consulta]
"Cierra el formulario. Entra y sal del Editor de Visual Basic, para que aparezca en el
Panel de Objetos, a la izquierda de la pantalla
Se acaba de crear una consulta en nuestra base de datos. En efecto, "abre la consulta
Elamadas ordenadas or "mleado
Clic en la flechita de "Ver
Selecciona la opcin: .ME Vista .ME
Si todo va bien, aparece: ."E"2: O F-OM Datos O-D"- BW "mleado
Observemos el programa cmd2onsultaV2licY13
Dim A As Muer7Def
Declaramos una variable de nombre A tipo consulta (QueryDef)
.et AF&d#2reateMuer7Def1'Elamadas ordenadas or "mleado*3
Asignamos a la variable "q la consulta "Llamadas ordenadas por Empleado
A#sAl F '."E"2: O F-OM Datos O-D"- BW "mleado*
La consulta "q corresponde a la sentencia SQL: toda la tabla "Datos pero ordenada
segn Empleado.
VB Access 2000 Ferm Vil 158
- Una cosa es crear una consulta por DAO y otra diferente acceder a una consulta ya creada ...
* nserta un nuevo botn de comando en el formulario Mantenimiento con:
Name: cmdVerConsulta
Caption: Ver la Consulta
* Escribe el siguiente cdigo:
%ri!ate .u& cmdVer2onsultaV2licY13
Dim x As Data&ase6 s As .tring
Dim 7 As -ecordset
Dim R As Muer7Def
.et x F 2urrentD&
.et A F x#Muer7Defs1UElamadas ordenadas or "mleadoU3
.et 7 F A#Oen-ecordset13
7#Mo!eFirst
Do Xntil 7#"OF
s F s D 71U9dU3 D U / U D 71U"mleadoU3 D !&2rEf
7#Mo!e+ext
Eoo
7#2lose
MsgBox s
"nd .u&
Ejecuta el programa anterior, para comprobar que funciona.
Observemos el cmdVer2onsultaV2licY:
.et AFx#Muer7Defs1'Elamadas ordenadas or "mleado*3
Asignamos a "q la consulta "Llamadas ordenadas por Empleado
.et 7FA#Oen-ecordset13
Asignamos a "y el "recordset correspondiente a la consulta "q
- Vamos a "ordenar pero de una forma ms sofisticada ...
Crea un autoformulario en :a&la, para la tabla Datos y grbalo con el nombre Datos
Es decir:
Abre la tabla Datos
Cinta de Opciones: Crear Varios Elementos
Desde la pantalla de diseo del formulario Datos:
nserta en la seccin "Pie del formulario un cuadro de lista, con las siguientes
propiedades:
Nombre: lstOrdenaciones
Tipo de origen: Lista de valores
Origen de la fila: "d; "DiaHora; "Empleado; "Elquellama;
"Notas; "NombreEmpleado
Etiqueta: Ordenar por
* Escribe el siguiente cdigo:
%ri!ate .u& lstOrdenacionesVAfterXdate13
Dim x As Data&ase
Dim sAl As .tring
Dim 7 As Muer7Def
.et x F 2urrentD&
sAl F U."E"2: O F-OM Datos O-D"- BW [U D V
VB Access 2000 Ferm Vil 159
Forms\[Datos]\[lstOrdenaciones] D U]U
.et 7 F x#2reateMuer7Def1UordenU6 sAl3
Do2md#Al7Filter UordenU
x#Muer7Defs#Delete UordenU
"nd .u&
Ante todo, veamos si funciona, es decir:
Ejecuta el formulario "Datos
En el cuadro de lista lstOrdenaciones, escoge el campo que quieras.
Si todo funciona correctamente, el listado que aparece en el formulario, se ordena
segn el campo que hemos seleccionado en el cuadro de lista.
Estudiemos el procedimiento lstOrdenacionesVAfterXdate
lstOrdenacionesVAfterXdate
Despus de actualizar el control "cuadro de lista
sAl F '."E"2: O F-OM Datos O-D"- BW [' D Forms\[Datos] \[lstOrdenaciones] D
']*
Sentencia SQL que indica: Ordenar la tabla Datos segn el valor del control
lstOrdenaciones
7Fx#2reateMuer7Def1'orden*6sAl3
Crea una consulta de nombre 'orden*, segn la sentencia "sql
Do2md#Al7Filter "orden*
En el formulario activo se ejecuta la consulta "orden
x#Muer7Defs#Delete 'orden*
Se borra la consulta "orden de la base de datos.
- Vamos a buscar registros que cumplan un determinado criterio ...
nserta un nuevo botn de comando en el formulario Mantenimiento con las
caractersticas:
Name: cmdCriterio
Caption: Listado segn Criterio
Escribe el siguiente cdigo:
%ri!ate .u& cmd2riterioV2licY13
Dim &d As Data&ase
Dim rs As -ecordset
Dim salida As .tring6 crit As .tring
.et &d F 2urrentD&
.et rs F &d#Oen-ecordset1UDatosU6 d&OenD7naset3
crit F U[9d]P2U
rs#FindFirst crit
Do Xntil rs#+oMatc,
salida F salida D rs1U9dU3 D U / U D rs1U"mleadoU3 D !&2rEf
rs#Find+ext crit
Eoo
rs#2lose
MsgBox salida
"nd .u&
Veamos si funciona, es decir:
"Abre el formulario Mantenimiento
Clic en [Listado segn criterio]
VB Access 2000 Ferm Vil 160
Si todo funciona correctamente, aparece el listado de "d y "Empleado,
correspondientes a un 9dP2
Estudiemos el programa:
.et rsF&d#Oen-ecordset1'Datos*6d&OenD7naset3
El recordset debe abrirse en modo "Dynaset, para poder utilizar el mtodo Find
crit F '[9d] P 2*
Asignamos a la variable crit el criterio que deseemos, en nuestro caso, que el campo
[d] sea superior a 2.
rs#FindFirst crit
Nos situamos en el primer registro que cumple la condicin crit
Do Xntil rs#+oMatc,
1.entencia13
rs#Find+ext crit
Eoo
Mientras los registros vayan cumpliendo la condicin "crit, se ir ejecutando la
sentencia1, en cada registro que la cumpla.
- Resulta que el formulario Mantenimiento lo utilizan varias personas y nos gustara tener un
"registro de todos los que abren el formulario ...
* Crea una nueva tabla en la B.D. LLAMADAS de nombre -egistro y estructura:
2amos :io
Reg Autonumrico y Clave Principal
Usuario Texto
DiaHora Fecha/Hora
* Escribe el siguiente cdigo, correspondiente al abrir el formulario Mantenimiento:
%ri!ate .u& FormVEoad13
Dim &d As Data&ase
Dim r As -ecordset
Dim nom As .tring
.et &d F 2urrentD&
.et r F &d#Oen-ecordset1U."E"2: O F-OM -egistroU3
nom F 9nutBox1U"scri&e tus datosU3
r#Add+e<
r1UXsuarioU3 F nom
r1UDia5oraU3 F +o<
r#Xdate
r#2lose
"nd .u&
Observa que en el "recordset escribimos directamente una sentencia SQL, que no es ms que
la tabla -egistro.
Prueba el programa, es decir abre varias veces el formulario Mantenimiento, y analiza lo
que sucede en la tabla -egistro
- Podemos utilizar la "filosofia del programa anterior para simular una "Demo, es decir, nos
gustara que el formulario Datos, por ejemplo, slo se pudiera utilizar 5 das ...
Crea una nueva tabla de nombre 2ontrol, en EEAMADA. con la estructura:
VB Access 2000 Ferm Vil 161
2amos :io
numdia Numrico y Clave Principal
fecha Fecha/Hora
* Escribe el siguiente cdigo, correspondiente al abrir el formulario Datos:
%ri!ate .u& FormVEoad13
Dim &d As Data&ase
Dim registros As -ecordset
Dim mensa8e As .tring6 tit As .tring
.et &d F 2urrentD&
.et registros F &d#Oen-ecordset1U."E"2: O F-OM 2ontrolU3
9f registros#-ecord2ount F 0 :,en
registros#Add+e<
registros1UnumdiaU3 F 1
registros1Ufec,aU3 F Date
registros#Xdate
"lse
9f registros1UnumdiaU3 PF @ :,en
mensa8e F U.e ,an suerado los @ d=as de la demoU
tit F UDemoU
MsgBox mensa8e6 CK6 tit
Do2md#Muit
"lse
9f registros1Ufec,aU3 QP Date :,en
registros#"dit
registros1UnumdiaU3 F registros1UnumdiaU3 J 1
registros1Ufec,aU3 F Date
registros#Xdate
"nd 9f
"nd 9f
"nd 9f
registros#2lose
"nd .u&
Prueba el funcionamiento del programa, es decir:
Abre el formulario "Datos
nvestiga el contenido de la tabla 2ontrol.
Para comprobar el funcionamiento del programa, debers esperar 5 das o haz lo
siguiente: En el nico registro de la tabla 2ontrol, escribe: @ en "numdia y cualquier
fecha que no sea la de hoy en "fecha.
Vuelve a ejecutar el formulario Datos.
VB Access 2000 Ferm Vil 162
%ara sa&er ms
DAO
Los objetos de acceso a datos de Microsoft, comnmente conocidos como DAO, nos permiten
trabajar con datos, nicamente. No podremos crear un formulario utilizando DAO, aunque
forme parte de la base de datos, ya que los formularios no son datos, sin embargo s podemos
crear una tabla.
De manera general, cualquier cosa que podamos hacer con tablas, con consultas o con los
datos propiamente dichos podr hacerse a travs de DAO.
Podramos crear una base de datos entera utilizando DAO y algunos de los procedimientos
incorporados de Microsoft Access. Por supuesto, algunas tareas son ms fciles de hacer
utilizando la interfaz de usuario, como por ejemplo: crear una consulta o establecer relaciones
entre tablas. Sin embargo, algunas propiedades y mtodos de los objetos DAO pueden resultar
tiles, porque automatizan y mejoran las rutinas que resultan tediosas o redundantes a travs
de la interfaz de usuario.
"sacios de tra&a8o
El DAO admite dos entornos diferentes de bases de datos o "espacios de trabajo:
Eos esacios de tra&a8o Microsoft eet
Permiten tener acceso a datos en bases de datos Microsoft Jet (Access), orgenes de datos
Microsoft conectados a ODBC y orgenes de datos SAM instalable en otros formatos, como
Paradox o Lotus 1 2 3
Eos esacios de tra&a8o ODB2Direct
Permiten tener acceso a servidores de bases de datos mediante ODBC, sin cargar el motor de
base de datos Microsoft Jet
Xso del esacio de tra&a8o Microsoft eet
A&rir una &ase de datos
Para abrir una base de datos, simplemente abrimos un o&8eto Data&ase. Este objeto puede
representar una base de datos Microsof Jet (archivo .mdb), una base de datos SAM (Paradox,
por ejemplo) o una base de datos ODBC conectada mediante el motor de bases de datos
Microsoft Jet (tambin conocido como una "base de datos ODBC conectada a Microsoft Jet).
Maniulaci0n de datos
El DAO proporciona un excelente conjunto de herramientas de manipulacin de datos.
Podemos crear un o&8eto -ecorset, para consultar convenientemente una base de datos y
manipular el conjunto de registros resultante. El mStodo Oen-ecordset acepta una cadena
SQL o un nombre de un o&8eto Muer7Def (consulta almacenada), como un argumento de
origen de datos, o se puede abrir desde un o&8eto Muer7Def o un o&8eto :a&leDef, utilizando
este objeto como el origen de datos. El o&8eto -ecordset resultante presenta un conjunto
extremadamente rico de propiedades y mtodos con el que examinar y modificar datos.
El objeto Recordset est disponible en varios tipos diferentes:
VB Access 2000 Ferm Vil 163
-ecordset tio :a&le
Solo pueden crearse de tablas Access locales (no vinculadas)
-ecorset tio D7naset
Podemos utilizar tablas locales, vinculadas al igual que consultas y sentencias sql.
Tenemos que utilizar la constante d&OenD7naset slo al abrir una tabla local, porque un
"dynaset es el recordset predeterminado para todos los otros tipos de datos.
-ecordset .nas,ot
gual que el tipo "dynaset, pero debemos establecer la constante d&Oen.nas,ot porque un
"snapshot no es el tipo de recordset predeterminado, las otras diferencias respecto al tipo
"dynaset, dependen de sus opciones.
Autoe!aluaci0n C
1) Modifica la B#D# "!al?A, que nos permita repasar las tablas de multiplicar de la
siguiente manera:
* Cambile el nombre, por "!alCA
* Crea en Eval4A una tabla de nombre +otas con la estructura:
2amos :io
d Autonumrico y Clave Principal
Usuario Texto
Curso Texto
Fecha Fecha/Hora
Multiplicaciones Numrico
Bien Numrico
Mal Numrico
Nota Texto
* El programa debera "registrar en la tabla +otas, los datos correspondientes del usuario
del formulario Multilicar. De la siguiente forma:
* Crea un formulario de nombre Datos, que debera ser el inicial, al abrir la B.D. Eval4A,
que sirva para "recoger los datos del usuario:
VB Access 2000 Ferm Vil 164
+om&res)
txtNom
txtCurs
cmdMultiplicar
Al hacer clic en [Tablas de Multiplicar], se registran los datos correspondientes en la
tabla +otas y se abre el formulario Multilicar
Al cerrar el formulario Multilicar, se acaban de registrar los datos correspondientes
en la tabla +otas.
Cambia el botn [Salir] del formulario Multilicar por "Cerrar.
2) Crea en la B#D# "!alCA un formulario de nombre 2ontrol, que permita analizar los
resultados de la tabla +otas, de la siguiente forma:
Formulario 2ontrol:
+om&res)
txtCnom
txtCnum
txtCbien txtCmal
txtCnota
cmdCotro
Escribimos en el cuadro de texto txt2nom, el nombre de un alumno (Usuario de la tabla
Notas) y al salir de txt2nom, se rellenan automticamente el resto de cuadros de texto del
formulario 2ontrol.
Al hacer clic en tro Alumno], volvemos a empezar.
3) Mejora la seleccin del alumno en el formulario 2ontrol anterior, de la siguiente forma:
Crea un formulario de nombre Alumnos para la tabla +otas, con el siguiente aspecto
aproximado:
VB Access 2000 Ferm Vil 165
+om&res)
cmdOk cmdCancelar
20digo)
%ri!ate .u& cmd2ancelarV2licY13
Forms\2ontrol#:ag F U2ancelarU
Do2md#2lose
"nd .u&
%ri!ate .u& cmdOYV2licY13
Forms\2ontrol#:ag F UOYU
Me#Visi&le F False
"nd .u&
nserta en el formulario 2ontrol un botn de comando con las siguientes propiedades:
Name: cmdAlumnos
Caption: Alumnos
Corrige el procedimiento FormVEoad del formulario 2ontrol, para que el foco se coloque
en cmdAlumnos
Escribe el siguiente cdigo:
%ri!ate .u& cmdAlumnosV2licY13
Do2md#OenForm UAlumnosU6 6 6 6 acForm-eadOnl76 acDialog
9f Me#:ag F UOYU :,en
[txt2nom] F Forms\Alumnos\[Xsuario]
Do2md#2lose acForm6 UAlumnosU
"nd 9f
"nd .u&
nvestiga el funcionamiento de lo que hemos hecho y el porqu (utiliza la ayuda del Visual
Basic).
VB Access 2000 Ferm Vil 166
ASndice A
%rogramaci0n en .ME
El lenguaje de consulta estructurado (SQL) es un lenguaje de bases de datos
normalizado, utilizado por el motor de bases de datos de Microsoft Jet.
2onsultas de selecci0n
Las consultas de seleccin se utilizan para indicar al motor de datos que devuelva informacin
de las B.D., esta informacin es devuelta en forma de conjunto de registros que se pueden
almacenar en un objeto recordset.
* Crea una nueva base de datos Access 200? de nombre BDsAl en TuCarpeta
* mporta las tablas 2ategor=as6 %roductos 7 %ro!eedores de la base de datos de
ejemplo +etuno. Es decir:
2inta de Ociones) Datos externos
9mortar
Access
Selecciona: +etuno#md& y [mportar]
Selecciona las tablas: 2ategor=as6 %roductos 7 %ro!eedores
[Aceptar]
- Crea un formulario en blanco con las siguientes caractersticas:
Grbalo con el nombre 2onsultas.ME
Nombre del Cuadro de texto: txt.ME
Botones: cmd"8ecuta 7 cmd+ue!a
VB Access 2000 Ferm Vil 167
- Escribe el siguiente cdigo:
%ri!ate .u& cmd"8ecutaV2licY13
Dim x As Data&ase
Dim sAl As .tring
Dim 7 As Muer7Def
.et x F 2urrentD&
sAl F [txt.ME]
.et 7 F x#2reateMuer7Def1UconsultaU6 sAl3
Do2md#OenMuer7 UconsultaU6 ac+ormal6 ac-eadOnl7
x#Muer7Defs#Delete UconsultaU
"nd .u&
%ri!ate .u& cmd+ue!aV2licY13
[txt.ME] F UU
[txt.ME]#.etFocus
"nd .u&
- Observemos nuestro programa:
Declaramos la base de datos activa como "x
Declaramos la variable "sql de texto
Declaramos una consulta como "y
Asignamos a la variable sAl, el valor del campo txt.ME (donde escribiremos las
sentencias SQL).
Creamos en la base de datos una consulta de nombre "consulta, segn la
sentencia SQL, que tendremos escrita en txt.ME
Abrimos la consulta (DoCmd.OpenQuery "consulta).
Borramos de la base de datos la consulta anterior.
- Est claro que utilizaremos el formulario anterior, para aprender a programar en
SQL ...
b) La sintaxis bsica de una consulta de seleccin es la siguiente:
."E"2: camo16 camo26 ### F-OM nom&re:a&la
Vamos a ver si funciona:
- Ejecuta el formulario 2onsultas.ME
En el cuadro de texto escribe:
."E"2: +om&re2ategor=a6 Descrici0n F-OM 2ategor=as
Clic en [Ejecutar]
Si todo funciona correctamente aparecer el listado de todas las categoras y
descripcin de las mismas.
"Cierra la consulta
Clic en [Nueva]
Si deseamos todos los campos de la tabla, no es necesario escribirlos uno por uno despus de
la clusula SELECT, basta escribir en su lugar un asterisco.
- Prubalo, visualizando la consulta correspondiente a:
."E"2: O F-OM 2ategor=as
VB Access 2000 Ferm Vil 168
&3 Ordenar los registros
Podemos ordenar los registros utilizando la clusula O-D"- BW
- Listado de los "productos segn el campo +om&re%roducto:
Escribe en el txt.ME)
SELECT * FROM Productos ORDER BY NombreProducto
- Se pueden ordenar los registros por ms de un campo:
Queremos el siguiente listado:
Campos: NombreCompaa, CargoContacto, Pas
Tabla: Proveedores
Ordenados segn el Pas, en primer lugar y el Nombre de la Compaa en
segundo
Prubalo, utilizando la siguiente sentencia SQL:
."E"2: +om&re2omaB=a62argo2ontacto6%a=s
F-OM %ro!eedores
O-D"- BW %a=s6+om&re2omaB=a
Si quieres escribir en el cuadro de texto txt.ME, la sentencia en tres lneas, basta que pulses
[Ctrl][Return], despus de cada lnea
- ncluso se puede especificar el orden de los registros: ascendente (clusula A.2, se
toma este valor por defecto) o descendiente (D".2)
Consigue el listado anterior, pero la ordenacin por +om&re2omaB=a, que sea
descendente
Es decir:
."E"2: +om&re2omaB=a62argo2ontacto6%a=s
F-OM %ro!eedores
O-D"- BW %a=s A.26 +om&re2omaB=a D".2
c3 2onsultas con %redicado
Los posibles predicados son:
AEE: todos los campos de la tabla (equivalente a *)
:O%: devuelve un determinado nmero de registros de la tabla
D9.:9+2:: omite los registros cuyos campos seleccionados coincidan totalmente
D9.:9+2:-O;: omite los registros duplicados basandose en la totalidad del registro y no slo
en los campos seleccionados.
No es conveniente abusar de ALL o *, ya que obligamos al motor de la base de datos a analizar
la estructura de la tabla para averiguar los campos que contiene, es mucho ms rpido indicar
el listado de campos deseados.
- :O%: Devuelve un cierto nmero de registros que entran entre el principio y el final de un
rango especificado por una clusula O-D"- BW.
Queremos los 15 primeros Productos (segn el 9d%roducto), para los campos :
dProducto, NombreProducto y PrecioUnidad.
Debers utilizar la sentencia:
."E"2: :O% 1@ 9d%roducto6+om&re%roducto6%recioXnidad
F-OM %roductos
O-D"- BW 9d%roducto
Prubalo a ver si es verdad.
VB Access 2000 Ferm Vil 169
Queremos los 10 ltimos %roductos (segn el dProducto), para los campos:
dProducto, NombreProducto y PrecioUnidad.
Prueba la siguiente sentencia:
."E"2: :O% 10 9d%roducto6+om&re%roducto6%recioXnidad
F-OM %roductos
O-D"- BW 9d%roducto D".2
Se puede utilizar la palabra reservada %"-2"+: para devolver un cierto porcentaje de
registros que caen al principio o al final de un rango especificado por la clusula O-D"- BW
Queremos el 30% de las primers 2ategor=as
Prueba la siguiente sentencia:
."E"2: :O% ?0 %"-2"+: 9d2ategor=a6 +om&re2ategor=a
F-OM 2ategor=as
O-D"- BW 9d2ategor=a
Queremos el 15% de las ltimas 2ategor=as
Prueba la siguiente sentencia:
."E"2: :O% 1@ %"-2"+: 9d2ategor=a6+om&re2ategor=a
F-OM 2ategor=as
O-D"- BW 9d2ategor=a D".2
- D9.:9+2:: omite los registros cuyos campos seleccionados coincidan totalmente.
Queremos el listado de todos los proveedores de nuestros productos.
Utiliza la siguiente sentencia SQL:
."E"2: D9.:9+2: 9d%ro!eedor
F-OM %roductos
Compralo con el resultado de la sentencia:
."E"2: 9d%ro!eedor
F-OM %roductos
Queremos el listado de los pases correspondientes a nuestros proveedores.
Prueba la sentencia:
."E"2: D9.:9+2: %a=s
F-OM %ro!eedores
Y compara el resultado de la misma sentencia, pero sin "DSTNCT
d3 -ecuerar informaci0n de otra &ase de datos
Desde el formulario 2onsultas.ME de la B#D# BDsAl, nos gustara visualizar los registros de
los campos: Empleado y Elquellama, de la tabla Datos de la B#D# EEAMADA.
No hay ningn problema, siempre y cuando utilizemos la palabra reservada 9+.
En efecto, prueba la siguiente sentencia SQL:
."E"2: "mleados6 "lAuellama
F-OM Datos 9+ fc)g:u2aretagEEAMADA.#md&a
VB Access 2000 Ferm Vil 170
e3 2riterios de .elecci0n
En los apartados anteriores hemos visto la forma de recuperar todos los registros. Vamos a ver
ahora la forma de recuperar los registros que cumplan unos criterios determinados.
Veamos en primer lugar la sintaxis que hemos de seguir en los "criterios:
1) Al referirnos a un campo de texto, hemos de encerrarlo entre comillas simples.
2) No es posible incluir campos de tipo Memo
3) Las fechas se deben escribir siempre en formato mm/dd/aa y adems la fecha debe ir
encerrada entre almohadillas (#).
4) Los operadores lgicos ms comunes en SQL son: AND (y), OR (o) NOT (no).
- Listado de productos, cuyo campo Xnidades"n"xistencia est entre 20 y 60.
Utiliza la siguiente sentencia SQL:
."E"2: O F-OM %roductos
;5"-" Xnidades"n"xistenciaP20 A+D Xnidadades"n"xistenciaQG0
O-D"- BW Xnidades"n"xistencia
- El mismo listado anterior, pero adems deseamos los productos correspondientes a "36
cajas.
Prueba la siguiente sentencia:
."E"2: O F-OM %roductos
;5"-" 1Xnidades"n"xistenciaP20 A+D Xnidades"n"xistenciaQG03
O- 2antidad%orXnidadFa?G ca8asa
O-D"- BW Xnidades"n"xistencia
Si todo funciona correctamente, aparecer el mismo listado de antes, ms un producto (Mezcla
Gumbo del chef Anton) correspondiente a "36 cajas.
- Listado de proveedores que no son de Estados Unidos
Utiliza la siguiente sentencia:
."E"2: +om&re2omaB=a62iudad6%a=s
F-OM %ro!eedores
;5"-" +O: %a=sFa"stados Xnidosa
O-D"- BW %a=s
- Listado de productos de precio entre 30 y 100 y productos con unidades en existencia
entre 10 y 75.
Prueba la siguiente instruccin SQL:
."E"2: +om&re%roducto6%recioXnidad6Xnidades"n"xistencia
F-OM %roductos
;5"-" 1%recioXnidadP?0 A+D %recioXnidadQ1003
O- 1Xnidades"n"xistenciaP10 A+D Xnidades"n"xistenciaQ7@3
O-D"- BW %recioXnidad D".2
Para indicar que deseamos recuperar los registros segn el intervalo de valores de un campo,
utilizamos el operador Bet<een cuya sintaxis es:
+om&re del camo Bet<een !alor1 And !alor2
La consulta correspondiente devolvera los registros que contengan en "Nombre del Campo
un valor incluido en el intervalo valor1, valor2 (ambos inclusive)
Podemos combinar los operadores +ot Bet<een
Repite las 3 sentencias SQL anteriores, pero utilizando el operador Between, es decir:
."E"2: O F-OM %roductos
;5"-" Xnidades"n"xistencia Bet<een 20 And G0
O-D"- BW Xnidades"n "xistencia
VB Access 2000 Ferm Vil 171
."E"2: O F-OM %roductos
;5"-" 1Xnidades"n"xistencia Bet<een 20 And G03
O- 2antidad%orXnidadFa?G ca8asa
O-D"- BW Xnidades"n"xistencia
."E"2: +om&re%roducto6%recioXnidad6Xnidades"n"xistencia
F-OM %roductos
;5"-" 1%recioXnidad Bet<een ?0 And 1003
O- 1Xnidades"n"xistencia Bet<een 10 And 7@3
O-D"- BW %recioXnidad D".2
Observa que al utilizar el operador Bet<een, los dos valores del intervalo se encuentran
incluidos en la condicin.
- El operador EiYe
Se utiliza para comparar una expresin de cadena con un modelo en una expresin SQL. Su
sintaxis es:
exresi0n EiYe modelo
Ejemplos de "modelo:
Like 'P[A-F]*'
Devolver los datos que comienzan con la letra P seguida de cualquier letra entre A y F y de
cualquier cadena a continuacin (*)
Prueba la siguiente sentencia:
."E"2: Descrici0n F-OM 2ategor=as
;5"-" Descrici0n EiYe f%[A/F]Oa
Like 'P*'
Devolver los datos que comienzan con la letra P
Prueba la sentencia:
."E"2: Descrici0n F-OM 2ategor=as
;5"-" Descrici0n EiYe f%Oa
Like '*dulce*'
Devolver los datos que contienen la palabra dulce
Prueba la sentencia:
."E"2: Descrici0n F-OM 2ategor=as
;5"-" Descrici0n EiYe fOdulceOa
Like '(???)*'
Devolver los datos que empiezan con tres caracteres entre parntesis.
Pubalo con la siguiente sentencia:
."E"2: :elSfono F-OM %ro!eedores
;5"-" :elSfono EiYe f1NNN3Oa
El operador 9n
Este operador devuelve aquellos registros cuyo campo indicado coincide con alguno de los
valores de la lista.
VB Access 2000 Ferm Vil 172
* Queremos todos los proveedores de Estados Unidos, Alemania y Espaa
Considera la siguiente sentencia:
."E"2: +om&re2omaB=a6%a=s
F-OM %ro!eedores
;5"-" %a=s 9n1f"stados Xnidosa6aAlemaniah6isaBah3
O-D"- BW %a=s
* Queremos todos los proveedores que no sean de Estados Unidos ni de Alemania.
Prueba la siguiente sentencia SQL:
."E"2: +om&re2omaB=a6%a=s
F-OM %ro!eedores
;5"-" %a=s +ot 9n1f"stados Xnidosa6aAlemaniaa3
O-D"- BW %a=s
Para acabar con este apartado prueba las siguientes sentencias SQL:
."E"2: +om&re2omaB=a62argo2ontacto
F-OM %ro!eedores
;5"-" 2argo2ontacto EiYe fO!entasOa
."E"2: +om&re%roducto6Xnidades"n"xistencia
F-OM %roductos
;5"-" Xnidades"n"xistencia +ot Bet<een @? And 120
O-D"- BW Xnidades"n"xistencia
f3 Agruamiento de -egistros
La clusula (-OX% BW combina los registros con valores idnticos, en la lista de campos
especificados, en un nico registro. Para cada registro se crea un valor sumario si se incluye
una funcin SQL agregada, como por ejemplo .um o 2ount.
Su sintaxis es:
."E"2: Eista de camos F-OM +om&re de la ta&la
;5"-" criterio
(-OX% BW camos del gruo
Queremos determinar el total de Xnidades en "xistencia, que tenemos por cada una de las
categoras.
Prueba la siguiente sentencia:
."E"2: 9d2ategor=a6 .um1Xnidades"n"xistencia3
F-OM %roductos
(-OX% BW 9d2ategor=a
El operador 5AV9+(
Es similar a WHERE, determina qu registros se seleccionan. Una vez que los registros se han
agrupado utilizando (-OX% BW6 5AV9+( determina cuales de ellos se van a mostrar.
Ejecuta la siguiente sentencia SQL:
."E"2: 9d2ategor=a6 .um1Xnidades"n"xistencia3
F-OM %roductos
(-OX% BW 9d2ategor=a
5AV9+( .um1Xnidades"n"xistencia3P?@0
And .um1Xnidades"n"xistencia3QG00
VB Access 2000 Ferm Vil 173
AV(
Calcula la media aritmtica de un conjunto de valores contenidos en un campo determinado.
Queremos el promedio de los precios de nuestros productos, por encima de 30.
Ejecuta la sentencia:
."E"2: A!g1%recioXnidad3 A. %romedioMas?0
F-OM %roductos
;5"-" %recioXnidadP?0
Compara el resultado con la consulta:
."E"2: A!g1%recioXnidad3 As %romedio
F-OM %roductos
2ount
Calcula el nmero de registros
Ejecuta la siguiente sentencia SQL:
."E"2: 2ount1O3 A. :otal
F-OM %roductos
Si como argumento de la funcin 2ount, especificamos campos, la funcin 2ount cuenta un
registro slo si al menos uno de los campos no es +ull. Si todos los campos especificados son
+ull, no se cuenta el registro. Hay que separar los nombres de los campos con el smbolo del
ampersand (&).
Veamos:
Nmero de registros de Proveedores:
."E"2: 2ount1O3 A. :odos
F-OM %ro!eedores
Nmero de registros de Proveedores que tienen "Regin:
."E"2: 2ount1-egi0n3 A. -egiones
F-OM %ro!eedores
Nmero de registros de Proveedores que tienen "Regin o "Fax:
."E"2: 2ount1-egi0nDFax3 A. -egFax
F-OM %ro!eedores

Max6 Min
Devuelven el mximo o mnimo de un conjunto de valores
Localizacin del mximo pedido:
."E"2: Max1Xnidades"n%edido3 A. Mas%edi
F-OM %roductos
Localizacin del mximo pedido de precio superior a 40:
."E"2: Max1Xnidades"n%edido3 A. MasC0
F-OM %roductos
;5"-" %recioXnidadPC0
.um
Devuelve la suma del conjunto de valores
VB Access 2000 Ferm Vil 174
Precio de todas las existencias:
."E"2: .um1%recioXnidadOXnidades"n"xistencia3 A. :otal
F-OM %roductos
g3 2onsultas de Acci0n
Las consultas de accin son aquellas que no devuelven ningn registro, son las encargadas de
acciones como aadir, borrar y modificar registros.
- D"E":"
Crea una consulta de eliminacin, que borra los registros que cumplen una clusula WHERE.
Localiza los proveedores correspondientes a un "cargo de contacto de "Gerente de ventas.
Es decir:
."E"2: O F-OM %ro!eedores
;5"-" 2argo2ontactoFa(erente de !entasa
Elimina los registros anteriores. Es decir:
D"E":" O F-OM %ro!eedores
;5"-" 2argo2ontactoFa(erente de !entasa
Antes debers eliminar la relacin que tenemos entre las tablas %roductos 7
%ro!eedores
Comprueba que ha funcionado la sentencia SQL
9+."-: 9+:O
Agrega un registro en una tabla. Se la conoce como una consulta de datos aadidos. Esta
consulta puede ser de dos tipos: insertar un nico registro o nsertar en una tabla los
registros contenidos en otra tabla.
Para insertar un nico registro la sintaxis es:
."E"2: 9+:O :a&la1camo16camo26###camo+3
VAEX".1!alor16!alor26###6!alor+3
Hay que prestar especial atencin a acotar entre comillas simples, los valores literales
(cadenas de caracteres) y las fechas indicarlas en formato mm/dd/aa y entre caracteres de
almohadillas (#).
Vamos a insertar un registro a la tabla Proveedores
Ejecuta la siguiente sentencia SQL:
9+."-: 9+:O %ro!eedores1+om&re2omaB=a6+om&re2ontacto3
VAEX". 1f%eea6aAm&rosioa3
Comprueba, investigando el contenido de %ro!eedores, que ha funcionado.
Para insertar registros de otra tabla, la sintaxis es:
9+."-: 9+:O :a&la [9+ &aseVexterna]1camo16camo26###3
."E"2: :a&laOrigen#camo16:a&laOrigen#camo26###
F-OM :a&laOrigen
La condicin SELECT puede incluir la clusula WHERE para filtrar los registros a copiar.
Si "Tabla y "TablaOrigen tienen la misma estructura podemos simplificar la sintaxis a:
9+."-: 9+:O :a&la ."E"2: :a&laOrigen#O F-OM :a&laOrigen
Vamos a probarlo:
VB Access 2000 Ferm Vil 175
Ejecuta la siguiente sentencia SQL:
9+."-: 9+:O %ro!eedores1+om&re2omaB=a6+om&re2ontacto3
."E"2: 2ategor=as#+om&re2ategor=a6 2ategor=as#Descrici0n
F-OM 2ategor=as
Comprueba lo que ha sucedido, investigando el contenido de la tabla %ro!eedores
X%DA:"
Crea una consulta de actualizacin que cambia los valores de los campos de una tabla
especificada basndose en una condicin. Su sintaxis es:
X%DA:" :a&la .": 2amo1F!alor16 2amo2F!alor26###
;5"-" 2riterio
UPDATE no genera ningn resultado. Para saber qu registros se van a cambiar, hay que
examinar primero el resultado de una consulta de seleccin que utilice el mismo criterio y
despus ejecutar la consulta de actualizacin.
Cambia todos los registros de %roductos, que tienen cero en el campo
Xnidades"n"xistencia por 2.
Debers utilizar la siguiente sentencia:
X%DA:" %roductos .": Xnidades"n"xistenciaF2
;5"-" Xnidades"n"xistenciaF0
Comprueba el resultado.
Aumenta en 3 unidades el campo Xnidades"n"xistencia de Productos, siempre y
cuando dicho campo sea superior a 2 e inferior a 5. Es decir, ejecuta la siguiente
sentencia:
X%DA:" %roductos .": Xnidades"n"xistenciaF
Xnidades"n"xistencia J ?
;5"-" Xnidades"n"xistencia Bet<een 2 And @
Comprueba el resultado.
Aumenta el precio de todos los productos en un 10%. Es decir, debers ejecutar:
X%DA:" %roductos .": %recioXnidadF%recioXnidadO1#1
Comprueba el resultado.
,3 2onsultas con %armetros
Las consultas con parmetros son aquellas cuyas condiciones de bsqueda se definen
mediante parmetros. Si se ejecutan directamente desde la base de datos donde han sido
definidas aparecer un mensaje solicitando el valor de cada uno de los parmetros. Si
deseamos ejecutarlas desde una aplicacin hay que asignar primero el valor de los parmetros
y despus ejecutarlas. Su sintaxis es la siguiente:
%A-AM":"-. nom&re16 tio16 ### 2onsulta .ME
- Queremos el listado de proveedores segn el pas.
Ejecuta la sentencia siguiente:
%A-AM":"-. ["scri&e el a=s] :extd
."E"2: O F-OM %ro!eedores
;5"-" %a=sF["scri&e el a=s]d
Observa el uso del punto y coma, que separa los %A-AM":"-. de la consulta .ME
VB Access 2000 Ferm Vil 176
Aendice B
"xcel6 VBA 7 Bases de Datos
+'ec(a el Excel *
B!(2" del &ffice
&3ci!"es de +4cel
%!"fi.raci2" de macr!s
5abili(ar (!das las macr!s 6"! rec!me"dad!111)
-i e" la :inta de +pciones7 "! a3arece "a ficha de "!mbre Programador7 ha# l! si.ie"(e8
B!(2" del &ffice
&3ci!"es de +4cel
9:s frece"(es
Ac(i,a la !3ci2"8
Mostrar (ic&a Programador en la :inta de +pcionesO
Acti!ar la -eferencia DAO
a) -i(;a(e e" el Editor de Visual Basic7 de la si.ie"(e f!rma8
%i"(a de &3ci!"es8 )r!.ramad!r
Visal Basic
5a# l! si.ie"(e8
9e"; 5erramie"(as
<efere"cias
Ac(i,a la refere"cia =9icr!s!f( >A& 316 &b'ec( ?ibrar*@
AAce3(arB
?! $e acabam!s de hacer es "ecesari! si $erem!s (raba'ar c!" bases de da(!s =access@ desde c2di.! de
VBA
2rear una &ase de datos
b) -i(;a(e e" la Foa1 e i"ser(a " b!(2" de c!ma"d! de la si.ie"(e f!rma8
%i"(a de &3ci!"es8 )r!.ramad!r
Cr3!8 %!"(r!les
%lic e" la flechi(a de 2nsertar
D"ser(a " b!(2" de c!ma"d! 6c!"(r!l Acti-e,)
%lic e" Propiedades * escribe c!m! 3r!3iedad =%a3(i!"@ E :reaci'n de una Base de 0atos)
%i"(a de &3ci!"es8 )r!.ramad!r
Cr3!8 %!"(r!les1
Ver :'digo
+scribe8
VB Access 2000 Ferm Vil 177
)ri,a(e -b %!mma"dB((!"1F%lic06)
>im bd As >a(abase
>im (a As /able>ef
>im cam As Field
-e( bd E %rea(e>a(abase6G%8H/%ar3e(aHA.e"da1mdbG7 db?a".-3a"ish)
-e( (a E bd1%rea(e/able>ef6GAmi.!sG)
-e( cam E (a1%rea(eField6GI!mbreG7 db/e4(7 40)
(a1Fields1A33e"d cam
-e( cam E (a1%rea(eField6G>irecci2"G7 db/e4(7 60)
(a1Fields1A33e"d cam
-e( cam E (a1%rea(eField6G/elJf!"!G7 db/e4(7 15)
(a1Fields1A33e"d cam
bd1/able>efs1A33e"d (a
bd1%l!se
+"d -b
- Craba el libr! de c:lcl! c!m! Excel/9 e" TuCarpeta 6/i3!8 5ibro de Excel &abilitado para macros)
- +'ec(a el 3r!cedimie"(! a"(eri!r
-i (!d! f"ci!"a c!rrec(ame"(e7 acabam!s de crear "a base de da(!s de "!mbre AgendaOmdb 6e"
TuCarpeta)7 $e c!"(ie"e "a (abla de "!mbre Amigos c!" l!s cam3!s8 I!mbre 6/e4(!7 a"chra E 40)7
>irecci2" 6(e4(!7 60) * /elJf!"! 6(e4(!7 15)1
%!m3reba si es ,erdad e'ec(a"d! el Microso(t Access
- -i(;a(e e" el +di(!r de Visal Basic7 3ara es(diar "es(r! 3r!cedimie"(! :ommandButton1$:licX()
&bser,a8
B 0im bd As 0atabase
>eclaram!s "a base de da(!s de "!mbre bd
B 0im tau As ;able0e(
>eclaram!s "a (abla de "!mbre tau
B 0im cam As Nield
>eclaram!s " cam3! de "!mbre cam
B Set bd 3 :reate0ataBase(\AgendaOmdb]" db5angSpanis&)
%ream!s "a base de da(!s de "!mbre bd $e c!"(ie"e el ficher! =access@8 AgendaOmdb1
B Set tau 3 bdO:reate;able0e((\Amigos])
%ream!s e" la base de da(!s bd 6A.e"da1mdb) "a (abla de "!mbre tau 6Amigos e" el ficher!
A.e"da1mdb)
B Set cam 3 tauO:reateNield(\>ombre]"dbtE,;" /0)
%ream!s e" la (abla tau 6Ami.!s) " cam3! de "!mbre cam 6I!mbre) de (e4(! c!" "a
a"chra de 40 carac(eres1
K )r!cedem!s de la misma f!rma 3ara defi"ir l!s cam3!s =>irecci2"@ * =/elJf!"!@
B bdO:lose
%erram!s la base de da(!s1 +s im3!r(a"(e "! de'ar "i"."a base de da(!s =abier(a@7 *a $e e"
cas! c!"(rari! se 3r!dciria" err!res i"deseables1
- +" defi"i(i,a7 "es(r! 3r!.rama8
K %rea "a base de da(!s =access@8 AgendaOmdb
K %!" "a (abla8 Amigos
K Le c!"s(a de 3 cam3!s8
I!mbre /e4(! 40 6a"chra e" carac(eres)
>irecci2" /e4(! 60
/elJf!"! /e4(! 15
- D"ser(a e" la Foa1 !(r! b!(2" de c!ma"d! 6%!"(r!l Ac(i,eM) de 3r!3iedad caption E <e-isArti7 *
c2di.!8
VB Access 2000 Ferm Vil 178
)ri,a(e -b %!mma"dB((!"2F%lic06)
>im bd As >a(abase
>im (a1 As /able>ef
>im (a2 As /able>ef
>im cam1 As Field
>im cam2 As Field
-e( bd E %rea(e>a(abase6G%8H/%ar3e(aH<e,isAr(i1mdbG7 db?a".-3a"ish)
-e( (a1 E bd1%rea(e/able>ef6G<e,is(asG)
-e( cam1 E (a11%rea(eField6G%!d<e,G7 db/e4(7 5)
(a11Fields1A33e"d cam1
-e( cam1 E (a11%rea(eField6G<e,is(aG7 db/e4(7 25)
(a11Fields1A33e"d cam1
-e( cam1 E (a11%rea(eField6G/i3!G7 db/e4(7 25)
(a11Fields1A33e"d cam1
-e( cam1 E (a11%rea(eField6G)reci!G7 db>!ble)
(a11Fields1A33e"d cam1
-e( cam1 E (a11%rea(eField6GAr(iG7 db/e4(7 5)
(a11Fields1A33e"d cam1
bd1/able>efs1A33e"d (a1
-e( (a2 E bd1%rea(e/able>ef6GAr(icl!sG)
-e( cam2 E (a21%rea(eField6G%!dAr(G7 db/e4(7 5)
(a21Fields1A33e"d cam2
-e( cam2 E (a21%rea(eField6GAr(icl!G7 db/e4(7 25)
(a21Fields1A33e"d cam2
-e( cam2 E (a21%rea(eField6G/ema(icaG7 db/e4(7 25)
(a21Fields1A33e"d cam2
bd1/able>efs1A33e"d (a2
bd1%l!se
+"d -b
- Craba de "e,! el libr! de c:lcl! c!" el mism! "!mbre Excel/9
- 5a# clic e" A<e,isAr(iB 3ara e'ec(ar el ;l(im! 3r!cedimie"(!1
D",es(i.a el c!"(e"id! de la base de da(!s access8 <e-isArtiOmdb $e (ie"es e" TuCarpeta
9ntroducci0n de nue!os registros
d) D"ser(a e" la Foa1 !(r! b!(2" de c!ma"d! de 3r!3iedad caption E >ue-os Amigos7 * c2di.!8
)ri,a(e -b %!mma"dB((!"3F%lic06)
NserF!rm11-h!O
+"d -b
- D"ser(a " f!rmlari! 6NserF!rm1) de c!"(e"id!8
VB Access 2000 Ferm Vil 179
- %2di.! 6NserF!rm1)8
)ri,a(e -b %!mma"dB((!"1F%lic06)
>im bd As >a(abase
>im re. As <ec!rdse(
-e( bd E &3e">a(abase6G%8H/%ar3e(aHA.e"da1mdbG)
-e( re. E bd1&3e"<ec!rdse(6G-elec( K Fr!m Ami.!sG7
db&3e">*"ase()
re.1AddIeO
re.6GI!mbreG) E /e4(B!411/e4(
re.6G>irecci2"G) E /e4(B!421/e4(
re.6G/elJf!"!G) E /e4(B!431/e4(
re.1N3da(e
bd1%l!se
/e4(B!411/e4( E GG
/e4(B!421/e4( E GG
/e4(B!431/e4( E GG
/e4(B!411-e(F!cs
+"d -b
- Craba el libr! de c:lcl! c!" el mism! "!mbre Excel/9
- )reba el =3r!.rama@ a"(eri!r7 es decir8
K %lic e" el b!(2" AIe,!s Ami.!sB de la Foa1
K D",e"(a " 3ar ! (res de re.is(r!s
K %!m3reba desde el =Access@ el c!"(e"id! de la (abla Amigos de AgendaOmdb
- Veam!s8
B 0im reg As <ecordset
>eclaram!s " .r3! de re.is(r!s de "!mbre reg1
B reg 3 bdO+pen<ecordset(\Select B Nrom Amigos]" db+pen0Enaset)
>efi"im!s el rec!rdse( =re.@7 c!m! l!s re.is(r!s de la (abla Amigos7 3ara ell! (ili#am!s "a
se"(e"cia SK5 6-elec( K Fr!m Ami.!s)1
db+pen0Enaset es " (i3! de =rec!rdse(@7 $e "!s 3ermi(e (!mar da(!s de "a ! m:s (ablas
relaci!"adas7 * adem:s "!s 3ermi(e la ac(ali#aci2" de l!s da(!s1
K &bser,a el 3r!ces! a se.ir 3ara i"(r!dcir re.is(r!s8llamam!s al mJ(!d! Add>e^ 6re.1AddIeO)
$e aPade " re.is(r! e" bla"c!1 +" se."d! l.ar7 asi."am!s ,al!res a l!s difere"(es cam3!s * 3!r
=;l(im!@ el mJ(!d! ?pdate 6re.1N3da(e)7 =escribe@ l!s "e,!s da(!s1
e) +" l.ar de " f!rmlari! c!" ss c!"(r!les7 3!dem!s (ili#ar celdas de la h!'a de c:lcl!1
+" efec(!8
- -i(;a(e e" la Foa2 * escribe e i"ser(a8
VB Access 2000 Ferm Vil 180
- Accede al M'dulo de la Foa2 * escribe l!s si.ie"(es 3r!cedimie"(!s8
)ri,a(e -b %!mma"dB((!"1F%lic06)
>im bd As >a(abase
>im r As <ec!rdse(
-e( bd E &3e">a(abase6Gc8H/%ar3e(aH<e,isAr(i1mdbG)
-e( r E bd1&3e"<ec!rdse(6G-elec( K fr!m Ar(icl!sG7 db&3e">*"ase()
r1AddIeO
r6G%!dAr(G) E 5!'a21%ells647 2)1Vale
r6GAr(icl!G) E 5!'a21%ells657 2)1Vale
r6G/ema(icaG) E 5!'a21%ells667 2)1Vale
r1N3da(e
bd1%l!se
<a".e6GB48B6G)1-elec(
-elec(i!"1%lear%!"(e"(s
<a".e6GB4G)1-elec(
+"d -b
)ri,a(e -b %!mma"dB((!"2F%lic06)
>im bd As >a(abase
>im r As <ec!rdse(
-e( bd E &3e">a(abase6Gc8H/%ar3e(aH<e,isAr(i1mdbG)
-e( r E bd1&3e"<ec!rdse(6G-elec( K fr!m <e,is(asG7 db&3e">*"ase()
r1AddIeO
r6G%!d<e,G) E 5!'a21%ells647 4)1Vale
r6G<e,is(aG) E 5!'a21%ells657 4)1Vale
r6G/i3!G) E 5!'a21%ells667 4)1Vale
r6G)reci!G) E 5!'a21%ells677 4)1Vale
r6GAr(iG) E 5!'a21%ells687 4)1Vale
r1N3da(e
bd1%l!se
<a".e6G>48>8G)1-elec(
-elec(i!"1%lear%!"(e"(s
<a".e6G>4G)1-elec(
+"d -b
- )reba el f"ci!"amie"(! de l!s d!s b!(!"es de la Foa2 * .raba el libr! de c:lcl! c!m! Excel/9
>a-egaci'n por una Base de 0atos
f) D"ser(a e" la Foa1 !(r! b!(2" de c!ma"d! de 3r!3iedad :aption E >a-egaci'n por la AgendaOmdb7
* c2di.!8
)ri,a(e -b %!mma"dB((!"4F%lic06)
NserF!rm21-h!O
+"d -b
VB Access 2000 Ferm Vil 181
- D"ser(a " "e,! f!rmlari! 6NserF!rm2) de c!"(e"id!8
- B!(!"es de "!mbre8
K Ie,! <e.is(r! E cmdIe,!<e.is(r!
K Crabar <e.is(r! E cmdCrabar<e.is(r!
K QQ E cmd)rimer<e.is(r!
K Q E cmdA"(eri!r<e.is(r!
K R E cmd-i.ie"(e <e.is(r!
K RR E cmdNl(im!<e.is(r!
- Accede al M'dulo del ?serNorm2 * escribe el si.ie"(e c2di.!8
>im bd As >a(abase
>im re. As <ec!rdse(
>im 4 As D"(e.er
S ?a ,ariable 47 c!"(e"dr: el ";mer! (!(al de re.is(r!s
>im "m As D"(e.er
S ?a ,ariable "m "!s dar: el ";mer! de re.is(r! ac(al
)ri,a(e -b cmdA"(eri!r<e.is(r!F%lic06)
Df "m E 1 /he"
9s.B!4 GI! ha* "i"."! a"(es de es(eG
+4i( -b
+lse
re.19!,e)re,i!s
"m E "m - 1
/e4(B!411/e4( E re.6GI!mbreG)
/e4(B!421/e4( E re.6G>irecci2"G)
/e4(B!431/e4( E re.6G/elJf!"!G)
+"d Df
+"d -b
)ri,a(e -b cmdCrabar<e.is(r!F%lic06)
re.19!,e?as(
re.1AddIeO
re.6GI!mbreG) E /e4(B!411/e4(
re.6G>irecci2"G) E /e4(B!421/e4(
re.6G/elJf!"!G) E /e4(B!431/e4(
VB Access 2000 Ferm Vil 182
re.1N3da(e
bd1%l!se
NserF!rmFD"i(iali#e
cmdNl(im!<e.is(r!F%lic0
+"d -b
)ri,a(e -b cmdIe,!<e.is(r!F%lic06)
/e4(B!411/e4( E GG
/e4(B!421/e4( E GG
/e4(B!431/e4( E GG
/e4(B!411-e(F!cs
+"d -b
)ri,a(e -b cmd)rimer<e.is(r!F%lic06)
Df "m E 1 /he"
9s.B!4 G+s(e es el 3rimer re.is(r!G
+4i( -b
+lse
re.19!,eFirs(
"m E 1
/e4(B!411/e4( E re.6GI!mbreG)
/e4(B!421/e4( E re.6G>irecci2"G)
/e4(B!431/e4( E re.6G/elJf!"!G)
+"d Df
+"d -b
)ri,a(e -b cmd-i.ie"(e<e.is(r!F%lic06)
Df "m E 4 /he"
9s.B!4 G+s(e es el ;l(im! re.is(r!G
+4i( -b
+lse
"m E "m T 1
re.19!,eIe4(
/e4(B!411/e4( E re.6GI!mbreG)
/e4(B!421/e4( E re.6G>irecci2"G)
/e4(B!431/e4( E re.6G/elJf!"!G)
+"d Df
+"d -b
)ri,a(e -b cmdNl(im!<e.is(r!F%lic06)
Df "m E 4 /he"
9s.B!4 G+s(e es el ;l(im! re.is(r!G
+4i( -b
+lse
re.19!,e?as(
"m E 4
/e4(B!411/e4( E re.6GI!mbreG)
/e4(B!421/e4( E re.6G>irecci2"G)
/e4(B!431/e4( E re.6G/elJf!"!G)
+"d Df
+"d -b
)ri,a(e -b NserF!rmFD"i(iali#e6)
-e( bd E &3e">a(abase6Gc8H/%ar3e(aHA.e"da1mdbG)
-e( re. E bd1&3e"<ec!rdse(6G-elec( K fr!m Ami.!sG7 db&3e">*"ase()
re.19!,e?as(
4 E re.1<ec!rd%!"(
"m E 1
VB Access 2000 Ferm Vil 183
re.19!,eFirs(
/e4(B!411/e4( E re.6GI!mbreG)
/e4(B!421/e4( E re.6G>irecci2"G)
/e4(B!431/e4( E re.6G/elJf!"!G)
+"d -b
)ri,a(e -b NserF!rmF/ermi"a(e6)
bd1%l!se
+"d -b
- )reba el f"ci!"amie"(! de l! $e acabam!s de hacer * .raba el libr! de c:lcl! c!" el mism! "!mbre
Excel/91 +s(: clar! $e8
Mo-eNirst E I!s si(am!s e" el 3rimer re.is(r!
Mo-e>ext E I!s si(am!s e" el si.ie"(e re.is(r!
Mo-ePre-ious E I!s si(am!s e" el a"(eri!r re.is(r!
Mo-e5ast E I!s si(am!s e" el ;l(im! re.is(r!
<ecord:ount E =%e"(a@ l!s re.is(r!s del <ec!rdse(1
B$sAueda de un registro
.) D"ser(a e" la Foa1 !(r! b!(2" de c!ma"d! de 3r!3iedad caption 3 B4s#ueda de un registro7 *
c2di.!8
)ri,a(e -b
%!mma"dB((!"5F%lic06)
NserF!rm31-h!O
+"d -b
- D"ser(a " "e,! f!rmlari! 6NserF!rm3) de c!"(e"id!8
- Accede al M'dulo del ?serNorm) * escribe el si.ie"(e c2di.!8
>im bd As >a(abase
>im re. As <ec!rdse(
>im cri(eri! As -(ri".
)ri,a(e -b %!mma"dB((!"1F%lic06)
cri(eri! E GI!mbreESG U /e4(B!411/e4( U GSG
re.1Fi"dFirs( cri(eri!
VB Access 2000 Ferm Vil 184
/e4(B!421/e4( E re.6GI!mbreG)
/e4(B!431/e4( E re.6G>irecci2"G)
/e4(B!441/e4( E re.6G/elJf!"!G)
+"d -b
)ri,a(e -b %!mma"dB((!"2F%lic06)
re.1Fi"dIe4( cri(eri!
/e4(B!421/e4( E re.6GI!mbreG)
/e4(B!431/e4( E re.6G>irecci2"G)
/e4(B!441/e4( E re.6G/elJf!"!G)
+"d -b
)ri,a(e -b NserF!rmFD"i(iali#e6)
-e( bd E &3e">a(abase6Gc8H/%ar3e(aHA.e"da1mdbG)
-e( re. E bd1&3e"<ec!rdse(6G-elec( K fr!m Ami.!sG7 db&3e">*"ase()
+"d -b
)ri,a(e -b NserF!rmF/ermi"a(e6)
bd1%l!se
+"d -b
- )reba el f"ci!"amie"(! de l! $e acabam!s de hacer * .raba el libr! de c:lcl! c!" el mism! "!mbre
Excel/9O
Modificar 7 Borrar registros
h) D"ser(a e" la Foa1 !(r! b!(2" de c!ma"d! de 3r!3iedad caption 3 Modi(icar ECo Borrar * c2di.!8
)ri,a(e -b %!mma"dB((!"6F%lic06)
NserF!rm41-h!O
+"d -b
- D"ser(a " "e,! f!rmlari! 6NserF!rm4) de c!"(e"id!8
- Accede al M'dulo del ?serNorm/ * escribe el
si.ie"(e c2di.!8
>im bd As >a(abase
>im re. As <ec!rdse(
>im cri(eri! As -(ri".
)ri,a(e -b %!mma"dB((!"1F%lic06)
VB Access 2000 Ferm Vil 185
cri(eri! E GI!mbreESG U /e4(B!411/e4( U GSG
re.1Fi"dFirs( cri(eri!
/e4(B!421/e4( E re.6GI!mbreG)
/e4(B!431/e4( E re.6G>irecci2"G)
/e4(B!441/e4( E re.6G/elJf!"!G)
+"d -b
)ri,a(e -b %!mma"dB((!"2F%lic06)
re.1Fi"dIe4( cri(eri!
/e4(B!421/e4( E re.6GI!mbreG)
/e4(B!431/e4( E re.6G>irecci2"G)
/e4(B!441/e4( E re.6G/elJf!"!G)
+"d -b
)ri,a(e -b %!mma"dB((!"3F%lic06)
re.1+di(
re.6GI!mbreG) E /e4(B!421/e4(
re.6G>irecci2"G) E /e4(B!431/e4(
re.6G/elJf!"!G) E /e4(B!441/e4(
re.1N3da(e
+"d -b
)ri,a(e -b %!mma"dB((!"4F%lic06)
re.1>ele(e
/e4(B!421/e4( E GG
/e4(B!431/e4( E GG
/e4(B!441/e4( E GG
+"d -b
)ri,a(e -b NserF!rmFD"i(iali#e6)
-e( bd E &3e">a(abase6Gc8H/%ar3e(aHA.e"da1mdbG)
-e( re. E bd1&3e"<ec!rdse(6G-elec( K fr!m Ami.!sG7 db&3e">*"ase()
+"d -b
)ri,a(e -b NserF!rmF/ermi"a(e6)
bd1%l!se
+"d -b
- )reba el f"ci!"amie"(! de l! $e acabam!s de hacer * .raba el libr! de c:lcl! c!" el mism! "!mbre
Excel/9O
Eistado de registros
i) D"ser(a e" la Foa1 !(r! b!(2" de c!ma"d! de 3r!3iedad caption 3 5istado de Amigos * c2di.!8
)ri,a(e -b %!mma"dB((!"7F%lic06)
>im i As D"(e.er
>im bd As >a(abase
>im r As <ec!rdse(
-e( bd E &3e">a(abase6Gc8H/%ar3e(aHA.e"da1mdbG)
-e( r E bd1&3e"<ec!rdse(6G-elec( K fr!m Ami.!sG7 db&3e">*"ase()
i E 3
>! Vhile I!( r1+&F
5!'a31%ells6i7 1)1Vale E r6GI!mbreG)
5!'a31%ells6i7 2)1Vale E r6G>irecci2"G)
5!'a31%ells6i7 3)1Vale E r6G/elJf!"!G)
r19!,eIe4(
VB Access 2000 Ferm Vil 186
i E i T 1
?!!3
bd1%l!se
+"d -b
- )reba el f"ci!"amie"(! de l! $e acabam!s de hacer * .raba el libr! de c:lcl! c!" el mism! "!mbre
Excel/9O
') >ebes (e"er la base de da(!s >eptunoOmdb7 c!3iada e" TuCarpeta
- %rea " "e,! libr! de c:lcl!1 -i(;a(e e" el +di(!r de Visal Basic *
9e"; 5erramie"(as
<efere"cias
Ac(i,a la refere"cia8 \Microso(t 0A+ )O9 +bect 5ibrarE]
AAce3(arB
- -i(;a(e e" la Foa1 del libr! * escribe8
- Accede al M'dulo de la Foa1 * escribe el c2di.! c!rres3!"die"(e al 3rimer b!(2" A/!das las /ablasB8
)ri,a(e -b %!mma"dB((!"1F%lic06)
>im i As B*(e
>im bd As >a(abase
>im (a As /able>ef
-e( bd E &3e">a(abase6Gc8H/%ar3e(aHIe3("!1mdbG)
i E 5
F!r +ach (a D" bd1/able>efs
%ells6i7 1)1Vale E (a1Iame
i E i T 1
Ie4(
+"d -b
- +'ec(a el 3r!cedimie"(! a"(eri!r8 &bser,a $e las (ablas c!rres3!"die"(es al sis(ema em3ie#a" 3!r las
le(ras8 MSEs
- Vel,e al M'dulo de la Foa1 * escribe el 3r!cedimie"(!8
)ri,a(e -b %!mma"dB((!"2F%lic06)
>im i As B*(e
>im bd As >a(abase
>im (a As /able>ef
-e( bd E &3e">a(abase6Gc8H/%ar3e(aHIe3("!1mdbG)
i E 5
F!r +ach (a D" bd1/able>efs
Df ?ef(6(a1Iame7 4) QR G9-*sG /he"
%ells6i7 2)1Vale E (a1Iame
i E i T 1
VB Access 2000 Ferm Vil 187
+"d Df
Ie4(
+"d -b
- +'ec(a el 3r!cedimie"(! a"(eri!r * .raba el libr! de c:lcl! c!m! Excel/7O
- Veam!s8
Nor Eac& tau 2n bdO;able0e(s
Sentencia 1
Sentencia 2
_
>ext
)ara cada "a de las (ablas de la base de da(!s bd7 se re3e(ir: la e'ecci2" de las se"(e"cias 17 27
:ells(i"2)OValue 3 tauO>ame
+scribir: e" la fila =i@ c!lm"a =2@ el "!mbre de la (abla
- -i(;a(e e" el M'dulo de la Foa1 * escribe el 3r!cedimie"(!8
)ri,a(e -b %!mma"dB((!"3F%lic06)
>im i As B*(e
>im bd As >a(abase
>im (a As /able>ef
>im cam As Field
-e( bd E &3e">a(abase6Gc8H/%ar3e(aHIe3("!1mdbG)
-e( (a E bd1/able>efs6%ells647 4)1Vale)
i E 5
F!r +ach cam D" (a1Fields
%ells6i7 3)1Vale E cam1Iame
i E i T 1
Ie4(
bd1%l!se
+"d -b
- +'ec(a el 3r!cedimie"(! a"(eri!r 3ara 3r!barl!7 es decir8
K +scribe e" la celda >47 "a de las (ablas $e (ie"es e" la c!lm"a B
K %lic e" A%am3!sB
- Craba el libr! de c:lcl! c!" el mism! "!mbre8 Excel/7O
- -i(;a(e e" el M'dulo de la Foa1 * escribe8
)ri,a(e -b %!mma"dB((!"4F%lic06)
>im i As B*(e7 ' As B*(e7 0 As B*(e
>im bd As >a(abase
>im r As <ec!rdse(
>im (a As /able>ef
>im cam As Field
-e( bd E &3e">a(abase6Gc8H/%ar3e(aHIe3("!1mdbG)
-e( r E bd1&3e"<ec!rdse(6G-elec( K fr!m G U 5!'a11%ells647 4)1Vale7 db&3e">*"ase()
-e( (a E bd1/able>efs65!'a11%ells647 4)1Vale)
5!'a21%ells617 1)1Vale E G?is(ad! de la (abla G U 5!'a11%ells647 4)1Vale
i E 1
F!r +ach cam D" (a1Fields
5!'a21%ells627 i)1Vale E cam1Iame
i E i T 1
Ie4(
0 E 3
r19!,eFirs(
>! Vhile I!( r1+&F
VB Access 2000 Ferm Vil 188
F!r ' E 1 /! i - 1
5!'a21%ells607 ')1Vale E r65!'a21%ells627 ')1Vale)
Ie4(
0 E 0 T 1
r19!,eIe4(
?!!3
bd1%l!se
+"d -b
- +'ec(a el 3r!cedimie"(! a"(eri!r7 3ara 3r!barl!7 es decir8
K +scribe e" >47 "a de las (ablas $e (ie"es e" la c!lm"a B
K %lic e" A?is(ad!B
K D",es(i.a el c!"(e"id! de la Foa2
- Craba el libr! de c:lcl! c!" el mism! "!mbre Excel/7O

You might also like