El usuario escribe en el campo "Nombre" lo siguiente
Cita:
Con lo que la consulta quedaría:MANOLO .O JOSÉ .Y .NO PEPE
Cita:
De momento tengo este código:SELECT *
FROM tabla
WHERE
(
tabla.Nombre LIKE '*MANOLO*' OR
tabla.Nombre LIKE '*JOSÉ*' AND NOT
tabla.Nombre LIKE '*PEPE*'
)
FROM tabla
WHERE
(
tabla.Nombre LIKE '*MANOLO*' OR
tabla.Nombre LIKE '*JOSÉ*' AND NOT
tabla.Nombre LIKE '*PEPE*'
)
Código:
Lo que está en verde es lo que me tiene bloqueado. Alguna ayuda. 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
Gracias y un saludo.
. Bueno, más o menos creo que lo tengo resuelto. Espero que se entienda por si le sirve a alguien. Más adelante pondré la cadena de consulta completa para que os echéis a llorar, sobre todo porque tengo que adapatar la función también para las fechas
. Yo por mi parte montaré un fiesta si lo consigo. Un saludo.
)
