Jugando con TempVars en Access 2007

Acces 2007 no añade niguna innovación a VBA a no ser las necesarias para manejar sus nuevos controles, o tipos de datos o las nuevas funcionalidades de éstos. Sin embargo, por necesidades de sus nuevas macros embebidas, añade una colección nueva de objetos, TempVars, con unas características de lo más interesantes.

TempVars, abreviatura de "Variables Temporales" es una colección de hasta 255 objetos que almacenan valores tipo Variant que tienen alcance global y dos propiedades: "Name" y "Value".

Ahí es nada. Tenemos algo que equivale a una variable globlal de la que podemos obtener o asignar su propiedad "Name" por código y que, como miembro de una colección, podemos añadir o quitar sobre la marcha, también por código.

No hace falta declaración previa y sólo asignándole un nombre y un valor es suficiente (Aunque tenemos el método Add). Por ejemplo, podemos decir:

TempVars!Mifecha = Date()

Y a continuación podremos acceder a su valor desde cualquier punto de nuestra aplicación, o, desde cualquier punto de nuestra aplicación, podemos decir:

TempVars.Remove "Mifecha"

A simpre vista, no parece gran cosa, pero estas características nos permiten hacer cosas como, por ejemplo, abrir un formulario en modo diálogo, pasarle como argumento el nombre de una variable, crearla sobre la marcha en el formulario diálogo asignándole valor y recuperarla y destruirla desde el formulario llamador:

DoCmd.OpenForm "MiformularioDialogo", , , , , acDialog, "Resp_" & Me.Name

Respuesta = TempVars("Resp" & Me.Name).Value

TempVars.Remove  TempVars("Resp" & Me.Name)

En el formulario diálogo sencillamente habríamos tenido que escribir:

TempVar(Me.OpenArgs) = MiValor

Parece interesante, pero no es gran cosa ¿Hay algo más?

Por supuesto :-) Cuando decimos que el alcance abarca toda nuestra aplicación, es toda nuestra aplicación, incluidas las consultas. Sí, sí, las consultas. Algo así es válido:

TempVars!MisApellidos = "Bengoechea Ibaceta"

"SELECT * FROM CLIENTES WHERE Apellidos = TempVars!MisApellidos"

¡Y funciona! Ya no es necesario construir la cadena SQL concatenando variables y delimitadores, la expresión anterior sustituye perfectamente a  

MisApellidos = "Bengoechea Ibaceta"

"SELECT * FROM CLIENTES WHERE Apellidos = '" & MisApellidos & "'"

Que no parece gran cosa, pero si en Vez de "Bengoechea Ibaceta" fuera "O'Donell", con TempVars, sería exactamente igual, pero construyendo la cadena tendríamos que añadirle bastante complicación.

Evidentemente, se parece mucho al uso de Parameters, pero más sencillo. Claro, que Parameters nos permite por ejemplo usar directamente el valor de un cuadro de texto, lo que también nos ahorra formateo de cadenas, delimitadores etc. ¿Se podrá hacer lo mismo con TempVars? Pues probamos:

Private Sub Comando22_Click()
TempVars!FiltroFecha = Me.FiltroFecha.Value
Me.Filter = "fecha_proceso = Tempvars!Filtrofecha"
Me.FilterOn = True
TempVars.Remove "FiltroFecha"
End Sub

¡Y funciona! Ha interpretado correctamente la fecha sin tener que pasarla al formato americano ni añadirle delimitadores.

Pensándolo bien, no necesitamos escribir la consulta en código VBA, puesto que no hay que construirla, que siempre será igual. Podemos tenerla guardada y simplemente, asignar los valores a nuestras variables TempVars cuando queramos.

Me parece que a partir de ahora vamos ausar mucho TempVars

Published 24/5/2007 23:55 por Chea
Archivado en: ,

Comentarios

# re: Jugando con TempVars en Access 2007

Friday, May 25, 2007 11:02 AM por CarCar

No estás tú disfrutando ni nada, con el nuevo "juguete" del Access 2007. :-)

Tengo pánico a instalarlo, pero leyéndote y viendo lo enamorado que te está dejando, cada vez se me va quitando más el miedo.

# re: Jugando con TempVars en Access 2007

Friday, May 25, 2007 11:10 PM por Chea

Ánimo que te va a gustar.

Al principio tiene cosas chocantes, pero al poco de usarlo resulta mucho más cómodo que versiones anteriores, incluso para trabajar con una versión anterior.

# re: Jugando con TempVars en Access 2007

Wednesday, December 05, 2007 12:23 AM por cocotero

No tengo ni idea de Programación VBA, pero tengo una aplicación montada a base de consultas, formularios y macros. Intento utilizar las Variables temporales a través de macros con "DefinirVariableTemporal" y "Quitarvariabletemporal" para una gestión de formularios.

En las consultas utilizo la siguiente condición:

[Variables temporales]!["TIPO_INFORME"]="Calendario"

Pero no me funciona nada. Se supone que al definir la variable temporal, se asigna un valor, que podría visualizar en cualquier formulario o utilizar en las consultas, pero esto no es así.

¿Alguna sugerencia?

Gracias y saludos

# re: Jugando con TempVars en Access 2007

Thursday, July 10, 2008 6:35 PM por Fer_arza

tengo un problema con los informes a la hora de la impresion ya que me desfasa los cuadros y en vez de imprimir todo junto me lo separa por hojas que hago?

# re: Jugando con TempVars en Access 2007

Saturday, February 06, 2010 10:40 AM por Di

Gracias, me ha servido de ayuda.

Deja tu comentario

(requerido) 
(requerido) 
(opcional)
(requerido)