sql >> Base de Datos >  >> RDS >> Access

Visual Basic para Aplicaciones en Microsoft Access

Introducción

Microsoft Access incluye una serie de características que permiten a los desarrolladores de bases de datos crear formularios de ingreso de datos, informes y consultas que pueden guiar a los usuarios en la consulta de datos existentes en la base de datos y el ingreso de nuevos datos. Varias herramientas de creación de consultas y asistentes facilitan este proceso de desarrollo. Sin embargo, incluso con estas herramientas, puede haber situaciones en las que el desarrollador desee agregar aún más funciones que las herramientas de desarrollo de MS Access aún no proporcionan. Por ejemplo, el desarrollador puede desear corregir automáticamente los datos incorrectos antes de que se guarden en la base de datos, mostrar una alerta si se viola una regla comercial, ayudar al usuario a navegar de un formulario de ingreso de datos a otro o lanzar un informe con algunos filtros personalizados. La forma de lograr dicha personalización es agregando código usando el lenguaje de programación Visual Basic for Applications.

Visual Basic para aplicaciones (VBA) es el lenguaje de programación utilizado en la familia de productos de software de Microsoft Office, como Excel y Access. El lenguaje VBA se deriva del lenguaje "básico" inventado en 1964 que se hizo popular en las computadoras personales en la década de 1970. Microsoft agregó la parte "Visual" del nombre para reflejar el uso del lenguaje de programación básico en Microsoft Windows.

Hay muchos tutoriales que introducen la programación básica. Este tutorial se centrará en un pequeño subconjunto de características del lenguaje VBA como se usa en MS Access.

Contenido

  • Eventos en Microsoft Access
  • Ejemplo de código VBA:garantizar que los nombres estén en mayúsculas y minúsculas
  • El lenguaje VBA:declaración y asignación de variables, declaraciones condicionales y comentarios
  • El lenguaje VBA:funciones, métodos y ejemplos
  • El lenguaje VBA:propiedades
  • Ejercicios de codificación VBA
  • Manejo de errores en VBA
  • Ejecución de consultas SQL personalizadas en VBA

La siguiente página presenta Eventos en Microsoft Access.

Eventos en Microsoft Access

En Access, el código de programación de VBA se adjunta a formularios e informes y se puede configurar para que se ejecute en un momento específico o como reacción a un evento específico. Este estilo de programación a veces se denomina programación "basada en eventos", lo que significa que el código que escribe el desarrollador se ejecutará en respuesta a algún evento. .

Cuando se muestra un formulario en Vista de formulario, generalmente consultará los datos existentes de las tablas subyacentes y luego simplemente se quedará inactivo hasta que el usuario haga algo. Por ejemplo, el usuario puede hacer clic en uno de los botones de navegación para pasar al siguiente registro, puede hacer clic en un cuadro de texto y comenzar a escribir algunos datos nuevos o puede hacer clic en el botón Cerrar para cerrar el formulario. Cada una de estas acciones da como resultado un Evento sucediendo en la forma. Cada clic del mouse o golpe de teclado se maneja como un evento.

En su mayor parte, los eventos tienen un comportamiento predeterminado. Al hacer clic en el botón de navegación "siguiente registro", el formulario se desplaza al siguiente registro de datos. Escribir la letra "C" cuando el cursor está en un cuadro de texto hace que aparezca la letra "C" en el cuadro de texto. Al presionar la tecla TAB, el cursor salta al siguiente cuadro de texto (o control) en el formulario y así sucesivamente. Un programador puede anular o mejorar este comportamiento predeterminado e insertar su propio código para que se ejecute en respuesta al evento.

La programación de VBA en formularios e informes de acceso se centra principalmente en escribir código para responder a diferentes eventos.

Antes de profundizar en los detalles de los eventos, puede ser instructivo implementar un ejemplo simple. Para ver algo de código en acción, la siguiente sección de este tutorial proporciona un recorrido para agregar código VBA a un formulario de entrada de datos.

Ejemplo de código VBA:garantizar que los nombres estén en mayúsculas y minúsculas

Lo que sigue es un ejemplo relativamente breve y simple de agregar código VBA a un formulario de entrada de datos en MS Access. Se omitirán varios detalles por motivos de brevedad. Después de este ejemplo, el resto de este tutorial completará esos detalles.

Este ejemplo usa el Cliente formulario de entrada de datos que se personalizó en el tutorial de formularios avanzados de MS Access. Es posible que desee completar ese tutorial (o al menos las partes relacionadas con el formulario de ingreso de datos del Cliente) antes de continuar.

Al ingresar información de nuevos clientes, nos gustaría asegurarnos de que los nombres de los Clientes se ingresen en "caso correcto". Es decir, la primera letra del nombre debe ser mayúscula y el resto del nombre debe estar en minúsculas. Si el usuario ingresa:"joe", nos gustaría que el formulario lo corrija automáticamente al caso correcto:"Joe".

En cuanto a los eventos, agregaremos un código que está conectado al evento Después de la actualización para el campo Nombre en el formulario del cliente. Esto significa que después algo ha sido cambiado (actualizado ) en el campo Nombre, se activará el evento Después de la actualización y luego el código que escribiremos entrará en acción para asegurarnos de que cualquier nombre que se haya escrito se convierta en mayúsculas y minúsculas.

Los siguientes pasos colocan este código en su lugar.

  1. Abra la entrada de datos del cliente en modo de diseño.
  2. Haga clic derecho en el Nombre cuadro de texto y seleccione Propiedades en el menú emergente.
  3. Cuando la Hoja de propiedades se muestra, haga clic en la pestaña Evento. Esto se muestra en la siguiente figura:

    Tenga en cuenta la lista de eventos que se muestran. Cada uno se puede programar para responder al evento específico que le sucede al FirstName cuadro de texto.

  4. Cree un nuevo controlador de eventos haciendo clic en los tres puntos a la derecha del evento Después de la actualización.
  5. El Choose Builder aparecerá la ventana. Seleccione Generador de código y luego haga clic en Aceptar botón.
  6. Aparecerá la ventana de edición del código VBA. Tenga en cuenta que Access ya ha creado el stub de la subrutina que comienza con las palabras Private Sub y termina con las palabras End Sub.
    El nombre de la subrutina se crea utilizando el nombre del control de formularios (FirstName) y el nombre del Evento al que responderá esta subrutina (AfterUpdate).

    La línea End Sub es donde terminará esta subrutina en particular.

  7. Agregue el siguiente código en la línea vacía entre Private Sub y End Sub.:
    FirstName = StrConv(FirstName, vbProperCase)
    
    

    Una vez completado, el código aparecerá de la siguiente manera:

    Esta nueva línea de código hace lo siguiente:

    StrConv es una función que toma el contenido del cuadro de texto FirstName y lo convierte de acuerdo con el segundo parámetro proporcionado, que es vbProperCase en este ejemplo. Una vez realizada esta conversión, el resultado se volverá a asignar (usando el signo igual) al cuadro de texto FirstName. Esto sobrescribirá todo lo que esté actualmente en el cuadro de texto FirstName. Por ejemplo, esta función tomará "sally", lo convertirá en "Sally" y luego colocará "Sally" en el cuadro de texto FirstName.

  8. Guarde este nuevo código bajando el Archivo menú y seleccionando Guardar .
  9. Pruebe el nuevo código. Vuelva a la pantalla del modo de diseño de Microsoft Access. Cambie la vista a Vista de formulario.
  10. Navegar a un registro vacío. Haga clic en el campo FirstName y escriba un nombre en minúsculas:

  11. Presiona el tabulador para pasar al siguiente cuadro de texto. El nombre de Joe debe cambiarse a "Joe" como se muestra a continuación:
  12. Si recibe un error, vuelva al editor de código VBA y asegúrese de haber escrito correctamente todas las partes del código. Es posible que deba desplegar el botón Ejecutar menú y seleccione Restablecer para detener la ejecución del código VBA.

El ejemplo anterior proporcionó una mirada rápida a cómo se puede personalizar el comportamiento de un formulario para ayudar al usuario a ingresar datos bien formateados en la base de datos. Se omitieron varios detalles durante este ejemplo y esos detalles se discutirán en el resto de este tutorial.

El lenguaje VBA

Esta sección presenta brevemente las partes principales del lenguaje VBA tal como se usa en MS Access. Una descripción general completa de VBA está más allá del alcance de este tutorial. Al final de este tutorial se proporcionan referencias a libros y materiales más completos.

Declaración de variables

Una variable es un nombre dado a un marcador de posición donde el programador puede almacenar algunos datos. Por ejemplo, una variable podría usarse para almacenar un número mientras realizamos algunas operaciones matemáticas con él o comparamos su valor con otras variables. Las variables se pueden declarar para contener valores de un tipo de datos específico como números enteros, cadenas o fechas. Para declarar una nueva variable, utilice la instrucción Dim. Por ejemplo, para declarar una nueva variable llamada MiNombre y configúrelo para contener una cadena (caracteres), haga lo siguiente:

Dim strMyName como cadena

Para declarar una nueva variable llamada "SaldoCuenta" y configurarla para almacenar un número con un decimal, use lo siguiente:

Dim dblAccountBalance como doble

Asignación de valores

Se puede asignar un valor a una variable o a un control en el formulario usando el signo igual. Por ejemplo, para almacenar el nombre “Alex” en la variable MiNombre use lo siguiente:

strMiNombre =“Alex”

Para copiar el contenido del cuadro de texto FirstName en la variable MyName, use:

strMiNombre =[Nombre]

Los valores también se pueden calcular antes de ser asignados. Por ejemplo, la siguiente expresión toma el saldo de la cuenta del cliente actual del cuadro de texto [Saldo], agrega un 1 % de interés (al multiplicar el saldo por 1,01) y luego reduce el resultado en $10. Finalmente, el resultado se asigna a la variable SaldoCuenta.

dblAccountBalance =( [Saldo] * 1.01 ) – 10.00

Declaraciones condicionales

Una declaración condicional utiliza una prueba lógica para determinar qué líneas de código ejecutar a continuación. La declaración condicional If … Then se usa con bastante frecuencia. Por ejemplo:

If AccountBalance < 1000 Then
      MonthlyFee = 10
Else
      MonthlyFee = 0
End If

Se evalúa la expresión lógica AccountBalance <1000. Si esta expresión es verdadera (por ejemplo, si AccountBalance es $400), entonces se ejecuta la siguiente línea después de Then. En este ejemplo, Tarifa mensual =10.

Si esta expresión es falsa, entonces se ejecuta la línea después de Else.

La expresión lógica puede incluir varias partes que están conectadas por los operadores booleanos OR, AND y NOT. Puede encontrar una discusión más detallada de las expresiones booleanas en este tutorial de programación. Por ejemplo, supongamos que renunciamos a la tarifa mensual si la cuenta tiene menos de un año. Supongamos que tenemos AccountAge como la edad de la cuenta en meses. Entonces el código sería:

If AccountBalance < 1000 AND AccountAge > 12 Then
      MonthlyFee = 10
Else
      MonthlyFee = 0
End If

Se puede ejecutar más de una línea de código en la declaración If... Then y las declaraciones If... Then se pueden anidar una dentro de otra.

Comentarios

Al programar en cualquier lenguaje de programación, es una buena práctica incluir comentarios que describan el código. En VBA, se puede incluir un comentario comenzando con una comilla simple. Tomando lo anterior como ejemplo, podríamos agregar los siguientes comentarios:

Más partes del lenguaje VBA se analizan en la página siguiente.

Lenguaje VBA – Continuación

Funciones

El lenguaje VBA tiene una gran cantidad de funciones y métodos incorporados que se pueden usar para realizar diversas tareas, como funciones matemáticas (sin, cos, tan), funciones de cadena y muchas otras. Las funciones suelen tener uno o más parámetros de entrada que utiliza la función. Por ejemplo, en la función Cos(45) el “45” es el ángulo de entrada sobre el que operará la función coseno. La función StrConv requiere dos parámetros de entrada:la cadena a convertir y el estilo de conversión:

StrConv(Nombre, vbProperCase)

Algunas funciones útiles incluyen:

MsgBox(mensaje, botones, título) Mostrar un cuadro de mensaje emergente con el texto del mensaje, los botones y el título
StrConv( expresión, estilo ) Convierta la expresión de cadena a mayúsculas, minúsculas o mayúsculas y minúsculas
Izquierda( expresión, caracteres ) Tome los caracteres más a la izquierda de la expresión de cadena
Mid(expresión, inicio, caracteres) Tome el conjunto medio de caracteres de la expresión de cadena que comienza en inicio
EsNulo( expresión ) Pruebe si la expresión de cadena (o el cuadro de texto) no tiene contenido (es nulo)
Nz( expresión, valor_si_null ) Si la expresión es nula, complete un valor predeterminado
Ahora() Devuelve la fecha y hora actuales
Redondo(expresión, decimales) Redondea la expresión numérica a algún número de lugares decimales
RGB (rojo, verde, azul) Devuelve el número entero de color basado en una combinación de rojo, verde y azul

Métodos

Los métodos en VBA son como funciones pero están conectados con un control u otro objeto en un formulario o informe.

Algunos métodos útiles incluyen:

DoCmd.CancelEvent Cancela el evento actual que se está manejando
DoCmd.Cerrar Cerrar el formulario actual (o base de datos)
DoCmd.OpenForm Abre un nuevo formulario
DoCmd.Abrir informe Ejecute un comando de MS Access, como guardar datos nuevos o actualizados, deshacer un cambio o salir de un formulario
.Establecer enfoque Establecer el foco en el control del formulario
.Deshacer Deshacer el cambio o comando más reciente
.Actualizar Actualiza todos los datos subyacentes de un formulario
.Solicitud de consulta Reconsulta los datos suministrados a un formulario
.Repintar Vuelve a pintar todos los controles de un formulario

En este sitio de Microsoft se enumeran muchas más funciones y métodos.

El siguiente conjunto de ejemplos hace uso de varias funciones y métodos en diferentes combinaciones.

Ejemplos

Muestra al usuario una advertencia si el saldo de la cuenta es inferior a 1000 $

If AccountBalance < 1000 Then
      MsgBox("Warning: The Account Balance is now less than $1,000.")
End If

Si el cuadro de texto FirstName en el formulario tiene algo, entonces conviértalo a mayúsculas y minúsculas

If Not IsNull( [FirstName] ) Then
   FirstName = StrConv( [FirstName], vbProperCase )
End If

la página siguiente presenta las Propiedades de diferentes objetos.

Propiedades

Cada elemento de un formulario de entrada de datos o informe tiene un conjunto de propiedades asociado a ello. Las propiedades controlan la ubicación, el color, la fuente, el fondo y otros atributos de apariencia y formato de cada control. Por ejemplo, algunas de las muchas propiedades de un TextBox incluyen:

Visible Determina si el cuadro de texto está visible en el formulario
Bloqueado Determina si se pueden cambiar los datos en el cuadro de texto
Índice de pestañas El orden de cada control a medida que el usuario navega por el formulario presionando Tabulador
Etiqueta Identifica el nombre de la etiqueta asociada con el cuadro de texto
Ancho, Alto, Posición superior e inferior Indica la posición relativa y el tamaño del cuadro de texto
Estilo y color de fondo Establece el estilo de fondo y el color del cuadro de texto
Estilo y color del borde Establece el estilo y el color del borde alrededor del cuadro de texto
Tamaño de fuente, grosor, subrayado, cursiva, color y alineación Establece la fuente y el estilo
Márgenes y espaciado de relleno:establece los márgenes y el relleno alrededor del interior del cuadro de texto

Las propiedades se pueden configurar mediante la Vista de diseño y se pueden guardar con el formulario o informe. Las propiedades también se pueden cambiar usando el código VBA mientras se ejecuta el formulario. Para acceder a una propiedad en VBA, use el nombre del control, luego un punto y luego el nombre de la propiedad. Por ejemplo, el siguiente código cambia el color de fuente del cuadro de texto CustomerID a rojo:

IDCliente.ForeColor =vbRed

Las secciones que siguen proporcionan algunos ejercicios que combinan diferentes partes del lenguaje de programación VBA para personalizar el comportamiento de varios formularios de ingreso de datos.

Ejercicios de código VBA

Pruebe los siguientes ejercicios que personalizan formularios. Vuelva a consultar las secciones anteriores para ver ejemplos de código que se pueden adaptar al ejercicio actual.

Ejercicio 1

Modifique el formulario CustomerDataEntry para agregar dos controladores de eventos AfterUpdate que convertirán el nombre y el apellido en mayúsculas y minúsculas (cree un controlador AfterUpdate independiente para cada cuadro de texto). Escriba código para comprobar primero que el cuadro de texto no sea nulo antes de intentar convertir el texto.

Ejercicio 2

Modifique el formulario AccountsDataEntry para agregar un controlador de eventos AfterUpdate que mostrará un cuadro de mensaje de advertencia si el saldo de la cuenta es inferior a $5000. También cambie el color de fuente del cuadro de texto Saldo a rojo.

Ejercicio 3

Modificar el formulario de Entrada de Datos del Cliente. Cree una subrutina On Lost Focus que cambie la etiqueta del cuadro de texto FirstName a rojo (vbRed) si el usuario deja el cuadro de texto FirstName sin escribir nada. Establezca la etiqueta en azul (vbBlue) si hay algo en el cuadro de texto. En el siguiente ejemplo, no se escribió nada en el cuadro de texto FirstName y luego el usuario pasó al siguiente cuadro de texto, lo que provocó que la etiqueta FirstName se pusiera roja.

La siguiente página de este tutorial explica cómo manejar los errores en el código VBA.

Manejo de errores en VBA

Ocasionalmente, el código VBA se ejecutará en un error. Por ejemplo, si un cuadro de texto está vacío e intentamos convertir el contenido del cuadro de texto a mayúsculas y minúsculas, la función StrCnv fallará. Otro ejemplo es cuando ocurre la división por cero. Sin el manejo de errores, estos problemas pueden hacer que el programa VBA se bloquee. Cuando ocurre un error, un código especial puede entrar en acción para manejar el error y continuar procesando el código VBA.

Las dos características principales de manejo de errores de VBA son la instrucción On Error Goto y la instrucción Resume Next. Estas dos declaraciones de código de VBA funcionan juntas para evitar que VBA bloquee la aplicación.

La declaración On Error Goto informa a VBA sobre qué hacer cuando ocurre un error en una subrutina. La parte Goto de la declaración hace referencia a una etiqueta en otra parte del código donde el VBA seguirá funcionando. Una vez que el programa VBA llegue a la etiqueta, cualquier error aparecerá en un objeto llamado Err. La propiedad Err.Description contendrá una descripción de texto del último error encontrado. La instrucción Resume Next hará que el programa VBA continúe ejecutándose desde el punto en que ocurrió el error.

El siguiente ejemplo amplía la rutina FirstName_AfterUpdate presentada al comienzo de este tutorial. Ahora el programa VBA puede manejar cualquier error que pueda ocurrir en el programa.

Private Sub FirstName_AfterUpdate
     ' Subroutine to convert the FirstName of the customer to Proper Case
    On Error Goto FirstName_AfterUpdate_Error_Handler
     FirstName = StrConv(FirstName, vbProperCase)
     ' If the conversion was successful, exit this subroutine
     Exit Sub
FirstName_AfterUpdate_Error_Handler:
       ' If there is an error show the description of the error
      MsgBox Err.Description
      ' Resume with the next statement In the subroutine
     Resume Next
End Sub

la siguiente sección de este tutorial analiza cómo incluir código SQL dentro de VBA.

Ejecución de consultas SQL personalizadas en VBA

El lenguaje de consulta estructurado (SQL) es el lenguaje de programación utilizado en bases de datos relacionales como MS Access, SQL Server, Oracle y muchas otras. Las sentencias SQL se pueden usar para insertar, actualizar, eliminar y recuperar (seleccionar) registros de datos de las tablas (entre muchas otras capacidades). Un ejemplo simple de una sentencia SQL sería:

SELECT customerid, firstname, lastname
FROM  customer

El código SQL puede escribirse dentro de VBA y ejecutarse en el momento adecuado. Por ejemplo, se podría escribir una subrutina de VBA para consultar la tabla Customer para encontrar el CustomerID más alto. Luego, podríamos agregar 1 a este número para lograr un nuevo ID de cliente sin usar para un nuevo registro.

Los pasos generales para realizar este tipo de tareas son:

Crear una sentencia SQL

Ejecute la instrucción SQL utilizando la conexión de base de datos abierta (llamada CurrentDb en VBA)

Recuperar los registros resultantes y utilizar los datos recuperados

Para crear esta subrutina de VBA, abra el formulario CustomerDataEntry y obtenga las propiedades del campo CustomerID. En la pestaña de eventos, haga clic en los tres puntos a la derecha del evento On Dbl Click. Elija Code builder y el stub se creará de la siguiente manera:

Private Sub CustomerID_DblClick(Cancel As Integer)

End Sub

Agrega el siguiente código:

Private Sub CustomerID_DblClick(Cancel As Integer)
    ' Create a new CustomerID when user double-clicks in the CustomerID field
    On Error GoTo ErrorHandler
    Dim rstResults As Recordset ' This will hold the set of result records
    Dim strSQL As String        ' This variable will hold the text of the SQL Statement
    ' If there is nothing in the CustomerID text box
    If IsNull(CustomerID) Then
       ' Make the SQL statement
       strSQL = "SELECT MAX(customerid) + 1 AS NewID FROM customer"
       ' Run the SQL query against the current database
       Set rstResults = CurrentDb.OpenRecordset(strSQL)
       ' If at least 1 record is returned
       If rstResults.EOF = False Then
          ' Assign the NewID to the CustomerID field
          CustomerID = rstResults!NewID
       End If

        rstResults.Close              ' Close up the result set
       Set rstResults = Nothing      ' Empty out the result set
    End If
    Exit Sub

ErrorHandler:
    Set rstResults = Nothing
End Sub

El código se verá como el siguiente una vez que esté todo en su lugar:

Guarde el archivo y luego vea el formulario CustomerDataEntry. Navegue a un nuevo registro y luego haga doble clic en el campo CustomerID. Se debe crear automáticamente un nuevo CustomerID.