Entidades y atributos

La información almacenada en una base de datos pertenece a generalmente a objetos reales que es posible identificar fácilmente. Esos objetos cuentan con una serie de propiedades. Por ejemplo, un libro tiene un titulo, un editorial, un autor, un ISBN, un precio, un numero de paginas, etc. Toda la información de ese objeto formaría una entidad, mientras que cada dato seria un atributo de la entidad. Los atributos de una entidad se parten en una fila ocupando cada atributo en una columna.

Estructura de datos

Los RDBMS introducen la información en las tablas que pueden ser consideradas como conjunto de entidades cada una de las cuales tiene una serie de atributos. Los atributos almacenan datos en un cierto dominio y en algunas ocasiones sirven para establecer relaciones con otras entidades. Los puntos siguientes son un recorrido rápido por los conceptos mas importantes relativos a la estructura  de la información en un RDBMS, independiente de cual sea este.

Funciones

En el capitulo anterior vimos lo procedimientos sub, otro de los tipos de procedimientos son las Funciones, que al igual que los procedimientos sub están delimitados por Function y End Function.

La principal diferencia entre un procedimiento sub y un procedimiento Function es que este ultimo devuelve un valor. Entre los delimitadores se escribe el código que va a realizar las tareas que deseemos y al final devolverá un valor, son las llamadas funciones.

Para declarar una Función empezaríamos, por ejemplo poniendo la palabra Public si quisiéramos que esta función sea accesible desde cualquier parte de Access, después la palabra Function, después el nombre de la Función, después del nombre abriríamos los paréntesis y pondríamos los parámetros que necesitáramos cerraríamos el paréntesis y finalmente pondríamos el tipo de datos que devolvería la función.

Supongamos que quisiéramos realizar una operación y que nos devolviera el resultado.

Esta seria la función:

Public Function Operacion(Valor1 As Double, Valor2 As Double) As Double

Operación = Valor1 * Valor2

End Function

Vamos aprobar esta Función en el formulario que hicimos anteriormente quitando el codigo que pusimos en el botón de comando cmdEjecutarProcedimiento, y colocando el siguiente.

Me.lblResultado.Caption = Operacion(Me.txtNumero1.value, Me.txtNumero2.value)

Quedando de esta manera

Private Sub cmdProcedimiento_Click()

Me.lblResultado.Caption = Operacion(Me.txtNumero1.value, Me.txtNumero2.value)

End Sub

Como podrán observar el código anterior ocupaba mas líneas de código para esta función solo ocupamos una. Tambien les comento este pequeño fragmento de código.

Me.txtNumero1.Value

En la parte Me., del código representa el formulario hace la referencia.

En la parte txtNumero1, representa el cuadro de texto que se encuentra en el formulario.

En la parte Value, representa el valor que contiene el cuadro de texto que se encuentra en el formulario.

Me.txtNumero1.Value, Entonces con el fragmento de código este, decimos que tomamos el valor del cuadro de texto que se encuentra en ele formulario actual.

Notaran que si ejecutan la función sin valores en los cuadro de texto aparecerá el siguiente mensaje de error.

Para esto existen dos funciones que podemos unir y evitar este error de valores nulos(campo vacío).

Para evitar este error que podemos hacer bueno, primero tenemos que convertir el valor del cuadro de texto a numérico, con la función Val(cadena), como se muestra en el ejemplo:

La funcion Val() permite convertir cualquier cadena a Numero.

Val(«23″) = lo convertiría a 23

Las comillas representan un valor cadena(String)

Pero que pasa si el al ejecutar la función Val() no tenemos nada generaría otro error de que no se tiene un valor numérico, entonces para eso existe la función Nz(Valor), esta función, opera así:

Nz(txtNumero1.value,»0»)

Aquí decimos que si el valor del cuadro de texto txtNumero1.Value es nulo(esta vacío), que le asigne el valor «0» de tipo cadena(String).

Entonces ya sabemos convertir un valor nulo a un tipo cadena, y una cadena que es numero, lo sabemos convertir a un valor numérico, como podríamos unir las dos funciones, ejemplo:

Val(Nz(txtNumero1.Value),»0″)

Aquí esta el ejemplo, el cual tiene el siguiente orden, es como las matemáticas primero se ejecutan el paréntesis que se encuentra adentro y después el de afuera.

Aquí primero se ejecuta la función Nz(txtNumero1.Value,»0″), porque?, porque primero tenemos que evaluar el valor del cuadro de texto txtNumero1, lo evaluamos y si es nulo(si esta vacío) entonces le ponemos la cadena numérica «0», porque cadena numérica?, porque una palabra no se puede convertir en un numero, pero un numero que esta como cadena si se puede convertir en numero, entonces decimos que si es nulo le aplicamos la cadena «0», al evaluar la función Nz(), entonces que nos queda no podemos multiplicar valores de cadena, lo que hacemos es convertirla a un valor numérico, ejemplo:

Val(Nz(txtNumero1.Value),»0″)

Aquí es cuando la convertimos, la conclusión es, la siguiente,

Si el valor del cuadro de texto txtNumero es nulo entonces ponle la cadena «0», pero no se puede multiplicar un valor cadena, entonces la convertimos a numero.

Procedimientos Sub

Un procedimiento Sub llamado también Procedimiento es un conjunto de código que realiza determinadas tareas, suele estar contenido entre las expresiones Sub y End Sub.

 

Como vimos en el ejemplo de Introducción:

 

Sub intro()

‘Declaramos una variable tipo cadena

Dim cadena As String

cadena = «Hola, el curso se llama CursoVBA»

‘Utilizamos la función Debug.Print para imprimir el contenido de cadena en la ventana inmediato

Debug.Print cadena

End Sub

 

Aquí vemos que el nombre del Procedimiento se llama intro dentro del procedimiento intro tenemos un pequeño codigo el cual le indicamos que declare una variable llamada cadena de tipo String y le asignamos un valor(«Hola, el curso se llama CursoVBA») el cual le pedimos que lo imprima en la ventana inmediato con la función Debug.Print cadena.

 

El termino de Sub puede ir precediendo de otras expresiones , por ejemplo para determinar el alcance en el que puede ser llamado el procedimiento.

 

Al procedimiento se le puede pasar una serie de datos para que lo use internamente, a esos datos se les llama Parámetros. Ejemplo

 

Sub Operación(Valor1 as Integer)

Dim Valor2 as Integer

Dim Resultado as Double

 

Resultado = Valor1 * Valor2

Debug.Print Resultado

 

End Sub

 

En el modulo conceptos escribimos el siguiente código:

 

Public Sub Multiplicación()

‘declaramos 2 variables de tipo entero, las variables enteras se declaran con Integer

‘declaramos 1 variable de tipo Double, para ver el resultado con decimales

Dim Valor1 As Integer

Dim Valor2 As Integer

Dim Resultado As Double

 

‘le asignamos valores a las variables enteras

Valor1 = 10

Valor2 = 15

 

‘hacemos la operación

‘aquí le decimos a la variable resultado que es igual ala multiplicación de las variables

‘valor1 y valor2

Resultado = Valor1 * Valor2

 

‘imprimimos el resultado

Debug.Print Resultado

 

End Sub

 

Si ejecutamos este código nos mostrara el resultado en la ventana inmediato.

 

Realizaremos el siguiente ejercicio de lo que hemos visto hasta ahora.

 

Pasos:

  • Primero vamos a crear un formulario con el nombre alcance y le vamos añadir 4 objetos 1 etiqueta llamada lblMostrarResultado, en la etiqueta le ponen como titulo valor de la multiplicación y un botón de comando con el nombre de cmdEjecutarProcedimiento, cuadros de texto con el nombre de txtNumero1 y txtNumero2 y sus etiquetas que muestren Numero1 y Numero2, no le asignamos nombre a las etiquetas.
  • Creamos un procedimiento sub con el nombre Operacion2 y le ponemos como parámetros Numero1 y Numero2 de tipo Double.
  • Declaramos la variable como publica llamada Resultado de tipo Double
  • Al tener todo lo anterior les mostrare como acceder al objeto lblResultado desde el modulo, muestro las imágenes.

 

El código debe quedar de esta manera:

 

Option Compare Database ‘Aparecen por default

Option Explicit ‘Aparecen por default

 

Public Resultado As Double

 

Sub Operacion2(Numero1 As Double, Numero2 As Double)

 

Resultado = Numero1 * Numero2

 

Forms![Alcance]![lblResultado].Caption = Resultado

 

End Sub

 

El capitón cambia el texto que muestra la etiqueta, el Titulo

 

El código del botón de comando debe quedar de la siguiente manera:

 

Private Sub cmdProcedimiento_Click()

Call Operacion2(Me.txtNumero1, Me.txtNumero2)

 

End Sub

Imagen del Formulario:

 

Espero sus comentarios para resolver las dudas que tengan por si no me supe explicar o no me entendieron. Para poder seguir con el curso

 

Saludos

Alcance de las constantes y Variables

Al declarar en la cabecera de un modulo una variable con Dim, o una constante con Const hacemos que esa variable y esa constante solo sean visibles desde dentro del código del modulo.

Para que puedan verse desde fuera es necesario ponerles la palabra Public , esto se hace de forma diferente para las variables y constantes como se muestra en el siguiente ejemplo.

 

Option Compare Database ‘Aparecen por default

Option Explicit ‘Aparecen por default

 

Public Const Pi As Double = 3.1416

Public Precio As Currency

Public Nombre As String

 

En el caso de la constante solo se le agrego la palabra Public al principio, porque?, porque tenemos que decirle que es constante la declaración de Pi, si no fuera constante solo se sustituye Dim por Public.

 

En el ejemplo con Currency hacemos que la variable Precio sea de tipo Moneda, un tipo de datos creado para manejar datos monetarios, con String hacemos que la variable Nombre sea tratada como una variable de tipo cadena, que permite manejar cadenas de caracteres.

Conceptos

En este capitulo creamos un modulo y lo guardamos con el nombre de conceptos, después escribimos el siguiente código.

Option Compare Database ‘Aparecen por default

 

Option Explicit ‘Aparecen por default

Const Pi As Double = 3.1416

En esta ultima línea declaramos una constante llamada Pi del tipo Double(un valor numérico de cómo flotante de 8 bits) y le asignamos un valor a Pi que es 3.1416.

Al declarar una constante nos impide que en otro punto del modulo le reasignemos una valor, porque, porque pi actualmente lo declaramos con el valor de 3.1416 y como constante(Const), entonces esto quiere decir que no podemos hacer lo siguiente.

Pi = 30.25

Una constante es simplemente algo que no se puede cambiar.

Para declarar algo que si se pueda cambiar entonces recurrimos alas Variables.

Dim Precio As Currency

Dim Nombre As String

 

Mas adelante explicaremos String y Currency.

Los módulos

Los módulos son los objetos en los que se guarda el código que va utilizar VBA.

Existen tres tipos de módulos:

  • Módulos generales
  • Módulos asociados a formularios e informes
  • Módulos clase

Vamos a crear una base de datos con el nombre de CursoVBA.

Al crear el modulo vacío le deben aparecer las siguientes líneas de código:

Option Compare Database

Option Explicit

Si no aparece Option Explicit, vamos hacer lo siguiente:

Desde la ventana editor que se ha abierto presionamos la opción del menú:

Herramientas > opciones

Activamos la siguiente casilla:

Al terminar de hacer esto cerramos el modulo guardando los cambios y después eliminamos el modulo creado y creamos otro y veremos que ya aparecerá el Option Explicit.

Para nuestro primer ejemplo creamos un modulo y lo guardamos con el nombre Introducción, una vez echo esto colocamos el siguiente código:

Sub intro()

‘Declaramos una variable tipo cadena

Dim cadena As String

cadena = «Hola, el curso se llama CursoVBA»

‘Utilizamos la función Debug.Print para imprimir el contenido de cadena en la ventana inmediato

Debug.Print cadena

End Sub

Ejecutamos el código presionando F5 o al dar clic en el botón de play.

Este es un ejemplo sencillo mas adelante explicaremos como utilizar estos módulos en botones de comando, cuadros combinados, etc.

¿Que es VBA?

VBA quiere decir Visual Basic para Aplicaciones.

 

Es un conjunto de librerías desarrollado por Microsoft que incluye entre otras cosas un entorno de desarrollo y un lenguaje de programación.

 

VBA no es exclusivo de Access lo podemos encontrar también en todas las aplicaciones de Office como Word, Excel .

Bienvenidos!

Bienvenidos al BLOG de TodoAccessVBA, esto es con la finalidad de aportar una pequeña ayuda sobre todo lo que puede hacer Access, empezare un curso sobre programación VBA y Acceso a datos con Access utilizando ADO, espero sea de su agrado y no olviden suscribirse.

 

 

Saludos

Proveedores y Controladores

Nosotros contamos con los servicios de ADO.NET para acceder a los orígenes de datos utilizando para ello un modelo de objetos y componentes que veremos mas adelante. ADO.NET a su vez precisa de otros elementos para poder efectuar su trabajo, entre ellos los proveedores y los controladores .

 

Un proveedor ADO.NET es una implementación especifica de una serie de componentes que facilitan el acceso a un determinado orígenes de datos. Visual Basic .NET incorpora por defecto dos proveedores de datos .NET: uno para SQL Server y otro capaz de emplear cualquier controlador OLEDB, hay disponibles dos mas que son uno para Oracle y el dirigido al uso de un controlador ODBC.

Los proveedores .NET aparecen, desde el punto de vista del desarrollador, como una serie de definiciones de clases alojadas en un ámbito con nombre o namespace, clases que pueden usar para acceder a un determinado origen de datos. El proveedor de datos SQL Server y Oracle son específicos comunicándose directamente con el software cliente de esas bases de datos sin intermediario alguno. Los proveedores OLE DB y ODBC, por el contrario son de tipo genérico diseñados para aprovechar todos los controladores que ya hay disponibles de esos dos tipos.

En la siguiente figura puede ver representado dos supuestos en los que un cliente necesita acceder a dos orígenes de datos diferentes: una base de datos SQL Server y una base de datos IBM DB2. En el primer caso puesto que existe un proveedor .NET especifico, el cliente tan solo precisa el software cliente de SQL Server y ya, el segundo, por el contrario, no existe ese proveedor especifico pero si un controlador ODBC que sabe como comunicarse con el software cliente de DB2. Utilizamos por tanto el proveedor genérico ODBC .NET que a su vez empleara el controlador ODBC adecuado.

El acceso con proveedores genéricos implica mas carga de proceso y por tanto un menor rendimiento en la aplicación. En algunas ocasiones sin embargo puede ser la única vía para poder llegar a cierta informació