eventos y programas access 2007

49
Programar Eventos en Access 2007. Página 1 de 49 Online Los formularios y cada uno de sus componentes tienen adheridos varias propiedades que podemos visualizar de dos maneras. Dando doble clic sobre el elemento en vista de diseño Utilizando el icono de propiedades al momento de tener señalado el elemento. Las propiedades manejan en la gran mayoría 5 pestañas <Formato, Datos, Eventos, Otras, Todas>. Cada una de ellas atiende una parte en particular del elemento, y son agrupadas en la pestaña <Todas>. Formato. Se ocupa de la presentación del elementos como (Si es posible maximizar ó Minimizar), Estilo de los bordes, distribución de la imagen si existe alguna, Color del fondo, Color del texto. Sii es un formulario nos permite definir la forma de presentación etc. Cuando usted busque hacer un cambio en la presentación lo hacemos por medio de la pestaña formulario. Datos. Es muy variable, pero evalúa como se debe comportar los datos. Si sobre el elemento se agrega información la podemos condicionar como: (Bloquear edición, Texto de validación, Valor predeterminado) Eventos. Una de las partes más importantes de las propiedades. Los eventos se comportan de forma transparente mientras no se adicione código; es mediante Visual basic, donde logramos que el formulario y sus campos hagan las cosas que queremos. Otras. Cosas anexas, seria mirar o involucrarlas dentro de los ejemplos. 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.

Upload: trabajopro10

Post on 19-Jun-2015

4.868 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 1 de 49

Online Los formularios y cada uno de sus componentes

tienen adheridos varias propiedades que podemos

visualizar de dos maneras.

Dando doble clic sobre el elemento en vista de

diseño

Utilizando el icono de

propiedades al momento de tener

señalado el elemento.

Las propiedades manejan en la gran mayoría 5 pestañas

<Formato, Datos, Eventos, Otras, Todas>. Cada una de

ellas atiende una parte en particular del elemento, y

son agrupadas en la pestaña <Todas>.

Formato. Se ocupa de la presentación del elementos

como (Si es posible maximizar ó Minimizar), Estilo de

los bordes, distribución de la imagen si existe alguna,

Color del fondo, Color del texto. Sii es un formulario nos

permite definir la forma de presentación etc. Cuando

usted busque hacer un cambio en la presentación lo

hacemos por medio de la pestaña formulario.

Datos. Es muy variable, pero evalúa como se debe

comportar los datos. Si sobre el elemento se agrega

información la podemos condicionar como: (Bloquear

edición, Texto de validación, Valor predeterminado)

Eventos. Una de las partes más importantes de las propiedades. Los eventos se comportan de forma transparente

mientras no se adicione código; es mediante Visual basic, donde logramos que el formulario y sus campos hagan

las cosas que queremos.

Otras. Cosas anexas, seria mirar o involucrarlas dentro de los ejemplos.

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.

Page 2: Eventos Y Programas 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)

Iniciemos creando un nuevo Módulo; Para hagamos lo siguiente.

Herramientas de Base de datos.

Visual Basic

El modulo esta vacio excepto por una ó dos líneas al inicio

Y una en este caso.

Debemos tener en cuenta que falta una segunda línea conocida como

<Option Explicit>; En que afecta la ausencia de esta línea adicional. Cuando

no aparece declarada el aplicativo no obliga a que las variables que utilicemos estén declaradas (Nombre y tipo de dato) .

Si al crear el modulo no está dentro de las declaraciones, vamos a:

Herramientas

Opciones

Requerir declaración de Variables.

Al cerramos el modulo que acabamos de crear y creamos

uno nuevo, nos debe aparecer Option Explicit

1. Cerremos el módulo y creemos un formulario. Este

formulario lo crearemos en: Crear Diseño del

Formulario. Guardémoslo como saludo.

2. Añadamos una etiqueta con la palabra saludo.

3. Vamos a la hoja de propiedades de la etiqueta y -

coloca

mos en

Page 3: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 3 de 49

el nombre LblSaludo, desde la pestaña <Todas>

- En la pestaña Formato vamos a Color del texto y colocamos Rojo, tamaño de la fuente 24 y alineación del

texto <centro>

-

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

Page 4: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 4 de 49

Se abre un modulo de formulario y en el dos partes importante

1- Option Explicit <Declarar cualquier variable que sea declarada>

2- El encabezado y final del procedimiento correspondiente al evento donde nos hemos ubicado.

El código que vamos a crear se debe hacer entre Private Sub NombreProcedimiento y End sub. Hagamos dos

cosas.

Vamos a colocar en la etiqueta LblSaludo un texto que afecte la propiedad Titulo, <Caption> “!

Felicitaciones este es mi primer Código!”

En la propiedad Titulo, <caption> del formulario, un texto que diga Formulario Inicial.

Como la letra que tenemos es demasiado grande, entonces coloquemos un tamaño de letra menor

con la propiedad <Fontsize>

El código que

acabamos de crear tiene una palabra llamada Me; esta se refiere al formulario actual

Esta sería la manera de identificar el formulario de forma específica.

Ya hemos creado un pequeño código, ahora veamos que ventanas tenemos a disposición en el entorno de

trabajo.

Page 5: Eventos Y Programas Access 2007

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

hacer la operación de a a la potencia de c, el valor es 1.

Si ahora colocáramos la siguiente expresión, no nos daría 6 si no 24 ya que como ambos valores están entre comillas el

aplicativo lo asume como texto y el operador mas (+) los concatena.

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.

Page 6: Eventos Y Programas Access 2007

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.

Han surgido otros tipos de valores cuando hemos visto como

declarar variables. Currency (Moneda), String (texto) , Variant (Este tipo de variable puede recibir casi cualquier cosa

Texto, Numeros, boolean

Tenemos bases ya para crear procedimientos y funciones.

Los procedimientos y las funciones son un conjunto de instrucciones que realizan una tarea determinada. El

procedimiento está encerrado entre Sub y End Sub, las funciones entre Function y End Function. Ambos los

procedimientos y las funciones pueden utilizar parámetros que utilizan internamente y que se pasan para una labor

especifica.

Page 7: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 7 de 49

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

Nos mostrará estos valores.

Ahora hagamos el mismo ejemplo pero con parámetros.

Al momento de llamarlo en la ventana

Inmediato debemos agregar el valor del

parámetro.

Esto con respecto a los parámetros pero también podemos hacer

funciones. Las funciones se destacan por que siempre devuelven un valor al

momento de terminar su ejecución

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

Page 8: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 8 de 49

8- Sobre el botón cmdSumar hagamos un método con el evento Click

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.

Page 9: Eventos Y Programas Access 2007

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.

Tipo de datos. Que tipos de datos podemos manejar?

- Numéricos

- Booleanos

- Fecha/Hora

- Texto

- Variant

- Registros definidos por el usuario

- De objeto

Veamos cada uno de ellos. Para el caso de los numéricos, existen dos familias (Número entero y de coma

flotante)

Enteros.

Nombre del tipo

Tamaño Valor Inferior Valor Superior

Sufijo Prefijo

Byte 1 Byte 0 255 Byt

Integer 2 Bytes -32.768 32.767 % Int

Long 4 Bytes -2.147.483.648

2.147.483.648 & Lng

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.

Public Const intMesesAño As Integer = 12 Equivale a Public Const ingMesesAño% = 12

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 -1,401298E-45

De 1,401298E-45 a 3,402823E38

! sng

Double 8 Bytes De -1.79769313486231E308 a -4,94065645841247E-324

De 4,94065645841247E-324 a 1,79769313486231E308

# dbl

Currency 8 Bytes De -922337203685477,5808 a 0

De 0 a 922337203685477,5808

@

Decimal 12 Bytes -79.228.162.514.264.337.593.543.950.950.335

79.228.162.514.264.337.593.543.950.950.335

& dec

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.

Page 10: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 10 de 49

Public Sub fechaAhora()

Dim datFechaActual As Date

Dim datSemanaProxima As Date

Dim datAyer As Date

Dim datMañana As Date

datFechaActual = #1/20/2009 6:15:30 PM#

datSemanaProxima = datFechaActual + 7

datAyer = datFechaActual - 1

datMañana = datFechaActual + 1

Debug.Print "tipo date ", CDbl(datFechaActual)

Debug.Print "Ahora ", datFechaActual

Debug.Print "Prox. Semana ", datSemanaProxima

Debug.Print "Ayer ", datAyer

Debug.Print "Mañana ", datMañana

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#

Tipo Boolean (boleano).

El tipo boleano es apropiado para evaluar datos de Si /No (True, False).

El prefijo para un boleano es bln. Ejemplo los siguientes valores se pueden utilizar sin problema alguno.

blnDatoBoleano = True

blnDatoBoleano = False

blnDatoBoleano = -1 Verdadero

blnDatoBoleano = 0 Falso

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$

Page 11: Eventos Y Programas Access 2007

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

Page 12: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 12 de 49

Public Sub CargarMeses ()

Mes01 = 31

Mes02 = 28

Mes03 = 31

Mes04 = 30

Mes05 = 31

Mes06 = 30

Mes07 = 31

Mes08 = 31

Mes09 = 30

Mes10 = 31

Mes11 = 30

Mes12 = 31

End Sub

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

Public Mes(12) As integer -- Se optimiza la declaración de variables

Public Sub CargarMeses ()

Mes(1) = 31

Mes(2) = 28

Mes(3) = 31

Mes(4) = 30

Mes(5) = 31

Mes(6) = 30

Mes(7) = 31

Mes)8) = 31

Mes(9) = 30

Mes(10) = 31

Mes(11) = 30

Mes(12) = 31

End Sub

Existe una forma más directa para hacer el mismo proceso

Dim Mes () As Variant

Public Sub CargarMeses ()

Mes = Array (0,31,28,31,30,31,30, _

31, 31, 30, 31, 30,31)

Comentario [FGH1]: Por facilidad en la comprensión del código se colocan los valores en dos líneas; para hacerlo al finalizar cada una de ella colocamos un guion al piso _ Si vemos existe un cero al inicio del Array, esto debido a que el índice de inicial de un array es Cero y cuando llamemos el mes de Enero inicie en el índice 1

Page 13: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 13 de 49

End Sub

Si colocamos este ejemplo dentro de un modulo general podemos entender mejor.

Public Sub CargarMeses()

Dim Mes() As Variant

Mes = Array(0, 31, 28, 31, 30, 31, 30, _

31, 31, 30, 31, 30, 31)

Debug.Print "Enero tiene " & Mes(1) & " Días"

Debug.Print "Febrero tiene " & Mes(2) & " Días"

Debug.Print "Marzo tiene " & Mes(3) & " Días"

Debug.Print "Abril tiene " & Mes(4) & " Días"

Debug.Print "Mayo tiene " & Mes(5) & " Días"

Debug.Print "Junio tiene " & Mes(6) & " Días"

Debug.Print "Julio tiene " & Mes(7) & " Días"

Debug.Print "Agosto tiene " & Mes(8) & " Días"

Debug.Print "Septiembre tiene " & Mes(9) & " Días"

Debug.Print "Octubre tiene " & Mes(10) & " Días"

Debug.Print "Noviembre tiene " & Mes(11) & " Días"

Debug.Print "Diciembre tiene " & Mes(12) & " Días"

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

Page 14: Eventos Y Programas Access 2007

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.

Public Type Persona

PrimerNomb As String

SegundoNomb As String

PrimerApell As String

SegundoApell As String

FechaNaci As Date

Telefono As String

Edad As Integer

End Type

‘ Type y End Type : Nos permiten crear estructura y deben ser escritas en la cabecera del modulo

Public Sub PersonaEstructura ()

Dim Cliente As Persona

Dim Vendedor As Persona

Cliente. PrimerNomb = “Jhon”

Cliente. SegundoNomb = “Mario”

Cliente. PrimerApell = “Gimenez”

Cliente. SegundoApell = “Gonzalez”

Cliente.FechaNaci = #01/28/1980#

Cliente.Edad = 29

Cliente.Telefono = 74511282

‘Imprimamos el valor del registro

Page 15: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 15 de 49

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)

Page 16: Eventos Y Programas Access 2007

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

Bucles. For … Next.

For contador = principio To fin [Step increment]

Instrucciones

[ Exit For]

Next Contador Para entender esta estructura hagamos un ejemplo con el valor factorial.

Page 17: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 17 de 49

Public Function Factorial (ByVal intVal As Integer) As Double

Dim intVal1 As Integer

Dim ingResul As Double

ingResul = 1

For intVal1 = 1 To intVal

ingResul = ingResul * intVal1

Next intVal1

Factorial = ingResul

ingResul = 0

End Function

Mejoremos el diseño con un Select Case.

Public Function Factorial (ByVal intVal As Integer) As Double

Dim intVal1 As Integer

Select Case intVal

Case Is < 0 MsgBox " El valor debe ser mayor a cero ", vbCritical + vbOKOnly, " Error de Factorial”

Exit Function

Case 0

Factorial = 1

Exit Function

Case Else

Factorial = 1

For intVal1 = 1 To intVal

Factorial = Factorial * intVal1

Next intVal1

Case Else Msgox “No es un valor para sacar Factorial ", vbCritical + vbOKOnly End Select

End Function

Podemos anidar los For ... Next , colocar uno dentro de los otros. Para ver cómo trabaja, hagamos un

ejemplo.

Public Sub TablasMultiplicar()

Dim n As Integer, m As Integer

Page 18: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 18 de 49

'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

Veamos While ... Wend.

While condición

[ Instrucciones ]

Wend La condición nos devuelve un valor Falso o Verdadero para continuar o terminar el proceso. Ejemplo.

' 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

Public Sub MuestraArchivo(ByVal strArchivo As String)

Dim intArchivo As Integer

Dim strLinea As String

intArchivo = FreeFile

Page 19: Eventos Y Programas Access 2007

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 While | Until Condición „Condición al inicio

Instrucciones

Exit Do

Instrucciones

Loop

Do

Instrucciones

Exit Do

Instrucciones

Loop While | Until Condición „Condición al final.

Hagamos un ejemplo averiguando si un número es primo ó no “Un numero es primo si el residuo es

igual a cero (0) al ser divisible solamente por sí mismo y la unidad”. Ejemplo 1, 2, 3, 7, 15, 17,151

'Trabajar con numero primos utilizando Do ... Loop

Public Sub NumeroPrimo(intPrimo As Integer)

Dim intNumero As Integer

Select Case intPrimo

Page 20: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 20 de 49

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

Hagamos un formulario que nos permita verificar si un número es primo o no.

Ingrese un Cuadro de texto.

Coloque en la etiqueta Numero a Evaluar y ubíquela

como la ve en la gráfica tomándola del cuadro que aparece en la

parte superior izquierda.

Al cuadro de texto colóquele el nombre de

txtNumeroPrimo.

Agreguemos un botón y sobre el coloquemos Clic … Es número Primo ?

Coloquemos como nombre cmdPrimo

Page 21: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 21 de 49

Necesitamos darle la funcionalidad al formulario para conocer si un número es primo o nó.

El campo txtNumeroPrimo es quien tomara y sobre el cual se evaluará el número con

el cual trabajar.

Vamos a trabajar con el procedimiento NumeroPrimo solo que vamos a convertirlo en

una función donde nos arroje verdad o falso. Llamemos la función FnumeroPrimo

Public Function FnumeroPrimo(intPrimo As Integer) As Boolean

Dim intNumero As Integer

Select Case intPrimo

Case Is < 1

MsgBox " Número fuera de Rango"

FnumeroPrimo = False

Case 1, 2, 3

FnumeroPrimo = True

Case Else

intNumero = 2

Do While intNumero <= intPrimo

If intPrimo Mod intNumero = 0 And intNumero <> intPrimo Then

FnumeroPrimo = False

Exit Sub

ElseIf intPrimo Mod intNumero = 0 Then

FnumeroPrimo = True

Exit Sub

End If

intNumero = intNumero + 1

Loop

End Select

End Function

Page 22: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 22 de 49

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

Private Sub cmdPrimo_Click()

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 numero Primo "

Else

Me.cmdPrimo.Caption = " No es numero Primo "

End If

End Sub

Debemos cambiar el mensaje dentro del botón a medida que vamos evaluando otros

números

Para este caso coloquemos dentro del evento lo siguiente.

Private Sub txtNumeroPrimo_Change()

Me.cmdPrimo.Caption = "Clic .. Es número Primo?”

End Sub

Esto quiere decir que si hay algún cambio dentro del número a evaluar se colocará

<Clic .. Es numero Primo? > dentro de cmdPrimo

Al final debe quedar como se ve en la gráfica.

Page 23: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 23 de 49

Gestión de errores. Cuando se trabaja en programación, debemos gestionar los errores que se

presentan en el aplicativo, veamos cómo hacerlo.

Vemos como si hay un error de sintaxis la línea de código se pone en rojo .

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.

Page 24: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 24 de 49

--Sintaxis general.

Public Sub Salir()

On Error GoTo Err_Salir

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.

Private Sub cmdPrimo_Click()

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

Page 25: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 25 de 49

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

End Sub

Capturamos el error que se da cuando digitamos una letra donde debe ir un número. Se debe hacer

de esta manera.

Private Sub cmdPrimo_Click()

On Error GoTo OjoError

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>

Page 26: Eventos Y Programas Access 2007

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

de dialogo el botón aceptar

Si colocáramos un en lugar de vbCritical a vbInformation, saldría de la siguiente manera.

Si estamos hablando de cómo se presenta el mensaje, queremos decir que al momento de

presentarse el error, el sistema va directamente a OjoError:. Los dos puntos son necesarios porque

visual Access asume que es una etiqueta donde llegar o un nombre que tiene significado; es en ese

momento donde nos genera el cuadro con la descripción del error. Posteriormente va a Resume

Que_Sigue, que se puede entender al final diríjase a; para el ejemplo a la etiqueta Que_Sigue, bajo

Page 27: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 27 de 49

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.

La función original que evaluaba si un número es primo o no, era la siguiente.

Public Function FnumeroPrimo(intPrimo As Integer) As Boolean

Dim intNumero As Integer

Select Case intPrimo

Case Is < 1

MsgBox " Número fuera de Rango"

FnumeroPrimo = False

Case 1, 2, 3

FnumeroPrimo = True

Case Else

intNumero = 2

Do While intNumero <= intPrimo

If intPrimo Mod intNumero = 0 And intNumero <> intPrimo Then

FnumeroPrimo = False

Exit Function

ElseIf intPrimo Mod intNumero = 0 Then

FnumeroPrimo = True

Exit Function

End If

intNumero = intNumero + 1

Loop

End Select

End Function

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.

Public Function ErrorProceso ( intNumError As Integer, strDescripcion As String ) As Boolean

On Error GoTo OjoError

'La palabra clave que debemos colocar ahora es necesaria para generar nuestro propio error

Err.Raise.

Page 28: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 28 de 49

Err.Raise intNumError, " ErrorProceso ", strDescripcion

Que_Sigue:

ErrorProceso = False

Exit Function

OjoError:

MsgBox "Error No " & Err.Number & " --> " & Err.Description, vbCritical + vbOKOnly, "VALORES

PERMITIDOS"

Resume Que_Sigue

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.

Public Function FnumeroPrimo(intPrimo As Integer) As Boolean

Dim intNumero As Integer

If Right(CStr(intPrimo), 1) = CInt(1) Then

' Si el numero termina en 1 podemos continuar con el proceso de lo contrario generaremos nuestro

propio error

Select Case intPrimo

Case Is < 1

MsgBox " Número fuera de Rango"

FnumeroPrimo = False

Case 1, 2, 3

FnumeroPrimo = True

Case Else

intNumero = 2

Do While intNumero <= intPrimo

If intPrimo Mod intNumero = 0 And intNumero <> intPrimo Then

FnumeroPrimo = False

Exit Function

ElseIf intPrimo Mod intNumero = 0 Then

FnumeroPrimo = True

Exit Function

End If

intNumero = intNumero + 1

Loop

End Select

Else

FnumeroPrimo = ErrorProceso(514, " EL DATO NO TERMINA EN UNO !")

Page 29: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 29 de 49

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.

Page 30: Eventos Y Programas Access 2007

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.

Funciones de Visual Basic.

Page 31: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 31 de 49

1- Convertir un texto de minúsculas a mayúsculas y viceversa

Format(“Cadena a mayúsculas”.”>”) como resultado obtendremos CADENA A MAYUSCÚLAS

Format("CADENA A MINÚSCULAS", "<") como resultado obtenemos cadena a minúsculas

Todo depende que signo utilicemos > ó < Formato de Fechas

Format(Date, "dd/mm/yyyy") 01/12//2009

Format(Date, "yyyy/mm/dd") 2009/12/01

Format(Date, "mm/dd/yyyy") 12/01/2009

Format(Date, "mm") 12

Format(Date, "yyyy") 2010

Format(Date, "general date") 12/1/2009

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

Este procedimiento nos demuestra cómo trabajan los formatos.

Public Sub funcionesVBA()

Debug.Print "Formatos de Texto "

Debug.Print "Funcion Format --> " & Format("Cadena a mayúsculas", ">")

Debug.Print "Funcion Format --> " & Format("CADENA A MINÚSCULAS", "<")

Debug.Print

Debug.Print "Formato de Fechas "

Debug.Print "Fecha --> " & Format(Date, "dd/mm/yyyy hh:nn:ss")

Debug.Print "Fecha --> " & Format(Date, "yyyy/mm/dd")

Debug.Print "Fecha --> " & Format(Date, "mm/dd/yyyy")

Debug.Print "Fecha --> " & Format(Date, "mm")

Debug.Print "Fecha --> " & Format(Date, "yyyy")

Debug.Print "Fecha --> " & Format(Date, "general date")

Debug.Print "Fecha --> " & Format(Date, "medium date")

Debug.Print "Fecha --> " & Format(Date, "Long date")

Debug.Print

Debug.Print "Formato de numeros "

Debug.Print "Formato de Miles --> " & Format(1044812, "#,###")

Debug.Print "Formato de Miles --> " & Format(1044812.08, "#,###.##")

Debug.Print "Formato general --> " & Format(1044812, "General Number")

Debug.Print "Formato general --> " & Format(1044812, "Standard")

End Sub

2- Trabajo con cadenas

Extraer una Subcadena Mid("HOLA COMO ESTAN", 10, 6) ESTAN

Page 32: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 32 de 49

Extrae caracteres de la izquierda Left("HOLA COMO ESTAN", 4) HOLA

Extrae caracteres de la derecha Right("HOLA COMO ESTAN", 6) ESTAN

Longitud de la cadena Len(“HOLA COMO ESTAS”) 15

Para quitar espacios utilizamos las funciones LTrim Izquierda, RTrim Derecha, Trim para

ambos lados.

LTrim(" HOLA COMO ESTAS ") HOLA COMO ESTAS

RTrim(" HOLA COMO ESTAS ") HOLA COMO ESTAS

Trim(" HOLA COMO ESTAS ") HOLA COMO ESTAS

Como trabajan los formatos de cadena.

Public Sub funcionesVBA1 ()

Debug.Print "Extraer una Subcadena ' " & Mid("HOLA COMO ESTAN", 10, 6)

Debug.Print "Extraer caracteres de la izquierda --> " & Left("HOLA COMO ESTAN", 4)

Debug.Print "Extraer caracteres de la derecha --> " & Right("HOLA COMO ESTAN", 6)

Debug.Print "Longitud de una cadena --> " & Len("HOLA COMO ESTAS")

Debug.Print "Caracteres en blanco de la izquierda --> " & LTrim(" HOLA COMO ESTAS ")

Debug.Print "Caracteres en blanco de la derecha --> " & RTrim(" HOLA COMO ESTAS ")

Debug.Print "Caracteres en blanco Ambos lados --> " & Trim(" HOLA COMO ESTAS ")

Debug.Print "Código de los caracteres --> " & Asc("H") & "-" & Asc("0") & "-" & Asc("L") & "-" &

Asc("A")

Debug.Print "Caracteres de los códigos --> " & Chr(72) & "-" & Chr(48) & "-" & Chr(76) & "-" &

Chr(65)

End Sub

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

Page 33: Eventos Y Programas Access 2007

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.

Page 34: Eventos Y Programas Access 2007

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.

Los eventos que tocaremos para el formulario serán.

Se adicionan 3 Botones ( Nuevo Registro, Actualizar, Consultar, Salir)

Antes de actualizar el Formulario

En todos los campos se tocaran los eventos (Al recibir y al perder el enfoque)

Los eventos al Salir y al Cambiar, se tocaran en los campos (Identificación Cliente y la

Identificación del representante legal)

Page 35: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 35 de 49

La manipulación de estos eventos permite valorar si un registro existe y en el caso de relaciones

externas poder crear el registro si el usuario lo requiere.

Los botones. Creemos los botones. Botón Nuevo

Para que el código trabaje, por favor coloquemos el nombre de cmdNuevoRg

Private Sub cmdNuevoRg_Click()

Nuevo 'Cuando se crea un nuevo registro se hacen dos cosas

'1- Se lleva el cursor al campo Identificacion del cliente

'2- Se llenan los campos Representanten, Tipo de Cliente y El estado

'3- Deshabilitamos el boton de registro nuevo ya que nos encontramos diligenciando uno.

' Se habilitara de nuevo en el momento de grabar el registro.

DoCmd.GoToControl "idCliente"

Forms![FCliente]![idRepresen] = "-1"

Forms![FCliente]![idtpcliente] = "BU"

Forms![FCliente]![idEstado] = "AC"

Forms![FCliente]![NuevoRg].Enabled = False

End Sub

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

la función de Actualizar , consultar y salir

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.

Page 36: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 36 de 49

Al recibir y perder el enfoque.

En formularios donde sea necesario conocer donde se encuentra el cursor, debido a que este

se ve como una línea horizontal en cada campo, es difícil de distinguir; podemos definir las

propiedades de recibir (GotFocus) y perder (LostFocus) el enfoque que es más o menos saber

que campo está activo (Tiene el cursor). Se logra afectando la propiedad de cada campo

BackColor (Color de fondo)

El siguiente código permite tener ese efecto.

Private Sub idCliente_GotFocus()

Forms![FCliente]![idCliente].BackColor = "13619175"

End Sub

Private Sub idCliente_LostFocus()

Forms![FCliente]![idCliente].BackColor = "16777215"

End Sub

Private Sub strNombre_GotFocus()

Forms![FCliente]![strNombre].BackColor = "13619175"

End Sub

Private Sub strNombre_LostFocus()

Forms![FCliente]![strNombre].BackColor = "16777215"

End Sub

Private Sub dtFechaing_GotFocus()

Forms![FCliente]![dtFechaing].BackColor = "13619175"

End Sub

Private Sub dtFechaing_LostFocus()

Forms![FCliente]![dtFechaing].BackColor = "16777215"

End Sub

Private Sub idRepresen_GotFocus()

Page 37: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 37 de 49

Forms![FCliente]![idRepresen].BackColor = "13619175"

End Sub

Private Sub idRepresen_LostFocus()

Forms![FCliente]![idRepresen].BackColor = "16777215"

End Sub

Private Sub strReNombre_GotFocus()

Forms![FCliente]![strReNombre].BackColor = "13619175"

End Sub

Private Sub strReNombre_LostFocus()

Forms![FCliente]![strReNombre].BackColor = "16777215"

End Sub

Private Sub strTelefono_GotFocus()

Forms![FCliente]![strTelefono].BackColor = "13619175"

End Sub

Private Sub strTelefono_LostFocus()

Forms![FCliente]![strTelefono].BackColor = "16777215"

End Sub

Private Sub idtpcliente_GotFocus()

Forms![FCliente]![idtpcliente].BackColor = "13619175"

End Sub

Private Sub idtpcliente_LostFocus()

Forms![FCliente]![idtpcliente].BackColor = "16777215"

End Sub

Private Sub strEstado_GotFocus()

Forms![FCliente]![strEstado].BackColor = "13619175"

End Sub

Private Sub strEstado_LostFocus()

Forms![FCliente]![strEstado].BackColor = "16777215"

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>

Page 38: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 38 de 49

Private Sub Form_BeforeUpdate(Cancel As Integer)

„Se pregunta si podemos actualizar el registro, responderemos si o no, todo depende

„Habilitamos el boton de Registro nuevo este o no este deshabilitado.

„Se debe habilitar el botón nuevo para que permita ingresar un nuevo registro si estamos

„actualizando el ingreso de un nuevo cliente.

Dim intResponse As Integer

Dim strPrompt As String

strPrompt = "Aceptar los Cambios ?"

intResponse = MsgBox(strPrompt, vbYesNo)

If intResponse = vbNo Then

Cancel = True

Me.Undo

Else

Cancel = False

End If

Forms![FCliente]![NuevoRg].Enabled = True

End Sub

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

Page 39: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 39 de 49

Private Sub idCliente_Exit(Cancel As Integer)

'Verificar antes de crear un nuevo cliente si existe en la base de datos.

If Me.NewRecord = -1 Then

Dim dbs As DAO.Database

Dim rsSQL As DAO.Recordset

‘Definir un Select para indagar el dato en la base de datos

Set dbs = CurrentDb

Set rsSQL = dbs.OpenRecordset("SELECT Cliente.idCliente AS Cliente_id " & _

"FROM Cliente " & _

"Where cliente.idCliente = " & "'" & Forms![FCliente]![idCliente] & "'")

If rsSQL.EOF = False Then

MsgBox "El Cliente ya Existe ..!", vbInformation + vbOKOnly, "VERIFIQUE SUS DATOS "

Me.Undo ‘Deshace cualquier dato que se haya intentado crear en el formulario

Forms![FCliente]![NuevoRg].Enabled = True ‘Activa el botón de nuevo registro

Exit Sub

End If

rsSQL.Close

Set rsSQL = Nothing

Set dbs = Nothing

End If 'Valida si es un nuevo registro

End Sub

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">

Private Sub idRepresen_Exit(Cancel As Integer)

Dim dbs As DAO.Database

Dim rsSQL As DAO.Recordset

Set dbs = CurrentDb

Set rsSQL = dbs.OpenRecordset("SELECT Representante.idRepresen AS idRepr " & _

"FROM Representante " & _

"Where Representante.idRepresen = " & "'" & Forms![FCliente]![idRepresen] & "'")

Page 40: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 40 de 49

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.

Page 41: Eventos Y Programas Access 2007

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.

Private Sub idRepresen_GotFocus()

Forms![FRepresentante]![idRepresen].BackColor = "13619175"

End Sub

Private Sub idRepresen_LostFocus()

Forms![FRepresentante]![idRepresen].BackColor = "16777215"

End Sub

Private Sub strReNombre_GotFocus()

Forms![FRepresentante]![strReNombre].BackColor = "13619175"

End Sub

Private Sub strReNombre_LostFocus()

Forms![FRepresentante]![strReNombre].BackColor = "16777215"

End Sub

Private Sub strTelefono_GotFocus()

Forms![FRepresentante]![strTelefono].BackColor = "13619175"

End Sub

Private Sub strTelefono_LostFocus()

Forms![FRepresentante]![strTelefono].BackColor = "16777215"

End Sub

Verifiquemos cualquier cambio hecho sobre los datos del formulario.

Private Sub Form_BeforeUpdate(Cancel As Integer)

Dim intResponse As Integer

Page 42: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 42 de 49

Dim strPrompt As String

strPrompt = "Aceptar los Cambios ?"

intResponse = MsgBox(strPrompt, vbYesNo)

If intResponse = vbNo Then

Cancel = True

Me.Undo

Else

Cancel = False

End If

Forms![FRepresentante]![NuevoRg].Enabled = True

End Sub

Definamos el código para crear un nuevo registro en el formulario.

Private Sub NuevoRg_Click()

Nuevo

DoCmd.GoToControl "idRepresen"

Forms![FRepresentante]![strReNombre] = "-"

Forms![FRepresentante]![strTelefono] = "-1"

Forms![FRepresentante]![NuevoRg].Enabled = False

End Sub

Por último veamos como verificamos que cualquier registro que estamos creando no se

encuentre ya dentro de la base de datos.

Private Sub idRepresen_Exit(Cancel As Integer)

'Verificar antes de crear un nuevo cliente si existe en la base de datos.

If Me.NewRecord = -1 Then

Dim dbs As DAO.Database

Dim rsSQL As DAO.Recordset

'Definir un Select para indagar el dato en la base de datos

Set dbs = CurrentDb

Set rsSQL = dbs.OpenRecordset("SELECT Representante.idRepresen AS Representante_id " & _

"FROM Representante " & _

"Where Representante.idRepresen = " & "'" & Forms![FRepresentante]![idRepresen] & "'")

If rsSQL.EOF = False Then

MsgBox "El Representante ya Existe ..!", vbInformation + vbOKOnly, "VERIFIQUE SUS

DATOS "

Me.Undo 'Deshace cualquier dato que se haya intentado crear en el formulario

Forms![FRepresentante]![NuevoRg].Enabled = True 'Activa el botón de nuevo registro

Exit Sub

End If

rsSQL.Close

Set rsSQL = Nothing

Page 43: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 43 de 49

Set dbs = Nothing

End If 'Valida si es un nuevo registro

End Sub

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.

Veamos el diagrama a seguir del proceso.

Se crea el formulario, con el cual hacer el procedimiento.

Page 44: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 44 de 49

Diagrama de las tablas que intervienen en la

actualización del cliente.

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.

Formulario de

Cabecera

Formulario

Detalle

Page 45: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 45 de 49

Private Sub idMovimiento_GotFocus()

Forms![Factualizacli]![idMovimiento].BackColor = "13619175"

End Sub

Private Sub idMovimiento_LostFocus()

Forms![Factualizacli]![idMovimiento].BackColor = "16777215"

End Sub

Private Sub strDescripcionmo_GotFocus()

Forms![Factualizacli]![strDescripcionmo].BackColor = "13619175"

End Sub

Private Sub strDescripcionmo_LostFocus()

Forms![Factualizacli]![strDescripcionmo].BackColor = "16777215"

End Sub

Private Sub TpActualiza_GotFocus()

Forms![Factualizacli]![TpActualiza].BackColor = "13619175"

End Sub

Private Sub TpActualiza_LostFocus()

Forms![Factualizacli]![TpActualiza].BackColor = "16777215"

End Sub

Private Sub idCliente_GotFocus()

Forms![Factualizacli]![idCliente].BackColor = "13619175"

End Sub

Private Sub idCliente_LostFocus()

Forms![Factualizacli]![idCliente].BackColor = "16777215"

End Sub

Creemos los botones de Nuevo registro, Grabar los cambios,

Buscar y Salir del formulario respectivamente.

Cuando hayamos creado el botón de nuevo registros anexemos el código siguiente en el evento

< al hacer clic >.

Private Sub cmdNuevorg_Click()

Nuevo

DoCmd.GoToControl "strDescripcionmo"

Forms![Factualizacli]![strDescripcionmo] = "-"

Page 46: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 46 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.

En el formulario de cabecera y en el evento < Antes de actualizar >

Private Sub Form_BeforeUpdate(Cancel As Integer)

„Se pregunta si podemos actualizar el registro, responderemos si o no, todo depende y

„Habilitamos el botón de Registro nuevo este o no este deshabilitado.

Dim intResponse As Integer

Dim strPrompt As String

strPrompt = "Aceptar los Cambios ?"

intResponse = MsgBox(strPrompt, vbYesNo)

If intResponse = vbNo Then

Cancel = True

Me.Undo

Else

Cancel = False

End If

Forms![Factualizacli]![cmdNuevorg].Enabled = True

End Sub

Para guardar el dato que se va a cambiar dentro de la observación utilizaremos el siguiente

código.

Private Sub idCliente_Exit(Cancel As Integer)

Dim strCadena As String

strCadena = " DATO_ANTERIOR --> "

If Forms![Factualizacli].NewRecord Then

If Len(Forms![Factualizacli]![idCliente]) > 0 Then

Forms![Factualizacli]![SFdetaActCliente]![idMovideta].Value = Forms![Factualizacli]![idMovimiento].Value

Forms![Factualizacli]![SFdetaActCliente]![idCliente].Value = Forms![Factualizacli]![idCliente].Value

Select Case Forms![Factualizacli]![TpActualiza]

Case "Est"

Forms![Factualizacli]![strDescripcionmo].Value = Forms![Factualizacli]![strDescripcionmo].Value & strCadena &

Forms![Factualizacli]![SFdetaActCliente]![idEstado].Value

Case "Nom"

Forms![Factualizacli]![strDescripcionmo].Value = Forms![Factualizacli]![strDescripcionmo].Value & strCadena &

Forms![Factualizacli]![SFdetaActCliente]![strNombre].Value

Case "Tel"

Page 47: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 47 de 49

Forms![Factualizacli]![strDescripcionmo].Value = Forms![Factualizacli]![strDescripcionmo].Value & strCadena &

Forms![Factualizacli]![SFdetaActCliente]![trTelefono].Values

Case "Tpc"

Forms![Factualizacli]![strDescripcionmo].Value = Forms![Factualizacli]![strDescripcionmo].Value & strCadena &

Forms![Factualizacli]![SFdetaActCliente]![idEstado].Values

Case "Rep"

Forms![Factualizacli]![strDescripcionmo].Value = Forms![Factualizacli]![strDescripcionmo].Value & strCadena &

Forms![Factualizacli]![SFdetaActCliente]![idRepresen]

Case Else

Forms![Factualizacli]![strDescripcionmo].Value = " No hubo cambio alguno "

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>.

Private Sub idMovideta_GotFocus()

Forms![Factualizacli]![SFdetaActCliente]![idMovideta].BackColor = "13619175"

End Sub

Private Sub idMovideta_LostFocus()

Forms![Factualizacli]![SFdetaActCliente]![idMovideta].BackColor = "16777215"

End Sub

Private Sub idCliente_GotFocus()

Forms![Factualizacli]![SFdetaActCliente]![idCliente].BackColor = "13619175"

End Sub

Private Sub idCliente_LostFocus()

Forms![Factualizacli]![SFdetaActCliente]![idCliente].BackColor = "16777215"

End Sub

Private Sub strNombre_GotFocus()

Forms![Factualizacli]![SFdetaActCliente]![strNombre].BackColor = "13619175"

End Sub

Private Sub strNombre_LostFocus()

Forms![Factualizacli]![SFdetaActCliente]![strNombre].BackColor = "16777215"

End Sub

Private Sub dtFechaing_GotFocus()

Forms![Factualizacli]![SFdetaActCliente]![dtFechaing].BackColor = "13619175"

End Sub

Page 48: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 48 de 49

Private Sub dtFechaing_LostFocus()

Forms![Factualizacli]![SFdetaActCliente]![dtFechaing].BackColor = "16777215"

End Sub

Private Sub idRepresen_GotFocus()

Forms![Factualizacli]![SFdetaActCliente]![idRepresen].BackColor = "13619175"

End Sub

Private Sub idRepresen_LostFocus()

Forms![Factualizacli]![SFdetaActCliente]![idRepresen].BackColor = "16777215"

End Sub

Private Sub strTelefono_GotFocus()

Forms![Factualizacli]![SFdetaActCliente]![strTelefono].BackColor = "13619175"

End Sub

Private Sub strTelefono_LostFocus()

Forms![Factualizacli]![SFdetaActCliente]![strTelefono].BackColor = "16777215"

End Sub

Private Sub idtpcliente_GotFocus()

Forms![Factualizacli]![SFdetaActCliente]![idtpcliente].BackColor = "13619175"

End Sub

Private Sub idtpcliente_LostFocus()

Forms![Factualizacli]![SFdetaActCliente]![idtpcliente].BackColor = "16777215"

End Sub

Private Sub idEstado_GotFocus()

Forms![Factualizacli]![SFdetaActCliente]![idEstado].BackColor = "13619175"

End Sub

Private Sub idEstado_LostFocus()

Forms![Factualizacli]![SFdetaActCliente]![idEstado].BackColor = "16777215"

End Sub

Y por último verificar los cambios que se den dentro del formulario Detalle

Private Sub Form_BeforeUpdate(Cancel As Integer)

„Se pregunta si podemos actualizar el registro, responderemos si o no, todo depente y

„Habilitamos el botón de Registro nuevo este o no este deshabilitado.

Dim intResponse As Integer

Page 49: Eventos Y Programas Access 2007

Programar Eventos en Access 2007. Página 49 de 49

Dim strPrompt As String

strPrompt = "Guardar Detalle ?"

intResponse = MsgBox(strPrompt, vbYesNo)

If intResponse = vbNo Then

Cancel = True

Me.Undo

Else

Cancel = False

End If

End Sub