Filtrar registros de un formulario basados en campos calculados de una tabla

Tengo una base de datos con la tabla SERVICIO y en ella los campos "Fecha_Corte", "Sumin_Luz" y "Cod_Servicio". ( Los datos de los campos de fecha son expresados de la siguiente manera 24/02/2018 )

He creado un formulario que se basa en esta tabla. Y necesito poder filtrar los registro del formulario según el mes y el año que se indiquen en el campo "Fecha_Corte". No lo he podido lograr ( no se exactamente como y si hay alguna forma, me gustaría saberla) Por lo que he creado campos calculados en base al campo "Fecha_Corte", que me muestre el mes y el año basados en cada fecha: Por ejemplo: si tengo 24/02/2018 automáticamente se llena el campo "Mes" con Febrero y el campo "Año" con 2018. Y necesito filtrarlos los datos por mes y año, como había dicho. Para ello, puse un botón con el siguiente código:

Private Sub Comando35_Click()
If Not IsNull([añocorte]) And IsNull([mescorte]) Then
Form.RecordSource = "select * from Servicio where Año_Corte = '" & Me.añocorte & "'"
Else
Form.RecordSource = "select * from Servicio where Año_Corte = '" & Me.añocorte & "' and Mes_Corte = '" & Me.mescorte & "'"
End If
End Sub

Pero, aparece el error 3464 diciendo que los tipos no coinciden ¿Qué es lo que puedo hacer?

2 respuestas

Respuesta
3

Supongo que año corte es numérico, por tanto tienes que ponerlo

año_corte=" & me.añocorte & ""

Gracias por la respuesta. Pero, para conseguir poder filtrar por mes y año, he creado un cuadro de texto que busque por coincidencia y en tiempo real. Asi, puedo colocar el mes y año de la siguiente forma: /04/2018  en el cuadro de texto y los datos del formulario que concidan con este valor son filtrados. Pero ahora, necesito una mascara de entrada para ayudar a que el usuario sepa como ingresar su búsqueda (__/__/__) El problema es que al asignarle una mascara de entrada de fecha larga, y luego escribir sobre el cuadro me genera un error

Supongamos que tengo el formulario

Si en el combinado que se llama Elegir selecciono un mes

El evento despues de actualizar del combinado es

Form.RecordSource = "select * from clientes where format([fechaventa],""mm/yyyy"")='" & Me.Elegir & "'"

Muchas gracias por la pronta respuesta. Voy a adaptar lo que me ha dicho a mi BD pero tengo una duda, ¿cómo le ha asignado esos valores al cuadro combinado "Elegir"?

Los ha basado en los valores ya existentes del formulario supongo ( ya que las únicas opciones que se muestran son las que están en el formulario), pero, ¿cómo ha hecho para que los valores de 02/2018 no se repita dos veces?

En efecto, me gustaría saber como le ha asignado los debidos valores de los meses a ese cuadro combinado. Muchas gracias.

En el origen de la fila del combinado. Con el generador creo la consulta

Le he añadido otro campo Otra Forma para que veas otra(de muchas) alternativa. El resultado es

Respuesta
2

Por darte otras opciones, además de la de Icue, la forma de hacerlo sin campos calculados sería con este WHERE:

.... WHERE Year(Fecha_corte)=" & Me.añocorte

o con este otro:

.... WHERE Year(Fecha_corte)=" & Me.añocorte & " AND MonthName(Month(Fecha_corte))='" & Me.mescorte & "'"

Siendo mescorte un campo con un valor de texto.

Un saludo.


Añade tu respuesta

Haz clic para o

Más respuestas relacionadas