Access Vba - Filtrar registros por fecha

Tengo una BB. DD (access 2010) con un formulario (fConductores) cuyo origen de datos es la consulta qConductores. Este formulario contiene los siguientes controles.

- Un Listbox (lbxConductores)

- Un Combobox (cbxConductores)

- Un Textbox (txtConductores)

El evento "al cambiar" del TextBox tiene asociado un código que hace busca incrementales de cadenas de texto en la columna del ListBox que previamente selecciono en el ComboBox. Este código en esencia lo que hace es actualizar el origen de datos del ListBox en función de las coincidencias de texto que encuentre en la columna seleccionada en el combobox a medida que escribo caracteres en el listbox. Esto lo consigo mediante filtros en una clausula SQL.

Todo esto funciona correctamente, excepto cuando selecciono una columna del Listbox que contiene datos de tipo fecha. He probado diferentes modos de sintaxis y nada...

Actualmente el código esta así:

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

Private Sub txtConductores_Change()
Dim strSQLconductores As String
Dim strFiltro As String
If Me.cbxConductores = "DNI" Then strFiltro = "DNItitular"
If Me.cbxConductores = "NOMBRE" Then strFiltro = "NOMBRE"
If Me.cbxConductores = "DESTINO" Then strFiltro = "DESTINO"
If Me.cbxConductores = "TELEFONO" Then strFiltro = "tfno"
Select Case Me.cbxConductores
    Case "LISTA COMPLETA"
        strSQLconductores = "SELECT qConductores.DNItitular, qConductores.empleo, qConductores.nombre, qConductores.destino, qConductores.tfno, qConductores.mail, qConductores.condicion, qConductores.categoria, qConductores.procedencia, qConductores.tipoPase, qConductores.fechaValidezInicial, qConductores.fechaValidezFinal, qConductores.fechaExpedicion"
        strSQLconductores = strSQLconductores & " FROM qConductores"
    Case "DNI", "NOMBRE", "DESTINO", "TELEFONO"
        strSQLconductores = "SELECT qConductores.DNItitular, qConductores.empleo, qConductores.nombre, qConductores.destino, qConductores.tfno, qConductores.mail, qConductores.condicion, qConductores.categoria, qConductores.procedencia, qConductores.tipoPase, qConductores.fechaValidezInicial, qConductores.fechaValidezFinal, qConductores.fechaExpedicion"
        strSQLconductores = strSQLconductores & " FROM qConductores"
        strSQLconductores = strSQLconductores & " WHERE [" & strFiltro & "] LIKE '*" & txtConductores .Text & "*'"
    Case "FECHA DE EXPEDICION"
        strSQLconductores = "SELECT qConductores.DNItitular, qConductores.empleo, qConductores.nombre, qConductores.destino, qConductores.tfno, qConductores.mail, qConductores.condicion, qConductores.categoria, qConductores.procedencia, qConductores.tipoPase, qConductores.fechaValidezInicial, qConductores.fechaValidezFinal, qConductores.fechaExpedicion"
        strSQLconductores = strSQLconductores & " FROM qConductores"
        strSQLconductores = strSQLconductores & " WHERE fechaExpedicion Like #" & Format(txtConductores .Text, "mm/dd/yyyy") & "#"
End Select
Me.lbxConductores.RowSource = strSQLconductores

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

Lo ideal seria poder filtrar el origen de datos del lbxConductores en función de la fecha que se especifique en el cuadro de texto txtConductores cuando la columna seleccionada en el cbxConductores sea "FECHA DE EXPEDICIÓN".

Un ultimo detalle seria que cuando la columna seleccionada en el cbxConductores sea "FECHA DE EXPEDICIÓN" que al poner el foco sobre el txtConductores me permita elegir la fecha del cuadro-calendario emergente para datos de fecha de access.

1 Respuesta

Respuesta
1

strSQLconductores = strSQLconductores & " WHERE fechaExpedicion= #" & Format(txtConductores .Text, "mm/dd/yyyy") & "#"

Debería resolverse el problema del filtro por fecha

Para que el cuadro de texto te muestre el calendario, tendrás que cambiarle la propiedad Format del textbox a algún tipo de fecha, por ejemplo:

Me.txtConductores.Format="Short Date"

Obviamente, se la tendrás que quitar cuando no selecciones el campo fecha

Hola, antes de nada muchas gracias por tu ayuda.

He corregido la sentencia WHERE según tus indicaciones y al introducir una fecha en txtConductores (ahora ya utilizando el calendario gracias a tu consejo) el cuadro de lista se queda en blanco sin presentar ninguna coincidencia, a pesar de que está confirmado que las hay.

Investigando un poco que podía estar pasando, en el código detrás de la parte en la que le asigno la sentencia puse "msgbox strSQLconductores", con la intención de visualizar en tiempo de ejecución la sentencia SQL que estaba aplicando como origen de datos al cuadro de lista, y encontré que invertía la intentar del mes con la del día.

Pensando que ese era el motivo de que no encontrara ninguna coincidencia, modifique la clausula WHERE tal que así:

strSQLconductores = strSQLconductores & " WHERE fechaExpedicion= #" & Format(txtConductores .Text, "dd/mm/yyyy") & "#"

... Pero el resultado seguía siendo el mismo: lista vacía, ¿qué puede estar pasando?,

Un saludo y de nuevo gracias por tu ayuda,

El formato mm/dd/yyyy que le dabas originalmente es el correcto. SQL es un lenguaje de programación "inglés" y por tanto entiende las fechas con formato americano. Esto es así, y lo tengo muy comprobado (no veas la de vueltas que dí enun proyecto hasta que me dí cuenta de que ese era el error...)

Revisando la estructura, se me ocurre que cambies .Text por .Value:

strSQLconductores = strSQLconductores & " WHERE fechaExpedicion= #" & Format(txtConductores .Value, "mm/dd/yyyy") & "#"

Otra cosa que puedes probar, para comprobar la correcta sintaxis del parámetro de la SQL es crear una consulta en vista diseño, con los mismos campos, y en el correspondiente a fechaExpedición le pones una fecha que te devuelva resultados. Cambias a Vista SQL y lo único que has de cambiar es el valor que tu le diste por la llamada al cuadro de texto formateado a lo americano, es decir, sustituir por ejemplo "01/01/2015" por "& Format(txtConductores .Value, "mm/dd/yyyy") &"

Hola, he probado a crear la consulta para evaluar mejor los resultados de filtrar la fechay he descubierto algo que me ha dejado bastante descolocado. Resulta que las fechas que aparecen en la columna correspondiente al campo [fechaExpedicion] estan vacias en los registros de la consulta. Es decir, en la consulta que sirve como origen de datos del cuadro de lista las fechas correspondientes a cada registro estam vacias y sin embargo esos mismos registros presentan cada uno su fecha de expedicio  en el cuadro de lista. 

He metido directamente en los campos vacios de la tabla asociada a la consulta las fechas que tiene cada registro en el listbox y el filtro de fecha ha empezado a funcionar correctamente.

Aun no me explico que estaba pasando pero ya esta solucionado por fin. Muchisimas gracias por tu ayuda, ..., no hubiera identificado el problema de no ser por tus consejos. Un saludo!

Buff, vaya error más raro, pero me alegra saber que lo has conseguido resolver.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas