Cómo ejecutar una formula en consulta Access?

En las que según la fecha que le indique en una columna me indica el estado y en otra columna la cantidad de días.

No quiero seguir ingresando al "Generador de expresiones" y estar cambiando la fecha, por lo cual deseo que la consulta haga el calculo según la fecha que se encuentre en un cuadro de texto del formulario.

Campo original y que funciona bien:

ESTADO_REAL: SiInm(([DSC_ESTADO_CITA]="Cancelada" O [DSC_ESTADO_CITA]="Presente" O [DSC_ESTADO_CITA]="Ausente" O [DSC_ESTADO_CITA]="Reprogramada" O [DSC_ESTADO_CITA]="RESUELTO") Y ([COD_SERVICIO_ESPECIALIDAD]=998 O [COD_SERVICIO_ESPECIALIDAD]=999 O [COD_SERVICIO_ESPECIALIDAD]=0);"Resuelto";SiInm(([FEC_CITA]=#31/10/2020# Y [DSC_ESTADO_CITA]="Otorgada" Y [COD_SERVICIO_ESPECIALIDAD]=998);"Resuelto";SiInm([COD_SERVICIO_ESPECIALIDAD]=999 Y [DSC_ESTADO_CITA]="Cancelada";"Resuelto";"Pendiente")))

le que modifiqué la fecha por el campo del formulario:

ESTADO: SiInm(([DSC_ESTADO_CITA]="Cancelada" O [DSC_ESTADO_CITA]="Presente" O [DSC_ESTADO_CITA]="Ausente" O [DSC_ESTADO_CITA]="Reprogramada" O [DSC_ESTADO_CITA]="RESUELTO") Y ([COD_SERVICIO_ESPECIALIDAD]=998 O [COD_SERVICIO_ESPECIALIDAD]=999 O [COD_SERVICIO_ESPECIALIDAD]=0);"Resuelto";SiInm(([FEC_CITA]=[Formularios]![frm_Menu]![txtFecha_Corte] Y [DSC_ESTADO_CITA]="Otorgada" Y [COD_SERVICIO_ESPECIALIDAD]=998);"Resuelto";SiInm([COD_SERVICIO_ESPECIALIDAD]=999 Y [DSC_ESTADO_CITA]="Cancelada";"Resuelto";"Pendiente")))

pero se muestran estados incorrectos

-------------------------------------------------------------------------------------------------------------------------------------------------------

Campo original y que funciona bien:

DIAS_ESPERA: SiInm([ESTADO_REAL]="Pendiente";#31/10/2020#-[FEC_OTORGAMIENTO];SiInm([FEC_CITA]<[FEC_OTORGAMIENTO];0;[FEC_CITA]-[FEC_OTORGAMIENTO]))

Intente hacer lo siguiente pero no se muestra nada en la columna DIAS:

lo que esta en negrita es lo que modifiqué

DIAS: SiInm([ESTADO_REAL]="Pendiente";[Formularios]![frm_Menu]![txtFecha_Corte]-[FEC_OTORGAMIENTO];SiInm([FEC_CITA]<[FEC_OTORGAMIENTO];0;[FEC_CITA]-[FEC_OTORGAMIENTO]))

Luego investigue un poco y realice esta prueba, pero me da unos valores exagerados:

Expr1: Nz([Formularios]![frm_Menu]![txtFecha_Corte])-Nz([FEC_OTORGAMIENTO])

Como siempre.

Respuesta
1

No sé si lo he entendido, sería mejor una imagen, pero en la consulta, debajo del campo Fecha puedes poner en la casilla criterios

[Escriba una fecha]

Así, cuando vayas a abrir la consulta, te pedirá que escribas una, y esa fecha que escribes te limita los registros que va a mostrar.

Lo del resto de la instrucción, sería conveniente que mostraras una imagen de donde salen las expresiones.

Muchas gracias por tu respuesta!!

Omití adjuntar una imagen, pero aquí va:

Es una consulta, en la cual me filtra el estado y me dice el plazo de espera.

La tabla a la que se le esta haciendo dicha consulta, es una copia de un sistema local de mi trabajo, es algo complejo como lo trabajan, por esa razón el campo ESTADO_REAL tiene varias condiciones y si se cumplen va ser Resuelto o Pendiente, con el campo DIAS_ESPERA es algo similar al campo ESTADO_REAL.

Esa consulta, digamos que es un tipo "reporte" que consulto a la tabla  y luego exporto a Excel.

Desde el formulario controlo todo y tengo dos botones (Actualizar y Exportar).

Si coloco [Escriba una fecha] me lo va a solicitar como 10 veces ya que son varias consultas las que tengo y no es un filtro de fecha lo que realiza la consulta. 

Por ejemplo, el campo DIAS_ESPERA de la consulta, todos los meses debo ingresar a la consulta en modo diseño y cambiar la fecha que esta indicada en la expresión.

31/10/2020 lo cambio por 30/11/2020 para que la formula se ejecute con la fecha actualizada.

DIAS_ESPERA: SiInm([ESTADO_REAL]="Pendiente";#31/10/2020#-[FEC_OTORGAMIENTO];SiInm([FEC_CITA]<[FEC_OTORGAMIENTO];0;[FEC_CITA]-[FEC_OTORGAMIENTO]))

por esa razón fue que le cambié la fecha (#31/10/2020#)por esto:[Formularios]![frm_Menu]![txtFecha_Corte] a la expresión del campo DIAS_ESPERA(código que esta en la parte superior de este párrafo), pero no me esta funcionando.

lo que quiero es que la expresión capte la fecha que estoy colocando en el campo del formulario y con eso realice el cálculo de DIAS_ESPERA y me muestre el ESTADO.


                    

Vamos a hacer una cosa, si te parece bien y quieres, repito, si quieres. Haz una copia de tu base, o al menos de las tablas implicadas, con dos o tres registros inventados, y el(los) formularios y me la mandas a [email protected]

Estoy convencido de que puede hacerse más fácil.

Si lo haces, en el asunto del mensaje pon tu alias rmendez ya que si no sé quien me escribe ni los abro.

1 respuesta más de otro experto

Respuesta
1

Preparé este ejemplo, con base en el código donde modificó el formulario.

Consta de 2 formularios, el formulario menú y el subformulario donde se consulta, la idea es con base en el código que le suministro haga una función en un formulario continuo y en el campo "resultado" llame la función o lo puede incluir en una consulta. Este es el código del botón Ver Resultado.

NOTA: Si crea una función con el código debe cambiar Me. CtlResultado por nombre de la función, está debe retornar una cadena.

Trate de no utilizar SiInm() +o IIF() es confuso cuando esta anidado, además, va en contra del estándar SQL. Si quiere el ejemplo escríbame a [email protected] y con gusto se lo envío.

Hola

Tu ejemplo esta muy bueno, pero no me expliqué bien en mi pregunta.

Necesito que las expresiones de la consulta(en los campos DIAS_ESPERA y ESTADO_REAL), tome el valor del campo del formulario(fecha corte).

Tomando como ejemplo el campo DIAS_ESPERA de la consulta, necesito dejar de estar cambiando la fecha (31/10/2020) y que tome el valor de la fecha que indique en el formulario.

DIAS_ESPERA: SiInm([ESTADO_REAL]="Pendiente";#31/10/2020#-[FEC_OTORGAMIENTO];SiInm([FEC_CITA]<[FEC_OTORGAMIENTO];0;[FEC_CITA]-[FEC_OTORGAMIENTO]))

por esa razón fue que le cambié la fecha (#31/10/2020#)por esto:[Formularios]![frm_Menu]![txtFecha_Corte] a la expresión del campo DIAS_ESPERA(código que esta en la parte superior de este párrafo), pero no me esta funcionando.

En tu ejemplo hace lo que necesito pero lo muestra en un formulario y lo requiero en unas consultas que serán exportadas a Excel y otras consultas son solamente para contabilizar.

El SiInm() lo utilicé porque según lo que investigué se usa para expresiones en los campos de una consulta, pero igual en esto siempre aprendo algo nuevo y le agradezco el comentario.

Ahora le entiendo, he preparado el ejemplo pero utilizando los siguiente:

1 Variable Pública a nivel de módulo

1 Módulo de VBA con 2 funciones

1 Consulta

1 Formulario (menú)

Variable pública y módulo

Estas funciones se llaman desde la consulta:

Resultado de la consulta:

Resultado exportación a Excel:

Formularo frm_Menu

Este es el código de los botones:

Espero haber complementado la respuesta inicial y que lo puede implementar, si le interesa el ejemplo escríbame a [email protected] con gusto se lo suministro.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas