P. 1
Eventos Y Programas Access 2007

Eventos Y Programas Access 2007

|Views: 4.989|Likes:
Publicado portrabajopro10

More info:

Published by: trabajopro10 on May 29, 2010
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

05/27/2014

pdf

text

original

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.

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. formulario lo crearemos en: Crear  Diseño del Formulario. Guardémoslo como saludo.

Este

2. Añadamos una etiqueta con la palabra saludo. 3. Vamos a la hoja de propiedades de la etiqueta y

coloca mos en

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 propiedades del botón y

aparece al crearlo dando cancelar. Ingresemos a las 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

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 acabamos de crear tiene una palabra llamada Me; esta se refiere al formulario actual

código

que

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.

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 Si el botón

c.

presionamos

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.

Programar Eventos en Access 2007. Página 6 de 49 Para trabajar en Access con variables y constantes, debemos hacerlo con dos palabras reservadas Ejemplo Cons Pi As Double = 3.1416 Constante Dim Edad as Currency Variable Dim Nombre as String Variable Dim Valor as Variant Variable CONS y DIM

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 la ventana

Public podemos tratar nuevamente con

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.

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 momento de terminar su ejecución

valor

al

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

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 Tamaño Valor Inferior Valor Sufijo Prefijo tipo Superior Byte 1 Byte 0 255 Byt Integer 2 Bytes -32.768 32.767 % Int Long 4 Bytes 2.147.483.648 & Lng 2.147.483.648 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 Single 4 Bytes De -3,402823E38 a De 1,401298E-45 a ! 1,401298E-45 3,402823E38 Double 8 Bytes De De 4,94065645841247E# 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 & 79.228.162.514.264.337.59 3.543.950.950.335 3.543.950.950.335

Prefijo sng dbl

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.

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$

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

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

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

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

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)

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

For … Next. For contador = principio To fin [Step increment] Instrucciones [ Exit For] Next Contador
Bucles. Para entender esta estructura hagamos un ejemplo con el valor factorial.

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

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

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

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

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

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.

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.

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
si es primo o no 'Con esta fracción de código, está evaluando que haya un valor digitado para verificar

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

' 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

MsgBox "No hay valor alguno para evaluar .. " ElseIf FnumeroPrimo(CInt(Me.txtNumeroPrimo)) Then 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
verificar si es primo o no 'Con esta fracción de código, está evaluando que haya un valor digitado para

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 de dialogo el botón aceptar Si colocáramos un en lugar de vbCritical a vbInformation, saldría de la siguiente manera. y el segundo nos adiciona al cuadro

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

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.

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

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 (Formulario de números primos)

Fprimo.

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.

Funciones de Visual Basic.

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

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

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.

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)

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.

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()

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>

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

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] & "'")

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.

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

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

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.

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

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.

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

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"

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

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

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

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->