Dos dudas sobre variables temporales y where en macros

Sé que en VBA se puede declarar si una variable es numérica, de fecha, de cadena, etc.

Pero, en las macros de Access, al definir una variable temporal, parece que no es posible efectuar esta declaración, así que mi duda es: ¿Con qué carácter se almacenan estas variables temporales?

Está claro que si el contenido de la variable es Pepe, se almacena como variable de cadena, pero, si la variable es 17, ¿se almacena como un número o como una cadena?

Y la segunda duda es, ¿por qué hay veces que al especificar el contenido de la condición where hay que usar el formato ="[Tabla].[Campo]..." y otras veces lo que pretendes se consigue utilizando el formato [Tabla].[Campo]..., sin poner un signo igual al principio y sin comillas?

Si no funciona un formato, uso el otro, pero por más vueltas que le he dado no he conseguido descubrir la razón de que unas veces la condición funcione sin comillas y otras no.

1 respuesta

Respuesta
2

Las Variables Temporales son objetos de Tipo Variant, que admiten cualquier tipo de dato, lo mismo que en VBA cuando haces Dim variable As Variant, o simplemente Dim Variable. Es el propio Access el que interpreta el valor introducido para tratarlo como número, texto, fecha...

Por tanto si a una variable temporal le asignas un 17, lo tratará generalmente como un número.

Aquí puedes profundizar en ellas:

https://neckkito.xyz/nck/index.php/manuales/258-tempvars-variables-temporales 

https://geeks.ms/access/jugando-con-tempvars-en-access-2007/ 

En cuanto a la segunda duda, normalmente en la condición WHERE (al menos en mi versión de Access) el = ya viene por defecto fuera del cuadro donde escribes la condición:

Y por tanto el criterio va directamente (sin signo igual al principio ni comillas)

En otra acciones, como por ejemplo la de enviar correo electrónico, si en el "Texto del mensaje", por ejemplo pones:

"Estimado Sr." (así, con las comillas)

En el mensaje te saldrá:

"Estimado Sr." (también con comillas).

Pero si pones:

="Estimado Sr."  (con signo igual y comillas)

En el mensaje saldrá:

Estimado Sr. (sin comillas)

Si quieres encadenar el valor de un campo, debes usar obligatoriamente el = al principio:

="Estimado Sr. " & Formularios![FDatos]![Usuario] 

Y el resultado sería:

Estimado Sr. Javier

Si no hubieras puesto el igual al principio, el resultado sería:

"Estimado Sr. " & Formularios![FDatos]![Usuario]

Es decir, si escribes sin igual al principio, se entiende que el contenido de ese argumento es una cadena de texto (y como tal no va a la tabla, formulario a recoger un dato). Si le antepones el signo igual, se entiende que es una expresión, y permite ejecutar operaciones, encadenamientos...

Muchas gracias por la explicación, y gracias adicionales por el enlace al manual sobre variables temporales.

Una duda adicional. ¿Es al construir expresiones encadenadas cuando debo usar los operadores en inglés?

Mi versión de Access está en español y también he visto que, unas veces, puedo usar sin problemas los operadores O o Y, por ejemplo, pero, otras, debo usar los operadores en inglés: OR o AND, para obtener resultados.

Yo para evitar problemas uso siempre los operadores en inglés, a fin de cuentas, si los escribes en español, access los traduce a la hora de aplicarlos. Ten en cuenta que las macros no son más que una representación "visual" de pequeños fragmentos de código, y en código va todo en inglés ( y americano, en concreto)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas