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
7 Responsesso far
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.
Á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.
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
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?
Gracias, me ha servido de ayuda.
Me ha servido de mucho. Gracias
En el capítulo anterior habíamos usado ingredientes mágicos de Access 2007 para