Creación de filtros selectivos

Maestro Svein.

Nuevamente acudo a ti para que de ser posible me orientes en la creación de informes filtrados con diversos ejemplos, esto es, partiendo de fechas (rangos), selección de campos mediante cuadros de lista, etc. Tal cual como lo ilustraste en una pregunta anterior en la que adapte un código de terceros (saldos) y tu rutina de búsqueda tipo google.

Te comento que desearía filtrar por rangos de fechas (el campo se llama fech_visita que esta en una tabla llamada citas). Este filtro me gustaría mostrarlo en un informe que he llamado ffiltro, el detalle es que no como mandar llamar ese filtro y se rellene en el informe.

Ejemplo:

Fecha Inicial (fech_visita): __/__/__ Fecha Final(fech_visita): __/__/__

Otro punto importante es que me gustaría filtrar aparte de la fecha otro campo en conjunto, esto es, seleccionar el rango de fecha ademas de otro campo llamado med_trat (este es un cuadro combinado con lista de valores) y realizar el filtro; desde luego mandar llamar el informe descrito anteriormente, ejemplo:

Fecha Inicial(fech_visita): __/__/__ Fecha Final(fech_visita): __/__/__ Medico (med_trat):_________________

1 Respuesta

Respuesta
1

Te comento dos posibilidades, si bien la mecánica a la hora de crear el filtro es la misma:
Opción 1: habilitar en tu formulario, por ejemplo en el pie del mismo, dos cuadros de texto independientes (txtFechaInicial y txtFechaFinal, por ejemplo) y un cuadro combinado (cboMedico, por ejemplo, independiente de la tabla, pero que coja los valores de los médicos) y un botón para abrir el informe.
Opción 2: poner en tu formulario un botón, que abra un formulario "Filtro", en el que tendrás los dos cuadros de texto y el combo que comento en la opción anterior y un botón para abrir el informe y otro para cerrar ese formulario filtro.
El código para crear el filtro, que tendrás que poner en el botón que te abrirá el informe será parecido a este:
Dim miFIni as Variant, miFFin as Variant
Dim miMedico as (String/Integer) 'Aquí tendrás que elegir una, en función de si el cuadro combinado guarda valores de texto (string) o numéricos (integer)
Dim miFiltro as String
'Les asignamos sus valores
miFIni=Me.txtFechaInicial
miFFin=Me.txtFechaFinal
miMedico=Nz(Me.cboMedico,0) 'Estoy suponiendo que el valor del como es integer. si fuera string, tienes que cambiar el 0 por "")
miFiltro=""
'Supongo que quieres filtrar siempre entre dos fechas, por lo que si se deja una en blanco, nos avisa y sale a la espera de que se rellene.
'Si quisieras tener la opción de filtrar sólo por una de ellas, o sólo por medico, le puedes quitar estos controles.
If IsNull(miFIni) Then
MsgBox "Tienes que introducir una Fecha Inicial", vbInformation, "AVISO"
Me.txtFechaInicial.SetFocus
Exit Sub
End If
If IsNull(miFFin) Then
MsgBox "Tienes que introducir una Fecha Final", vbInformation, "AVISO"
Me.txtFechaFinal.SetFocus
Exit Sub
End If
'Comprobamos que se haya metido una fecha
If Not IsDate(miFIni) Then
MsgBox "Tienes que introducir una Fecha", vbInformation, "AVISO"
Me.txtFechaInicial.SetFocus
Exit Sub
End If
If Not IsDate(miFFin) Then
MsgBox "Tienes que introducir una Fecha", vbInformation, "AVISO"
Me.txtFechaFinal.SetFocus
Exit Sub
End If
'Aquí podrías añadir otros controles de fecha, como por ejemplo que la fecha no sea posterior a la actual...
'Si quieres filtrar obligatoriamente por medico, le añades este control:
If miMedico=0 Then ' o miMedico="", según el tipo de dato
MsgBox "Tienes que seleccionar un Medico",vbInformation, "AVISO"
Me.cboMedico.SetFocus.
Exit Sub
End If
'Construimos el filtro para las fechas
miFiltro="[fech_visita]>=#" & miFIni & "# AND [fech_visita]<=#" & miFFin & "#"
'Ahora le añadimos la parte del medico, si lo hemos seleccionado:
If miMedico<>0 Then miFiltro=miFiltro & " AND [med_trat]=" & miMedico ' o If miMedico<>"" Then miFiltro=miFiltro & " AND [med_trat]='" & miMedico & "'"
(Si el medico es obligatorio elegirlo, podrías construir todo el filtro en una linea:
miFiltro="[fech_visita]>=#" & miFIni & "# AND [fech_visita]<=#" & miFFin & "# AND [med_trat]=" & miMedico o miFiltro="[fech_visita]>=#" & miFIni & "# AND [fech_visita]<=#" & miFFin & "# AND [med_trat]='" & miMedico & "'")
'Abrimos el informe filtrado:
DoCmd. OpenReport "ffiltro", acViewPreview,, miFiltro

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas