Filtrar registros.

Tengo un formulario en el cual puedo introducir cuatro palabras que luego utilizo como criterio de búsqueda para filtrar los registros que contengan alguna de esas palabras en el campo Descripción. El código se dispara al hacer clic a un botón. En general funciona bien pero, he comprobado que si ingroduzco la palabra GALICIA, me saca todos los registros en que esa palabra aparece en el campo DESCRIPCIÓN... Hasta aquí, todo bien. Pero resulta que también me saca una serie de registros que contienen la palabra GALLEGAS lo cual, en principio, no es correcto. Te adjunto el código para que le eches un vistazo y me digas qué hago mal. ¿Tal vez sería mejor utilizar una SQL en lugar de un filtro?
'=================================
Dim ClaveBusca As String
'-- Montamos el criterio de búsqueda
ClaveBusca = "[Descripcion] Like " & Chr$(34) & "*" & Me.txtPalabra1 & "*" & Chr$(34)
If Not IsNull(Me!txtPalabra2) Then
ClaveBusca = ClaveBusca & " " & Me!ANDOR & " [Descripcion] Like " & Chr$(34) & "*" & Me.txtPalabra2 & "*" & Chr$(34)
End If
If Not IsNull(Me!txtPalabra3) Then
ClaveBusca = ClaveBusca & " " & Me!ANDOR & " [Descripcion] Like " & Chr$(34) & "*" & Me.txtPalabra3 & "*" & Chr$(34)
End If
If Not IsNull(Me!txtPalabra4) Then
ClaveBusca = ClaveBusca & " " & Me!ANDOR & " [Descripcion] Like " & Chr$(34) & "*" & Me.txtPalabra4 & "*" & Chr$(34)
End If
'=================================
Me.Visible = False
'-- Filtramos los registros
DoCmd.ApplyFilter , ClaveBusca
Me.txtResultado = ClaveBusca
Me.Visible = True
Me!cmdStop.SetFocus
' Me!cmdFiltra.Visible = False
' DoCmd.Close
==========================

1 Respuesta

Respuesta
1
La mayoría de las veces, cuando queremos usar más de un criterio de búsqueda, lo más cómodo es usar un formulario independiente y que este se encargue de filtrar sobre una consulta, p.e.:
Como ConvertNulls([Forms]![CategoryCriteria]![ID];"*") Or Es Nulo
Esto seria un criterio en la consulta, usando una función personalizada
Function ConvertNulls(v As Variant, subs As Variant) As Variant
If (IsNull(v)) Then
ConvertNulls = subs
Else
ConvertNulls = v
End If
End Function
Pero si en tu caso de lo que se trata es de filtrar sobre un campo del formulario puedes usar esto otro:
Añades un cuadro de texto independiente para que nos sirva de cadena de criterios, y un botón de comando para ejecutar el siguiente Sub:
Sub EsFiltro()
On Error Resume Next
Dim frm As Form, cadMsg As String
Dim cadInput As String, cadFiltro As String
' Abrir
DoCmd.OpenForm "ClientesFiltro"
' Devolver variable de objeto Formulario
Set frm = Forms!ClientesFiltro
cadInput = Me.CtlTextIndp 'el texto que escribamos finalizado con un * servirá
'para construir la cadena de criterios usando el campo IdCliente.
cadFiltro = BuildCriteria("IdCliente", dbText, cadInput)
' Establecer propiedad Filtro para aplicar Filtro.
frm.Filter = cadFiltro
' Establecer la propiedad ActivarFiltro; el formulario muestra ahora los registros filtrados.
frm.FilterOn = True
End Sub
NOTA: espero tener pronto una .mdb lista con algunos formularios de ejemplo y métodos para buscar registros y valores.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas