Crear filtro en cuadro de lista Access 2007

Bien aquí os traigo una nueva pregunta. En la aplicación que estoy trabajando tengo un formulario con un cuadro de lista, pues bien preciso realizar un filtro de este combo de acuerdo a las indicaciones que realice el usuario. Para hacer mas claro el asunto, supongamos que tenemos un servicio con diferentes estados (confirmado, en proceso, finalizado) y adicionalmente fechas, que el usuario pueda realizar selección de criterios múltiples y traiga al cuadro los registros coincidentes con tales selecciones. Todo en entorno Access 2007.

¿Alguna sugerencia?

1 Respuesta

Respuesta
1

La idea sería ésta: modificar la SQL que devuelve los valores del cuadro, a través de la propiedad RowSource del cuadro de lista.

Por ejemplo:

Supongamos que tu cuadro de lista (lstResultados) tiene como origen de la fila esta SQL: SELECT * FROM TDatos (o lo que es lo mismo, muestra todos los registros de la tabla TDatos.

Supongamos que tienes un cuadro combinado para seleccionar el estado (cboEstado), un cuadro de texto para la fecha (txtFecha) y un botón de comando (btnFiltrar)
El código del botón sería (para filtrar por Estado y/o Fecha):

Private Sub btnFiltrar_Click()
Dim miSQL as String
Dim miFiltro as String
miSQL="SELECT * FROM TDatos "  'Fíjate en el estacio después de TDatos
If Nz(Me.cboEstado,"")<>"" Then miFiltro="Estado='" & Me.cboEstado & "'"
If Nz(Me.txtFecha,-3.14)<>-3.14 Then 
If len(miFiltro)>0 Then miFiltro=mifiltro & " AND "
miFiltro=miFiltro & Fecha=#" & Me.txtFecha & "#"
End If
miSQL=miSQL & "WHERE " & miFiltro
Me.lstResultados.RowSource=miSQL
Me.lstResultados.Requery
End Sub

Lo he escrito así "al vuelo", pero creo que es correcto.

Saludos!


Hola amigo Rojo!, gracias como siempre por tu respuesta tan dedicado.
Pues bien colega, he intentado poner manos al trabajo con el código, pero me arroja un error de sintaxis en el string miFiltro, aparentemente no llega a realizar a cumplir la sentencia. Pega aquí debajo:

Private Sub botonBuscar_Click()
Dim miSQL As String
Dim miFiltro As String
miSQL = "SELECT * FROM Planning " 'Fíjate en el estacio después de TDatos
If Nz(Me.cuadroEstado, "") <> "" Then miFiltro = "Estado='" & Me.cuadroEstado & "'"
If Nz(Me.cuadrofecha, -3.14) <> -3.14 Then
If Len(miFiltro) > 0 Then miFiltro = miFiltro & " AND "miFiltro=miFiltro & Fecha=#" & Me.cuadrofecha & "#"
End If
miSQL = miSQL & "WHERE " & miFiltro
Me.cuadroCmbPlanning.RowSource = miSQL
Me.cuadroCmbPlanning.Requery
End Sub

Planning  = la tabla de donde coge los datos

cuadro estado = lista desplegable con estados (estos deberán traerse de una tabla o bien debo insertarlos a modo independiente?)

CmbPlanning = cuadro de lista que deseo filtrar

cuadrofecha = cuadro de texto donde el usuario ingresa la fecha

Gracias Rojo!!!

Tu combo Estado: ¿Devuelve un valor numérico?

Si así fuera, cambia esto:

"Estado='" & Me.cuadroEstado & "'"

por esto otro:

"Estado=" & Me.cuadroEstado 

Además hay un error de sintaxis aquí:

If Len(miFiltro) > 0 Then miFiltro = miFiltro & " AND "miFiltro=miFiltro & Fecha=#" & Me.cuadrofecha & "#"

que debería ser:

If Len(miFiltro) > 0 Then miFiltro = miFiltro & "Fecha=#" & Me.cuadrofecha & "#"

A ver si con estos retoque ya te anda.

Hey Rojo! Gracias por tu nueva respuesta y mis disculpa por la demora en chequear la misma. Pues bien aquí liado con el código y no consigo dar para que funcione, en esta oportunidad el error de sintaxis se ha quitado, pero no funciona nada de nada. He metido manos pero no logro que funcione:

Private Sub botonBuscar_Click()
Dim miSQL As String
Dim miFiltro As String
miSQL = "SELECT * FROM cmbPlanning " 'Fíjate en el estacio después de TDatos
If Nz(Me.cuadroEstado, "") <> "" Then miFiltro = "EstadoViaje=" & Me.cuadroEstado
If Nz(Me.cuadrofecha, -3.14) <> -3.14 Then
If Len(miFiltro) > 0 Then miFiltro = miFiltro & "Fsalida=#" & Me.cuadrofecha & "#"
End If
miSQL = miSQL & "WHERE " & miFiltro
Me.cuadroCmbPlanning.RowSource = miSQL
Me.cuadroCmbPlanning.Requery
End Sub

A decir verdad tengo mis dudas si he de estar aplicando bien el código respecto a esta parte, verás que he puesto "Fsalida" como aquel valor y columna en el combo al cual haré referencia para filtrar los demás datos, lo mismo ocurre con "EstadoViaje".

Rojo, aguardo atento por tus comentarios.

Gracias nuevamente!

Fíjate que te falta encadenar bien las dos partes del filtro con un "AND", y además, tienes que dejar espacios en blanco antes de las palabras "claves" de la SQL, por ejemplo:

If Len(miFiltro) > 0 Then miFiltro = miFiltro & " AND Fsalida=#" & Me.cuadrofecha & "#"

Puedes comprobar si la SQL que genera el código es correcta y  además si devuelve o no los registros que se espera fácilmente, añadiendo un Debug.Print miSQL antes del Me.cuadroCmbPlanning.RowSource = miSQL.

Con esa linea, en la ventana de inmediato (Ver-> Ventana inmediato o Ctrl+G) tendrás la SQL que genera el código, y así comprobar si te faltan espacios en blanco y dónde... Además, la puedes pegar en una nueva consulta para ver si te devuelve registros.

Gracias Rojo nuevamente, ya me pondré a trabajar en lo recomendado. Por cierto me he registrado en tu foro muy guay.

Saludos!

Ya comentarás si está solucionado o necesitas alguna aclaración adicional. Y espero que el foro te resulte de utilidad.

Hey colega!
Discúlpame que no he respondido y agradecido como corresponde, he estado de viaje por mi Ciudad Real, ahora he vuelto aquí para continuar con el curro.

Estaré comprobando lo que propones, luego te cuento.

Saludos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas