Imprimir página | Cerrar ventana

Asignar valor a Function

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=84495
Fecha de impresión: 20/Octubre/2019 a las 04:54


Tema: Asignar valor a Function
Publicado por: Jaimevc
Asunto: Asignar valor a Function
Fecha de publicación: 15/Mayo/2019 a las 04:35
Buen día, desde ya les agradezco su tiempo, verán tengo el siguiente caso:

Tengo una consulta en Access, una normal no de VBA (pondré imagen), ahora en la sección de los criterios me gustaría ingresar el valor de una variable creada desde mi formulario.
Según lo que he investigado debo hacerlo por medio de una función, así que hice lo siguiente:

Creé un módulo y declaré una variable pública, además creé una función y le asigné el valor de la propia variable:

Public Var1 As String

Public Function MiDato() As String

MiDato = Var1

En el botón en su evento al hacer click le asigno un valor a la variable del módulo, además este botón ejecuta la consulta:

Var1 = Me.Campo1.Value

DoCmd.OpenQuery "Consulta1" acNormal
DoCmd.Close acQuery "Consulta1" acSaveYes

Ahora en mi consulta de Access en el campo donde van los criterios le puse:

= MiDato()

Pero al dar click en el botón simplemente la consulta se queda vacía, no me muestra ningún dato, espero puedan ayudarme.

La imagen de la consulta:




Respuestas:
Publicado por: mounir
Fecha de publicación: 15/Mayo/2019 a las 14:03
Hola!

Sí te he entendido bien no hace falta ninguna función, simplemente en criterios de la consulta y con el generador de expresiones lo podrías hacer, sería algo así:

En criterios escribes:

Forms![Nombredelformulario]![Nombredelcampo]

-------------
Un Saludo.


Publicado por: Jaimevc
Fecha de publicación: 15/Mayo/2019 a las 16:46
Si tienes razón, de acuerdo a lo que he comentado si sería esa la solución, veo que me faltó comentar un poco  más del programa, la verdad sentí que si lo comentaba iba a poner mas complejo el tema y no me iban a entender, pero bueno aquí va:

En el formulario tengo una lista desplegable en la cual selecciono por medio de qué va a ser mi búsqueda, si por nombre o apellido, y debajo está precisamente el campo desde el cual se tomará el dato.

Dependiendo de la opción que se seleccione el dato del campo se almacenará en uno o en otra variable.

Eso amplia mi código a dos variables y dos funciones en el módulo:

Public Var1 As String
Public Var2 As String

Public Function MiDato1() As String
MiDato1 = Var1

Public Function MiDato2() As String
MiDato2 = Var1

Ahora en el Botón puse el siguiente código:

If Me.List.Value = "Nombre" then
Var1 = Me.List.Value
Else
If Me.List.Value = "Apellido" then
Var2 = Me.List.Value
End if
End If

Y en mi consulta en la parte del campo Nombre tengo como criterio
=MiDato1()
y en el campo de Apellido tengo como criterio
=MiDato2()

Como ven, esto se amplió mucho mas, en sí lo que quiero es seleccionar que tipo de busqueda voy a hacer y entonces hacer la busqueda y que me filtre los datos según mi selección, pero al correr el programa simplemente pareciera que no tiene ningún dato almacenado en la función.

Espero que me entiendan lo que trato de hacer, agradezco de cualquier forma su ayuda.


Publicado por: mounir
Fecha de publicación: 15/Mayo/2019 a las 23:46
Hola!

Puedes hacer referencia a la función desde el generador de expresiones:

Prueba sin el signo igual (=)

Nombre en criterio
MiDato1()
y en el campo de Apellido en criterio
MiDato2()

-------------
Un Saludo.


Publicado por: Jaimevc
Fecha de publicación: 16/Mayo/2019 a las 02:40
Ya lo he hecho así y sigue dandome la consulta vacía. La vedad núnca había usado una función, así que ahí es donde creo que está el detalle, a lo mejor no lo estoy haciendo bien en esa parte, ya leí un montón pero aún sigue quedandome vacía, seguiré leyendo, a lo mejor hay algo por ahí que me haga comprender el uso correcto, o la forma de poder llevar el valor de una variable a la consulta. Y es que no he querido meterme a las consultas en VBA porque la verdad me da un poco de miedo, lo que estudié no tiene nada que ver con programación pero igual me gusta jeje. Espero pronto encontrar una solución, si no pues tendré que usar un segundo Texbox para poderlo hacer como tu me dijiste, pero no creo que me dé por vencido aún, en dado caso creo que intentaría hacer la consulta en Vba y ver si se puede. Gracias por el apoyo.


Publicado por: Mihura
Fecha de publicación: 16/Mayo/2019 a las 09:01
Como te dice Mounir te tiene que funcionar, yo he probado esto:

Global Xs As String

Xs = "Luis"

Function ValorGlobales() As String
    ValorGlobales = Xs
End Function


y la consulta:

SELECT Clientes.Codigo, Clientes.Nombre, Clientes.Literal
FROM Clientes
WHERE Codigo < 5 AND Nombre=ValorGlobales()

da el resultado que debe:

ClientesConsulta
Codigo Nombre
2 Luis



-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: lbauluz
Fecha de publicación: 16/Mayo/2019 a las 14:36
No tengo el código, evidentemente, pero ¿estás seguro de que la variable Var1 no está definida nuevamente como local?

Luis


-------------
Estos son mis principios. Si no le gustan... tengo otros


Publicado por: Jaimevc
Fecha de publicación: 17/Mayo/2019 a las 01:50
Tenían razón, las tenía como locales, todo solucionado, muchas gracias, me ayudaron bastante, y pues aprendí algo nuevo.



Imprimir página | Cerrar ventana