Filtrar datos de un formulario con subformulario incorporados de tablas vinculadas de otras bases de datos

Dispongo de un formulario que filtrar datos de una tabla según una serie de campos, quiero incorporar a este formulario otro subformulario, en este caso de una tabla vinculada de otra base de datos. Cómo debería modificar el siguiente código para que el filtrado me afectase a ese subformulario:

El nombre del subformualrio es seguimiento de reclamaciones y la tabla vinculada seguimiento de reclamaciones.

Function FiltraDatos()
'Variables de Cadena.
On Error GoTo FiltraDatos_TratamientoErrores

'Antes de comenzar a filtrar pongo el FiltroTotal a "" para evitar algún dato Residual
FiltroTotal = ""

'Construyo la cadena para filtrar por Texto
If Not IsNull(Me.Texto) And Me.Texto <> "" Then
FiltroTexto = "Denominacion LIKE '*" & Me.Texto & "*'"
Else
FiltroTexto = ""
End If

'Construyo la cadena para filtrar por ClaveIncidencia
If Not IsNull(Me.CboN01) And Me.CboN01 <> "" Then
Filtro01 = "[ClaveIncidencia] = '" & Me.CboN01.Column(0) & "'"
Else
Filtro01 = ""
End If
'Construyo la cadena para filtrar por Turno
If Not IsNull(Me.CboN02) And Me.CboN02 <> "" Then
Filtro02 = "[Turno] = '" & Me.CboN02.Column(0) & "'"
Else
Filtro02 = ""
End If
'Construyo la cadena para filtrar por Producto
If Not IsNull(Me.CboN03) And Me.CboN03 <> "" Then
Filtro03 = "[Responsable] = '" & Me.CboN03.Column(0) & "'"
Else
Filtro03 = ""
End If

'Construyo la cadena para filtrar por Año
If Not IsNull(Me.CboAño) And Me.CboAño <> "" Then
FiltroAño = "[Año] = " & Me.CboAño ' No necesita columna porque solo tiene una
Else
FiltroAño = ""
End If
'Construyo la cadena para filtrar por Mes
If Not IsNull(Me.CboMes) And Me.CboMes <> "" Then
FiltroMes = "[NumMes] =" & Me.CboMes.Column(0)
Else
FiltroMes = ""
End If

'Construyo la cadena para filtrar por Fecha
If IsNull(Me.DesdeFecha) And IsNull(Me.HastaFecha) Then
FiltroFechas = ""
Else
FiltroFechas = "FechaIncidencia BETWEEN #" & Format(Nz(Me.DesdeFecha, #1/1/1900#), "mm-dd-yyyy") & _
"# AND #" & Format(Nz(Me.HastaFecha, #12/31/9999#), "mm-dd-yyyy") & "#"
End If
'Construyo el FiltroTotal según el valor de los parciales. FiltroTotal se enviará al subformulario. Construcción por concatenación con " AND "
If FiltroTexto <> "" Then
FiltroTotal = FiltroTexto
End If
If Filtro01 <> "" Then
If FiltroTotal <> "" Then
FiltroTotal = FiltroTotal & " AND " & Filtro01
Else
FiltroTotal = Filtro01
End If
End If
If Filtro02 <> "" Then
If FiltroTotal <> "" Then
FiltroTotal = FiltroTotal & " AND " & Filtro02
Else
FiltroTotal = Filtro02
End If
End If
If Filtro03 <> "" Then
If FiltroTotal <> "" Then
FiltroTotal = FiltroTotal & " AND " & Filtro03
Else
FiltroTotal = Filtro03
End If
End If

If FiltroAño <> "" Then
If FiltroTotal <> "" Then
FiltroTotal = FiltroTotal & " AND " & FiltroAño
Else
FiltroTotal = FiltroAño
End If
End If

If FiltroMes <> "" Then
If FiltroTotal <> "" Then
FiltroTotal = FiltroTotal & " AND " & FiltroMes
Else
FiltroTotal = FiltroMes
End If
End If

If FiltroFechas <> "" Then
If FiltroTotal <> "" Then
FiltroTotal = FiltroTotal & " AND " & FiltroFechas
Else
FiltroTotal = FiltroFechas
End If
End If

'A partir de aquí, si la variable FiltroTotal no está vacía se la aplicamos al Subformulario
If FiltroTotal <> "" Then
'Asignamos la varaible a la propiedad Filter del subformulario. NOTA: Aquí da error si no encuentra ningún registro
Me.Filter = FiltroTotal
'Le decimos al subformulario que active el filtro que previamente hemos asignado. NOTA: Aquí da error si no encuentra ningún registro
Me.FilterOn = True
Else
'Si la variable está en blanco nos indica que no hay seleccionados ningún Filtro y por tanto lo desactivamos
Me.FilterOn = False
End If

2 respuestas

Respuesta
1

Trabajar con tablas vinculadas desde un formulario es igual que con tablas locales.

Ahora no tengo tiempo de pararme a analizar tu código, y como veo que te defiendes creando filtros múltiples, sólo te daré unas indicaciones:

1º/ Si quieres filtrar el subformulario desde el formulario, el filtro se lo tienes que aplicar con esta sintaxis:

Me.[seguimiento de reclamaciones].Form.Filter=tuFiltro

y para aplicarlo:

Me.[seguimiento de reclamaciones].Form.FilterOn= True

2º/ Si el subformulario lo filtras desde el propio subformulario, es igual que filtrar el formulario.

3º/ Si queires filtrar formulario y subformulario, y los filtros no son iguales, has de crear y aplicar un filtro al formulario y otro al subformulario. Si los dos filtros son iguales, con crear uno te llega, pero aún así tienes que aplicárselo a ambos.

Saludos.


Respuesta
1

Hoselui: ese código me resulta un poco familiar:

Abajo donde tienes éstas líneas

If FiltroTotal <> "" Then

Me.Filter = FiltroTotal
Me.FilterOn = True
Else
Me.FilterOn = False

Has de poner:

If FiltroTotal <> "" Then

Me.[seguimiento de reclamaciones].Filter = FiltroTotal
Me.[seguimiento de reclamaciones].FilterOn = True
Else
Me.[seguimiento de reclamaciones].FilterOn = False

Lógicamente, toda la parte de arriba supongo que está adaptada a los Nombres de tus Objetos. Saludos >> Jacinto

Hola Jacinto,

El código no es mio por eso te resulta familiar je je, ¿si quisiera eso mismo con un tercer subformulario sería igual supongo?

HoseLui: Puedes aplicarlo a cuantos subformularios quieras, siempre que adaptes el Nombre de de los Objetos que intervienen. Saludos >> Jacinto

Hola Jacinto gracias por la respuesta, pero ese código se duplica o se sustituye. He puesto el código así y no funciona:

If FiltroTotal <> "" Then

Me.Filter = FiltroTotal
Me.FilterOn = True
Else
Me.FilterOn = False
End If
If FiltroTotal <> "" Then
Me.[Subformulario Seguimiento de reclamaciones].Form.Filter = FiltroTotal
Me.[Subformulario Seguimiento de reclamaciones].Form.FilterOn = True
Else
Me.[Subformulario Seguimiento de reclamaciones].Form.FilterOn = False
End If

El subformulario tiene un campo vinculado (fecha) pero estaría interesado en filtrar por mes o por un periodo de 2 semanas. Tengo que crear una consulta o desde el subformulario hay alguna manera de realizarlo.

Adjunto un pantallazo del formulario:

HoseLui: Para el filtro del subformulario, solo necesitas

If FiltroTotal <> "" Then
Me.[Subformulario Seguimiento de reclamaciones].Form.Filter = FiltroTotal
Me.[Subformulario Seguimiento de reclamaciones].Form.FilterOn = True
Else
Me.[Subformulario Seguimiento de reclamaciones].Form.FilterOn = False
End If

En cuanto a otros Campos de filtrado, si los tienes en la Tabla, como el ejemplo del mes que pones, filtras directo y si no los tienes debes crear una consulta, y que sea ésta el Origen de datos del SubFormulario.

Lo que no acabo de ver es la vinculación porque el SubFormulario en éste caso concreto de filtros ha de ser independiente. Saludos >> Jacinto

Hola, te explico paso a paso lo que yo hago, creo un subformulario vinculado a una tabla vinculada de otra BD y vinculo el campo de fecha con el campo de fecha del formulario principal, añado el código:


If FiltroTotal <> "" Then
Me.Filter = FiltroTotal
Me.FilterOn = True
Else
Me.FilterOn = False
End If


If FiltroTotal <> "" Then
Me.[Subformulario Seguimiento de reclamaciones].Form.Filter = FiltroTotal
Me.[Subformulario Seguimiento de reclamaciones].Form.FilterOn = True
Else
Me.[Subformulario Seguimiento de reclamaciones].Form.FilterOn = False
End If

y cuando filtro en el subformulario solo me salen los registros que coinciden con el campo de fecha del formulario principal cuando tengo un filtro de periodos y lo que a mi me interesa es que salgan todos los registros comprendidos en ese periodo.

Quizá se un tema de vinculación de campos pero no doy con la tecla.

HoseLui: Si tienes ese campo vinculado, el filtro te actuará sobre los otros, pero no sobre ese.

Solo te mostrará los Registros coincidentes con el vinculo.

De otra parte veo que sigues aplicando el Filtro al Formulario Principal, y aun a riesgo de equivocarme, porque no tengo toda la información, te puedo decir que eso es incorrecto.

No obstante si tienes dudas y quieres poner tu BD aquí con datos inventados pero con los Objetos necesarios, te lo puedo mirar y contestrte con más acierto. Saludos >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas