Hola a todos. Estoy creando un buscador que se apoya en una base de datos Access. Los campos a consultar son varios y los criterios también pueden variar. Por ejemplo:
El usuario escribe en el campo "Nombre" lo siguiente
Cita: MANOLO .O JOSÉ .Y .NO PEPE
Con lo que la consulta quedaría:
Cita: SELECT *
FROM tabla
WHERE
(
tabla.Nombre LIKE '*MANOLO*' OR
tabla.Nombre LIKE '*JOSÉ*' AND NOT
tabla.Nombre LIKE '*PEPE*'
)
De momento tengo este código:
Código:
Dim nombre As String = preparaCriterio(preparaCadena(Me.txtNombre.Text),"Nombre")
.....
Private Function preparaCadena(ByVal cadena As String) As String
Dim regExp As System.Text.RegularExpressions.Regex
cadena = cadena.Trim
cadena = cadena.ToUpper
Do While cadena.IndexOf(" ") <> -1
cadena = cadena.Replace(" ", " ")
Loop
cadena = cadena.Replace(".O", "|")
cadena = cadena.Replace(".Y", "&")
cadena = cadena.Replace(".Y .NO", "¬")
cadena = regExp.Replace(cadena, "[AÁ]", "[AÁ]")
cadena = regExp.Replace(cadena, "[EÉ]", "[EÉ]")
cadena = regExp.Replace(cadena, "[IÍ]", "[IÍ]")
cadena = regExp.Replace(cadena, "[OÓ]", "[OÓ]")
cadena = regExp.Replace(cadena, "[UÚ]", "[UÚ]")
Return cadena
End Function
Private Function preparaCriterio(ByVal cadena As String, ByVal campo As String) As String
campo += " LIKE "
If cadena.StartsWith("|") Or cadena.StartsWith("&") Or cadena.StartsWith("¬") Then
cadena = cadena.Substring(1)
End If
'********************
'SIN HACER:
'Aquí hay que separar cada palabra o conjunto de palabras
'por los operadores
'********************
cadena = cadena.Replace("¬", " AND NOT " & campo)
cadena = cadena.Replace("|", " OR " & campo)
cadena = cadena.Replace("&", " AND " & campo)
Return cadena
End Function
Lo que está en verde es lo que me tiene bloqueado. Alguna ayuda.
Gracias y un saludo.