Professional Documents
Culture Documents
Página 1 de 49
Veamos algo de programación e iremos estructurando en ejemplos utilizando cada evento de los objetos.
Podemos decir que existen muchos lenguajes de programación y algunas formas conocidas de programar.
1- Secuencial (El lenguaje va en una dirección y solo ejecuta la sentencia siguiente si la anterior ya se ha ejecutado)
Ejemplo (C, Cobol, PlSql, Pascal)
2- Eventos (Es más un complemento entre aplicativo y lenguaje. El aplicativo crea los eventos y el lenguaje se ubica
en cada uno de ellos para que el usuario lo ejecute según el proceso lo requiera) Ejemplo MsAccess(Visual Basic),
Unify(Accell IDS), FormsDeveloper(PlSql), JavaDeveloper(Java)
3- Objetos (Los objetos <Elementos del mundo real> se crean para mejorar los lenguajes de programación
Secuencial, donde se hace una reutilización de código optimizando y acortando los programas) Ejemplo Java, C++,
C#, Java, J#
Existen muchas formas de crear programas y lenguajes, pero podríamos decir que las mencionadas son las más conocidas.
En este curso de programación utilizaremos Visual Basic como un lenguaje orientado a eventos con Access 2007.
Programar Eventos en Access 2007. Página 2 de 49
Visual Basic, es un lenguaje que podemos utilizar en muchos paquetes como (office, CorelDraw, AutoCad, Punto Net). Por
consiguiente su sintaxis puede variar con palabras reservadas de cada aplicativo, pero un gran porcentaje es igual.
Cuando trabajamos Access, encontramos 3 tipos de Módulos. Los módulos es el recipiente donde vamos a guardar el
código de Visual Basic.
Existen en Access. Modulo (Generales para ubicar variables y métodos públicos, de Clase que contienen los formularios)
4. Añadamos un botón.
Ignoremos el cuadro que aparece al crearlo dando cancelar. Ingresemos a las
propiedades del botón y coloquemos en el nombre cmdSaludo y en Titulo Saludo
5. Entremos a las propiedades del formulario en la pestaña Formato y definamos a No las siguientes opciones.
- Separadores de Registro
- Selectores de Registro
- Botones de desplazamiento
6. Pestaña Formato Propiedad Centrado automático en Sí y el Título Código Inicial
7. Coloquemos un cuadro alrededor y demos un relieve.
8. Vamos Ver Vista de formulario y debe verse de esta manera. Si presionamos el botón de Saludo no pasa nada;
entonces lo siguiente es crear el código para que cuando presionemos aparezca un mensaje que diga “!
Felicitaciones este es mi primer Código!”
Ya tenemos un formulario una serie de elementos que los acompañan <Etiqueta, botón y el mismo formulario>, cada
uno de ellos tienen propiedades y eventos que responden. Los eventos responden a métodos que están explícitos en
Access <al hacer clic, al hacer doble clic, al entrar, al salir etc>.
Ejemplo. Si damos clic sobre el botón cmdSaludo (Saludo) podemos aprovechar ese evento para hacer una acción
como por ejemplo cambiar el texto de la etiqueta LblSaludo. Hagámoslo entonces.
Vamos a vista de diseño y sobre el botón cmdSaludo ingresemos a sus propiedades pestaña Eventos al
hacer clic.
Demos clic en los tres puntos del lado derecho, seleccionamos generar código y damos aceptar
Programar Eventos en Access 2007. Página 4 de 49
El código que
acabamos de crear tiene una palabra llamada Me; esta se refiere al formulario actual
Ya hemos creado un pequeño código, ahora veamos que ventanas tenemos a disposición en el entorno de
trabajo.
Programar Eventos en Access 2007. Página 5 de 49
Ventana de
código. Donde
escribimos cada
método del
formulario.
Explorador de
proyecto.
Tenemos todos los
módulos
asociados a
nuestra aplicación
y al dar doble clic
sobre cualquiera
de ellos lo
veremos en la
ventana de
código.
Ventana de
Inmediato. Con
ella podemos
hacer
comprobaciones
del programa
(Depurar). Ejemplo imprimiendo un mensaje cuando el programa pasa por alguna rutina.
Locales. Exponer el valor de una variable de la cual no sabemos qué valor puede estar tomando y nos este
causando un posible error.
Cómo usar la ventana Inmediato. Hagamos un ejemplo con la ventana inmediato, escribiendo sobre ella.
Si hacemos una suma y utilizamos la palabra reservada Print.
Podemos hacer varias operaciones e incluso crear variables como a
y c que a su vez podemos llamar para hacer más operaciones; como
elevar a a la
potencia de c.
Si presionamos
el botón veremos que las variables que hemos creado en la ventana Inmediato se han inicializado. Cuando volvemos
Hablemos ahora de constantes y Variables. Las constantes son valores que no cambian Ejemplo.
PI = 3,1416, Iva = 16% y variable es algo que tiende a tener varios valores en el tiempo. Ejemplo
Edad, Peso, tiempo, Precio etc.
Programar Eventos en Access 2007. Página 6 de 49
Para trabajar en Access con variables y constantes, debemos hacerlo con dos palabras reservadas CONS y DIM
Ejemplo
Cons Pi As Double = 3.1416 Constante
Dim Edad as Currency Variable
Dim Nombre as String Variable
Dim Valor as Variant Variable
Ahora si vamos a la ventana Inmediato y colocamos Print pi y damos enter que pasaría ?. Si lo hacemos no sucede
nada debido a que existe algo llamado Ámbito ó alcance. Ambos términos se refieren a que Visual Basic puede conocer si
la variable existe, si retomamos a Pi y esta vez le agregamos la palabra reservada Public podemos tratar nuevamente con
la ventana Inmediato.
Que sucede con las variables que deseamos colocar públicas, estas tienen el mismo tratamiento, excepto que
reemplazamos la palabra Dim por Public
Si en la ventana inmediato intentáramos colocar un nuevo valor a
Pi, resultaría un error debido a que tiene un valor constante que se
puede cambiar solamente donde esta declarado.
Hagamos otro procedimiento pero esta vez que nos muestre el resultado de las variables en la ventana
inmediato.
Longitud de la circunferencia 2 * Pi * R
Área del circulo es igual Pi * R^2
Si damos colocamos en la ventana Inmediato
Circunferencia Enter
La función tiene dos parámetros y devuelve un valor del mismo tipo haciendo el ejemplo en la ventana inmediato nos
podemos dar cuenta.
Hagamos una pequeña calculadora que nos permita sumar dos cifras, para ello creemos otro formulario en vista de
diseño.
1- Crear el formulario
2- Insertar dos cuadros de texto.
3- Coloquemos como nombre al cuadro de texto 1 TxtSuma1 y al cuadro de texto 2 TxtSuma2 (Propiedades Todas
Nombre)
4- A las etiquetas de cada cuadro de texto coloquemos Operando 1 y Operando 2 respectivamente
5- Insertamos un botón y coloquemos como nombre cmdSumar y titulo Sumar
6- Es importante tener en cuenta que los nombres de las variables deben tener un sentido para que si alguien revisa
el código incluso uno mismo después de un tiempo, podamos entender que hace cada variable.
7- Coloquemos una etiqueta por encima de TxtSuma1 con texto de color rojo que diga Resultado y el nombre dentro
de las propiedades debe ser LblResultado
Programar Eventos en Access 2007. Página 8 de 49
Al momento de colocar un valor en operando 1 y operando 2, damos clic en el botón sumar y dentro de
resultado debe aparecer el cálculo.
Haga usted los botones de Multiplicación División, Resta, elevar a una potencia y limpiar resultado colocando
nuevamente la palabra resultado
Entendamos y trabajemos con Variables. Como hemos comentado las constantes se declaran y se asignan y
luego no es posible cambiar su contenido.
Ahora si hablamos de variables esta condición no se aplica. Las variables deben tener tres componentes
primordiales.
- Nombre
- Tipo
- Ambito
Qué condiciones debemos tener en cuenta para crear un nombre. Los nombre de las variables son
alfanuméricos pero:
No deben tener caracteres que sean de uso especial en Access, como (Paréntesis, Pipe |, Punto, Los
caracteres que se pueden utilizar como caracteres (+,/,-,<>,*)
Una variable debe empezar por un letra ó por el signo de subrayado Ejemplo.
A123463 _hola Rxyz
Una variable no puede tener espacios en blanco. Ejemplo Apellidos Nombre, debería ser
Apellidos_Nombre
Una variable puede terminar con un carácter de declaración de tipo %, &, ¡, #, @, $. Tenga en
cuenta que solo pueden ir al final de la variable. Ejemplo si crea una función Public Function
Nombre$ ()
No se pueden utilizar palabras reservadas del VBA. Por ejemplo String, Integer, For, If
El nombre d una variable puede tener hasta 255 caracteres.
Programar Eventos en Access 2007. Página 9 de 49
No se puede declarar dos variables con el mismo nombre dentro del mismo procedimiento o en
la cabecera de un mismo módulo.
Cuando vemos prefijo quiere decir que podemos iniciar nuestra variable con él para saber a qué tipo pertenece
la variable lngSalario. Si hablamos de Sufijo este se puede colocar para obviar el tipo al que pertenece. Ejemplo
Dim lngSalario& es equivalente a Dim lngSalario as Long.
Hagamos un ejemplo con una constante.
Números de coma flotante. Este tipo de dato admite valore enteros y decimales. Ejemplo
3.141615214111 2.71825182231 2856.1# 4.00!
Veamos cómo se clasifican.
Nombre Tamaño Negativos Positivos Sufijo Prefijo
Single 4 Bytes De -3,402823E38 a - De 1,401298E-45 a ! sng
1,401298E-45 3,402823E38
Double 8 Bytes De - De 4,94065645841247E- # dbl
1.79769313486231E308 324
a -4,94065645841247E-324 a 1,79769313486231E308
Currency 8 Bytes De - De 0 a @
922337203685477,5808 a 0 922337203685477,5808
Decimal 12 Bytes - 79.228.162.514.264.337.59 & dec
79.228.162.514.264.337.59 3.543.950.950.335
3.543.950.950.335
Tipo Date. El tipo para manejar datos de Fecha y hora. El tipo Date es un tipo Double al utilizar 8Bytes y se
puede usar como prefijo dat. Ejemplos.
Programar Eventos en Access 2007. Página 10 de 49
End Sub
Nota. Tengamos en cuenta que el formato de fecha utilizado es el americano Mes / Día / Año
Si vamos a colocar fechas a una variable todas estas son validas.
#1/20/2009 6:15:30#
#1/20/2009 6:15:30 PM#
#1/20/2009#
#1/20/09#
#01/20/09#
#18:15:30#
Con lo anterior para definir la variable a falso o verdadero se llenar con False ó 0 y True ó -1; Otra forma de
asignarle seria colocar una expresión que devuelva True ó False. Ejemplo blnDatoBoleano = 8 < 7, el resultado
sería Falso o viceversa blnDatoBoleano = 7 < 8, el resultado sería Verdadero.
Tipo String (Cadena). Especializado para guardar texto, el signo $ pesos actúa como sufijo para declarar en lugar
del tipo y String para determinar su tipo amanera de información. Ejemplo Dim strNombre As String
Dim strNombre$
Programar Eventos en Access 2007. Página 11 de 49
Para declarar una variable de longitud fija se utiliza el asterisco (*) y a continuación el número de caracteres
permitidos.
Dim strCuentaCorriente As String * 20 (De malo tiene que si usted no llena la variable con los caracteres que
establece el sistema los llena con espacios en blanco.)
Ejemplo strCuentaCorriente = “cta12582”. Al colocar 8 caracteres se llenaran 12 con espacios en blanco.
En teoría una cadena podría admitir hasta 2^31 2000 millones de caracteres.
Tipo Variant. Este tipo de dato puede tener prácticamente cualquier tipo de dato. El prefijo es var. Cuando
declaramos una variable o constante sin expresar el tipo, automáticamente queda de tipo Variant
Empty, Null, Cadena vacía. Existen unos valores que no son ni texto ni números. En los casos de tipo Variant si
no se define un valor, por defecto tiene vacio; con IsEmpty(Variable) se puede evaluar el contenido de la
variable, si está vacía devuelve True.
Declaraciones múltiples en una línea. Visual nos permite declarar en una línea varias variables a la vez.
Dim lngSalario As Long, strNombre As String.
Valores por defecto. Las variables se crean y toman un valor inicial antes que asignemos un valor sobre alguna
de ellas. Ejemplo.
Boolean toma el valor False ó 0
String Cadena vacia “”
Variant toma el valor Empty
Ambito ó alcance de una declaración. El alcance lo hemos visto al declarar una variable al decir Dim (visible
dentro del procedimiento ó en la cabecera es visible dentro de los procedimientos del módulo) , Public (Visible
desde cualquier parte de la aplicación), Global(Es muy similiar a Public, generalmente no se ve mucho, en su
lugar se utiliza Public), Private (Declarada en la cabecera es visible en el módulo, se puede decir que Dim y
Private son muy similares, solo que dentro de los procedimientos se utiliza Dim en lugar de Private) , Static,
Friend
Matrices ó Arrays. Es un conjunto de variables del mismo tipo, a las que se puede acceder mediante un índice,
que indica la posición de cada elemento.
Hagamos un ejemplo con los meses del año. Que podríamos hacer con los que sabemos hasta ahora
Public Mes01 As Integer, Mes02 As Integer
Public Mes03 As Integer, Mes04 As Integer
Public Mes05 As Integer, Mes06 As Integer
Public Mes07 As Integer, Mes08 As Integer
Public Mes09 As Integer, Mes10 As Integer
Public Mes11 As Integer, Mes12 As Integer
Programar Eventos en Access 2007. Página 12 de 49
Esta sería la manera de hacer una declaración con lo visto hasta el momento, pero si estamos hablando de
Arrays podemos optimizar el proceso. Primero declaremos una variable Arrays
End Sub
End Sub
Según estos tres casos como podemos acceder a cada mes del año.
1- En la primera declaración, lo hacemos llamando la variable que hemos creado; si necesitáramos el mes
de Julio invocaríamos entonces la variable Mes07
2- Para los dos casos siguientes colocamos la variable Mes(7) y el numero de índice dentro del Array = 7
para Julio 6 para Junio y así.
3- Creeríamos entonces que los dos últimos métodos son mejores y para este caso en particular de los
meses, la declaración final es mucho mas practica.
Veamos Arrays de varias dimensiones ó Matrices. Al hablar de varias dimensiones, estamos hablando de
manejar más de un índice.
Ejemplo. Debemos hacer un programa que maneje tres variables. Nos solicitan que guardemos el número de
personas que viven en un barrio cuya nomenclatura es la siguiente <Etapa, Manzana, Casa> Etapa = esta de la 1
a la 10, Manzana = de 0 a la 15 y Casa = de la 1 a la 20
Si creamos una Matriz que cobije este planteamiento lo debemos plantear así:
Dim ZonaVivienda (1 To 10, 0 To 15, 1 To 20) As Integer
Programar Eventos en Access 2007. Página 14 de 49
Si en la Etapa 2 Manzana 5 Casa 9 la habitan 5 personas, debemos llenar nuestra variable de la siguiente
manera. ZonaVivienda(2,5,9) = 5
Registros. Estructuras de variables definidas por el usuario. Cuando decimos definido por el usuario, queremos
decir que nosotros lo hacemos con nuestros datos. Ejemplo queremos tener un registro de los datos personales
del cliente, debemos entonces crear un registro con estos datos y para ello crearemos las variables necesarias
Public strPrimerNomb As String
Public strSegundoNomb As String
Public strPrimerApell As String
Public strSegundoApell As String
Public datFechaNaci As Date
Public strTelefono As String
Public intEdad As Integer
De esta manera tendríamos 7 variables para llenar los datos necesarios del cliente. La estructura nos dice que
podemos crear una variable que cobije todas bajo un mismo nombre y comportarse como un nuevo tipo de
dato.
Debug.print “Cliente: Nombre complete “ & cliente.PrimerNomb & “ “ & cliente.SegundoNomb & “ “ &
Cliente.PrimerApell & “ “ & Cliente.SegundoApell
Debug.print “Nacio el “ & Cliente.FechaNaci
Debug.print “Edad “ & Cliente.edad
Debug.print “ Telefono “ & Cliente.Telefono
‘Utilicemos la segunda variable Vendedor y hagamos el mismo llenado pero esta vez utilizando otra ayuda de
visual como es With, el cual nos obvia colocar el nombre de la variable hasta encontrar un End With
With Vendedor
. PrimerNomb = “Pedro”
. SegundoNomb = “Pablo”
. PrimerApell = “Jaramillo”
. SegundoApell = “Perez”
.FechaNaci = #01/28/1975#
.Edad = 34
.Telefono = 73574226
Debug.print “Vendedor : Nombre completo “ & .PrimerNomb & “ “ & .SegundoNomb & “ “ &
.PrimerApell & “ “ & .SegundoApell
Debug.print “Nacio el “ & .FechaNaci
Debug.print “Edad “ & .edad
Debug.print “ Telefono “ & .Telefono
End With
End sub
Estructuras de Control. Son segmentos de código que permiten tomar decisiones en base a unos datos de
entrada ó repetir procesos (bucles) mientras se presenten condiciones determinadas.
- Estructuras de decisión.
If ….. then
If ….. tnen …… Else
If ….. tnen …… Elseif
Select ..... Case
- Estructuras de Bucle.
For ... Next
For Each .. In .. Next
While ..... Wend
Do .... Loop
Veamos cada una de ellas. If. Permite ejecutar un grupo de instrucciones de código, en función de
que el valor de una expresión sea Cierta (True) ó Falsa (False)
Programar Eventos en Access 2007. Página 16 de 49
Ejemplo.
If Numero > 0 then
MsgBox “Valor Mayor a cero “
End If
El If ….. Then…… Else, nos permite asumir otra opción en caso que la primera condición sea falsa
If Numero > 0 then
Msgbox “Valor Mayor a Cero “
Else
MsgBox “No hay valor que reportar “
End if
El If ….. then …… Elseif , no ayuda a evaluar varias opciones ciertas si fuera del caso. Ejemplo.
If Numero = 80 then MsgBox “ Ya pagaron y completo “
Elseif Numero > 80 then MsgBox “ Aprobaron el aumento? “
Elseif Numero >= 40 then MsgBox “ Que paso ? y el resto ! “
Elseif Numero > 0 And Numero < 40 then MsgBox “ Y entonces ahora que hacemos ? “
Else MsgBox “ Vaya pregunte “
End If
Ahora Select Case, permite semejar If anidados para dejar el código un tanto más elegante y legible.
Select Case nuResultado ‘El valor que tenga nuResultado es evaluado por cada Case.
Case 0
MsgBox " No hubo cálculo alguno”
Case Is < 10, Is > 0
MsgBox " Se hizo un Cálculo”
Case 11 To 100
MsgBox " Esta dentro del rango”
Case 120, 130, 140
MsgBox " Es 120 ó 130 ó 140”
Case Else
MsgBox "Nada que Evaluar"
End Select
Podemos anidar los For ... Next , colocar uno dentro de los otros. Para ver cómo trabaja, hagamos un
ejemplo.
'El primer For hace un recorrido e ingresa al segundo que hace 10 ciclos
'Tengamos en cuenta que <n> va de 1 en 1 hasta llegar hasta 10, pero cuando <n> es igual a 1
'<m> va de 1 a 10, cuando <n> es igual a 2 <m> va de 1 a 10 y asi
For n = 1 To 10
Debug.Print "---------------"
For m = 1 To 10
Debug.Print n & " x " & m & " = " & n * m
Next m
Next n
End Sub
' Si cada 4 años es biciesto, este ejemplo inicia desde 1980 hasta el 2012 donde se detiene
Public Sub Biciesto()
Dim intAño As Integer
intAño = 1980
While intAño <= 2012
Debug.Print intAño
intAño = intAño + 4
Wend
End Sub
Se utiliza while ... Wend para leer archives, veamos un ejemplo y creemos un archivo datos.txt en una ruta
específica para utilizar
intArchivo = FreeFile
Programar Eventos en Access 2007. Página 19 de 49
Open strArchivo For Input As #intArchivo ‘Lleva el indice de apertura del archivo a la variable
String strArchivo
While Not EOF(intArchivo) ‘Mientras no llegue al final del archivo haga lo siguiente
Line Input #intArchivo, strLinea ‘Pasa el valor que tiene #intArchivo a strLinea
Debug.Print strLinea
Wend
End Sub
Creemos el archivo.
Con el nombre datos.txt y hagamoslo en c:\. Dentro del archivo coloquemos este contenido.
Hola como le fue en estas vacaciones
Muy bien porque todos los míos gozan de bienestar
Doy gracias a Dios por esto y espero que la vida nos siga dando bendiciones
Pero a un mejor que ojala siempre las merezcamos
Para ejecutar el procedimiento, lo hacemos con esta sintaxis.
Muestraarchivo("c:\datos.txt")
Ahora Do… Loop Permite hacer algo adicional a While Wend y es que podemos salir antes que
temine el ciclo. Podemos ver dos formas de utilización.
Do
Instrucciones
Exit Do
Instrucciones
Loop While | Until Condición „Condición al final.
Case Is < 1
Debug.Print " Número fuera de Rango”
Case 1, 2, 3
Debug.Print intPrimo & " Es Primo”
Case Else
intNumero = 2
Do While intNumero <= intPrimo
If intPrimo Mod intNumero = 0 And intNumero <> intPrimo Then
Debug.Print intPrimo & " No es primo " & intPrimo Mod intNumero
Exit Sub
ElseIf intPrimo Mod intNumero = 0 Then
Debug.Print intPrimo & " Es Primo " & intPrimo Mod intNumero
Exit Sub
End If
intNumero = intNumero + 1
Loop
End Select
End Sub
Nota: Para tener en cuenta en el código anterior es intPrimo Mod intNumero, está
tomando el valor del residuo al realizar la división Ejemplo.
7 Mod 3 = 1 porque Mod toma la parte entera y deja la parte que daría decimal como residuo. Si
hacemos esta misma división de forma normal, sería 3,5
Toda función devuelve un valor, en este caso la sintaxis para hacerlo dentro
FnumeroPrimo es colocar FnumeroPrimo = False o True.
Debemos crear una fracción de código que permita hacer el proceso de verificación
en cmdPrimo, en el evento de hacer clic
Debemos cambiar el mensaje dentro del botón a medida que vamos evaluando otros
números
Gestión de errores. Cuando se trabaja en programación, debemos gestionar los errores que se
presentan en el aplicativo, veamos cómo hacerlo.
Si hemos olvidado declarar alguna variable y ejecutamos el código, podemos percibir el error. Estos
tipos de errores son muy comunes, pero son errores como este último a los que más debemos prestar
atención porque se dan en tiempo de ejecución y cada vez que aparecen detienen el proceso que se
esté llevando a cabo y no tiene muy buena presentación si en lugar de aparecer un texto ordenado y
predefinido se ve un error enviado por Access.
Los errores que se dan en tiempo de ejecución, son los que el usuario final se encontrará, resultado de
valores (datos) inesperados que no están siendo evaluados dentro del código. Ejemplos. División por
cero, Valore nullos (Vacios), diferencias de tipo de datos cuando queremos asignar el resultado de una
variable a otra ó abrir un archivo que no existe.
Programar Eventos en Access 2007. Página 24 de 49
--Sintaxis general.
DoCmd.Close
Exit_Salir:
Exit Sub
Err_Salir:
MsgBox Err.Description
Resume Exit_Salir
End Sub
Hagamos un ejemplo con Fprimo. Cuando averiguamos si un número es primo, estamos hablando
exclusivamente de números, por ende si digitáramos una letra el sistema nos debe generar un error de
proceso. Si digitamos la letra <a> y damos clic podemos ver un error similar al que presenta la gráfica.
La pantalla nos presentaría el error; esto no es bueno para el usuario final ver este tipo de
inconsistencias, por ende se debe capturar y generar un mensaje aclaratorio que le permita continuar y
que no detenga el accionar del aplicativo.
Actualmente el código programado trabaja de la siguiente manera para el botón cmdPrimo en el evento
al hacer clic.
If IsNull(Me.txtNumeroPrimo) Then 'Con esta fracción de código, está evaluando que haya un valor digitado para verificar
si es primo o no
Programar Eventos en Access 2007. Página 25 de 49
Capturamos el error que se da cuando digitamos una letra donde debe ir un número. Se debe hacer
de esta manera.
If IsNull(Me.txtNumeroPrimo) Then 'Con esta fracción de código, está evaluando que haya un valor digitado para
verificar si es primo o no
MsgBox "No hay valor alguno para evaluar .. "
ElseIf FnumeroPrimo(CInt(Me.txtNumeroPrimo)) Then ' En caso de existir un valor a evaluar se envía a la función
para que retorne Falso o verdadero y colocar en la propiedad caption del botón un mensaje
Me.cmdPrimo.Caption = " Es número Primo”
Else
Me.cmdPrimo.Caption = " No es número Primo”
End If
Que_Sigue:
Exit Sub
OjoError:
MsgBox "Error No " & Err.Number & " --> " & Err.Description & " --> " & Err.Source, vbCritical
+ vbOKOnly, "Verificar Datos”
Resume Que_Sigue
End Sub
Explicación.
Para capturar el error se utiliza la sintaxis que está en color naranja y subrayado; hay cosas allí que
son de nuestra invención como (OjoError, Que_Sigue, Verificar Datos), estas frases las podemos
colocar a nuestro gusto; las demás son palabras claves y utilidades del lenguaje
Utilizamos un elemento básico dentro de la captura del error <Error>, este elemento nos va a permitir
conocer:
- El número de error <Err.Number>,
- Descripción del error <Err.Description>
- Nombre de la aplicación donde se genera el error. <Err.Source>
Programar Eventos en Access 2007. Página 26 de 49
Hay otras palabras reservadas dentro del Msgbox (Colocar mensajes para mostrar al usuario)
vbCritical + vbOKOnly, el primero de ellos coloca el signo y el segundo nos adiciona al cuadro
esta etiqueta podemos colocar otro camino a seguir <procedimiento o función> o como vemos acá
solo nos salimos de la función para que el usuario pueda intentar nuevamente hacer su trabajo,
podríamos colocar Next para que el código continúe con la siguiente línea, pero debe tener coherencia
de tal manera no incurrir en una inconsistencia mayor.
Como generar nuestros propios errores. Con los cuales deseamos hacer notar al usuario que hace
falta un paso para continuar con el proceso.
Supongamos que solo vamos aceptar valores para evaluar como número primo que terminen en 1 y
cualquier otro nos generará error. Es necesario en este caso que coloquemos un generador de errores
que obligue a colocar este tipo de valores y no permita al usuario continuar hasta que haga lo que se
le pide. En este caso debemos hacer una validación del dato que determine si el número termina en 1.
Vamos a colocar dentro de ella un llamado a la siguiente función que nos permitirá generar un error,
no solamente acá si no de ahora en adelante en cualquier parte del código; basta pasarle los
parámetros necesarios.
End Function
La función utiliza Err.Raise intNumError, " ErrorProceso ", strDescripcion. Si vemos bien está
haciendo uso de los dos parámetros que están declarados dentro de los paréntesis cuando se declara
la función ErrorProceso.
Al crear la función que nos permite ahora generar nuestros propios errores, basta con hacer el
llamado dentro de la función original que determina si un número es primo o no.
End If
End Function
Podemos ver lo que hemos adicionado está en color Rojo y por demás subrayado. Inicialmente se
comprueba si el valor digitado tiene un uno (1) al final y de ser así continua con el proceso de lo
contrario, la función ErrorProceso es llamada llenando los dos parámetros con los cuales ha sido
declarada y necesario para que haga su trabajo interrumpiendo y aclarando al usuario que el valor
digitado no termina en uno (1).
Nota. El número de código de error que podemos utilizar, va desde el 513 hasta el 65535
Como colocar un botón en Access. El ejemplo lo haremos para cerrar el formulario Fprimo.
(Formulario de números primos)
Cuando hagamos el proceso, veremos que sale un asistente con los botones, seleccionamos
operaciones con formularios; Dentro de las opciones tomemos Cerrar Formulario y damos siguiente.
Programar Eventos en Access 2007. Página 30 de 49
Para este caso elegiremos la imagen por default (Salida), si desea elegir otra puede buscar por
examinar la que usted desee ó marcar texto y colocar algo sobre el botón que lo identifique.
Damos un nombre al botón <cmdSalir>; por último damos Finalizar y debemos ver algo como esto.
Formato de numeros
Format(1044812, "#,###") 1,044,812
Format(1044812.08,”#.###.##”) 1,044,812.08
Format(1044812, "General Number") 1044812
Format(1044812, "Standard") 1,044,812.00
3- Operadores.
/ División, de dos valores Numerador y / Denominador, devuelve el valor aproximado de
cuantas veces esta,
7 / 3 2.333333333
Mod División, como el anterior toma el numerador y Mod el denominador pero esta arroja
el residuo y saca exactamente el número de veces que esta el denominador.
7 Mod 3 1
Operadores de comparación
Programar Eventos en Access 2007. Página 33 de 49
Ejemplos.
Hagamos parte de una aplicación que maneje los clientes y nos permita ver varios eventos utilizando
el lenguaje de programación.
- 1 Debemos haber creado el formulario con los campos necesarios del cliente y sus respectivas
relaciones.
Y es sobre esa tabla con la cual se hace el formulario y sobre el programaremos varios de sus eventos.
Programar Eventos en Access 2007. Página 34 de 49
Todo proceso debe llevar un diagrama que le permita al programador crear la aplicación acorde a un
análisis previo. Veamos cómo se vería el proceso para crear un nuevo cliente.
Para implementar este proceso, en primera instancia debemos crear el formulario con el cual vamos
ingresar los datos.
El código en primera instancia el código nos lleva al campo idCliente y luego llena con valores por
defecto varios campos del formulario, en la parte final vemos
Forms![FCliente]![NuevoRg].Enabled = False, que busca dejar el botón nuevo deshabilitado
mientras se ingresa un nuevo registro y no permita ingresar uno nuevo cuando ya se está en el
proceso.
Para los botones restantes solo veremos que en el evento clic colocará la macro necesaria para hacer
El Orden de tabulación es importante tenerlo en cuenta, por que determina si damos enter en campo
este a donde nos lleva. El orden de desplazamiento lo determina la posición de tabulación. Los
botones no deben tener punto de tabulación, la gráfica nos muestra cómo colocarla o como quitarla.
Programar Eventos en Access 2007. Página 36 de 49
Forms![FCliente]![idRepresen].BackColor = "13619175"
End Sub
Tome cualquier campo del formulario y busque la propiedad recibir o perder el enfoque y sobre
el código generado de forma automática por el aplicativo pegue este.
A nivel del formulario verifiquemos como cada cambio, ingreso de datos nos preguntara si
deseamos actualizarlo o ignorarlo. Copiemos Private Sub Form_BeforeUpdate(Cancel As
Integer) y coloquemos en la posición que muestra la grafica en el evento <Antes de Actualizar>
Programar Eventos en Access 2007. Página 38 de 49
De esta manera cualquier cambio que hagamos se preguntara si deseamos actualizarlo al momento
de intentar cambiar a otro registro o salir del formulario.
A nivel de campo coloquemos el siguiente código en el evento <al Salir> de idCliente. El código
está evaluando al momento de salir del campo idCliente si estamos ingresando un nuevo
registro, esto se hace para saber que no está ingresando un número de identificación que ya
existe. Si el registro efectivamente ya está dentro de la base de datos, se muestra un mensaje
<El Cliente ya Existe>.
y deshace el proceso Me.Undo, y se define activa el botón de nuevo
registro.
Forms![FCliente]![NuevoRg].Enabled = True
Programar Eventos en Access 2007. Página 39 de 49
También en el campo idRepresen para el evento <al Salir> debemos evaluar si existe un
representante con esta identificación, de no existir en la base de datos, el código llamará el
formulario FRepresentante.
DAO (Objeto de acceso a datos). DAO dentro del
código es de suma importancia para crear <Select> ó
consulta de registros en la base de datos; DAO nos
va a permitir crear dos variables importantes como
son: Una que guarde nuestra base de datos actual
<dbs> y la otra donde vamos a guardar el conjunto de
registros a consultar <rsSQL>.
Otra punto a tener en cuenta es <DoCmd>, que ejecuta varios comandos propios del lenguaje.
DoCmd lo podemos ver ejecutando dos comandos hasta ahora: Primero ejecuta
<DoCmd.GotControl> que básicamente nos permite llevar el cursor a un campo en particular
del formulario, y lo vemos ahora haciendo la apertura del formulario <FRepresentante>.
<DoCmd.OpenForm "Frepresentante">
If rsSQL.EOF Then
Dim Respuesta As Integer, MiCadena
Respuesta = MsgBox("Representante no Existe ..! Desea Crearlo ? ", vbYesNo + vbInformation + vbDefaultButton1,
"DECIDA POR FAVOR ")
If Respuesta = vbYes Then ' El usuario eligió el botón Sí.
DoCmd.OpenForm "Frepresentante", , ,
"Forms![Frepresentante]![idRepresen]=Forms![FCliente]![idRepresen]", acFormAdd
Forms![Frepresentante]![idRepresen] = Forms![FCliente]![idRepresen]
End If
End If
rsSQL.Close
Set rsSQL = Nothing
Set dbs = Nothing
End Sub
2 – Veamos ahora el formulario Representante que es más simple pero toma código ya utilizado, solo
que modificado a los campos del nuevo formulario.
Pero como debe trabajar el proceso antes de cualquier cosa.
Para implementar este proceso, en primera instancia debemos crear el formulario con el cual vamos
ingresar los datos.
Programar Eventos en Access 2007. Página 41 de 49
En primera instancia colocaremos el código que hace seguimiento al cursor dentro del
formulario.
Por último veamos como verificamos que cualquier registro que estamos creando no se
encuentre ya dentro de la base de datos.
4- En aplicaciones bien desarrolladas, debe haber un medio que me permita hacer cambios y se deje
una huella del procedimiento. Ejemplo. Al momento de crear un cliente hubo un error en la digitación
de los datos, se hace necesario colocar o corregir por el nombre real de la persona afectada en la
base de datos.
Para este caso se hace el procedimiento que permita llevar un consecutivo de los cambios hechos y
en la misma pantalla hacer el cambio respectivo.
Formulario de
Cabecera
Formulario
Detalle
Coloquemos el código para hacer seguimiento del cursor, en el formulario de cabecera. Para
hacerlo, busquemos el campo <idMovimiento> y en el evento <al recibir el enfoque> y
peguemos este fragmento de código.
Programar Eventos en Access 2007. Página 45 de 49
Forms![Factualizacli]![strEstadoac] = "AC"
Forms![Factualizacli]![cmdNuevorg].Enabled = False
End Sub
Esta parte del código va en primera instancia y coloca el aplicativo en ingresar un nuevo registro,
y posteriormente llenar variables que son conocidas e irrelevantes como el estado y la
descripción. Al final como estamos ingresando un registro deshabilitamos el botón para cerrar el
proceso antes de crear otro movimiento.
End Select
End If
End If
End Sub
Podemos ver que estamos utilizando un <Select Case>, que evalúa el tipo de cambio que se va
hacer y eso permite guardar el campo actual antes de generar un cambio en los datos.
En el formulario Detalle busquemos un campo para colocar el código que nos muestra la
ubicación actual del cursor en el evento <Al recibir el Enfoque>.
Y por último verificar los cambios que se den dentro del formulario Detalle