Quien me puede orientar en este código vba en access

Comunidad reciban todos ustedes un cordial saludo. Mi pregunta está en función a este dilema que se me registra cuando hago lo siguiente:

En un módulo establecí dos variables publicas con tipo dato long

public Pbtxtwage1 as long

public Pbtxtwage2 as long

Luego... Uso dos funciones para almacenar lo que se registre en estas dos variables publicas

public function lvpbywage1() as long

lvpbywage1 = Pbtxtwage1

end function

public function lvpbywagedos() as long

lvpbywagedos = Pbtxtwage2

end function

luego.... Las acomodo en una consulta de selección en el critero exponiendo asi:

>=lvpbywage1()  Y <=lvpbywagedos()

Luego en un formulario tengo dos cuadros de edición

Hago uso del msgbox para ver los valores que anoté

Con esto se supone debo enviarlos a un formulario para generar una salida pero el primero me lo lee el segundo no y obviamente la presentación de datos sale en 0.

Que será que estoy haciendo mal.

1

1 Respuesta

828.250 pts. No responderé preguntas de usuarios que no valoren las...

En lo que describes te "saltas" varios pasos de lo que haces, por ejemplo cómo asignas los valores a las variables públicas y dónde, cómo cargas los datos en esos cuadros de texto, cómo los envías la formulario...

Pero, independientemente, si en el msgbox la segunda variable te devuelve un valor 0, será porque no se le llegó a asignar correctamente el valor, o lo perdió en el proceso por algún error...

Si es lo primero, se resuelve fácilmente asignando el valor a la variable.

Si es lo segundo, habría que ver dónde está el problema, o en vez de usar variables públicas, usar variables temporales (Neckkito explica perfectamente su uso en este arítuculo: http://neckkito.xyz/nck/index.php/manuales/258-tempvars-variables-temporales )

Un saludo.


     bit.ly/ForoNkSv 

Hola Rojo como estas hoy. Gracias por tu respuesta. ¿mra hay un lugar en internet donde encuentre todo lo relaciondo con funciones publicas para access y en especial como trabajar los tipo dato long con operadores lógicos dejar definida la función y ya solo en la consulta de selección usarla?

Mira por ejemplo con uso de controles de formularios lo uso así:

>=[Formularios]![FmMenuCadenaYwage]![txtwage1] Y <=[Formularios]![FmMenuCadenaYwage]![txtwage2]

¿Pero a nivel de funciones como se usa?

Sabemos que la función fuera la que fuera o la asignada en la consulta se llama

funciondefinida()

la he usado para tipo dato string

pero ahora me toca usarla para tipo long

Y ahí es donde tengo el problema.

La segunda se me pierde

Los datos están en un formulario A y la consulta que se realiza están en un formulario B

Cuando el formulario B se habré me pide parámetros. Muchas gracias por tu enorme ayuda amigo.

Esta es la instrucción SQL

SELECT CgCmlDini.txt_L0INP001, CgCmlProductor.NombL1AAP004, CgCmlProductor.NumeL1AAP006, CgCmlProductor.KEYLLAVE, CgCmlProductor.textL1AAP007, CgCmlProductor.slo_L1AAP008, CgCmlProductor.Municipio, CgCmlProductor.textL1AAP010, CgCmlDini.dataL0ENP001, [TYwage Final].INGRESOTOTAL, [TYwage Final].ADICIONALES, [TYwage Final].GASTO, [TYwage Final].Ywage
FROM ([TYwage Final] INNER JOIN CgCmlDini ON [TYwage Final].KEYLLAVE = CgCmlDini.KEYLLAVE) INNER JOIN CgCmlProductor ON [TYwage Final].KEYLLAVE = CgCmlProductor.KEYLLAVE
WHERE ((([TYwage Final].Ywage)>=[Formularios]![FmMenuCadenaYwage]![txtwage1] And ([TYwage Final].Ywage)<=[Formularios]![FmMenuCadenaYwage]![txtwage2]));

la parte final despues del where reemplazarla por las funciones tipo dato long

lvpbywage1()

lvpbywage2()

Las funciones ya las has definido como Long, con lo que el dato que devuelven es un Entero Largo (Long), y al declararlas como Public, son accesibles desde cualquier lado.

También es correcto el uso que haces inicialmente de las funciones en el criterio de tu campo (>=lvpbywage1() Y <=lvpbywagedos() o incluso podrías ponerlo como Entre lvpbywage1() Y lvpbywagedos()). El lo mismo que si quieres filtrar un campo de fecha y pones (Entre Fecha() y Fecha()-10)

En la SQL te quedaría:

WHERE ((([TYwage Final].Ywage)>=lvpbywage1()  And ([TYwage Final].Ywage)<=<=lvpbywagedos() ));

Como digo, si no te devuelve resultados, o es porque alguna variable no coge bien el valor, o porque no encuentra coincidencias que cumplan simultáneamente las dos condiciones del WHERE...

Dame un rato y te envío un ejemplo para que lo veas...

Ya le hice pero no me sale aún me envia datos pero no toma lectura el primero debe ser mayor o igual y el segundo debe ser menor o igual 

Al usar entre toma lo que esté dentro de ello pero igual si doy este ejemplo

valor A 35000

valor B 45000

muestra algo menor de 45000 pero igual me mete los valore menores de 30000

Te he preparado este mini-ejemplo, con dos formas de asignarle el valor a las variables publicas, y en ambos casos la consulta se filtra correctamente...

En tu caso desconozco dónde o porque te falla, pero alguna cosa has de tener mal hecha...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas