Apabullante cantidad de respuestas

. 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.
Código:
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
Dim operador As New ArrayList
Dim i As Integer
For i = 0 To cadena.Length - 1
If cadena.Chars(i) = "|" Or cadena.Chars(i) = "&" Or cadena.Chars(i) = "¬" Then
operador.Add(cadena.Chars(i))
End If
Next
If operador.Count > 0 Then
Dim operadores() As Char = {"|", "&", "¬"}
Dim arrCadena() As String = cadena.Split(operadores)
cadena = campo & "'*" & Trim(arrCadena.GetValue(0)) & "*'" & operador(0)
For i = 1 To operador.Count - 1
cadena += campo & "'*" & Trim(arrCadena.GetValue(i)) & "*'" & operador(i)
Next
cadena += campo & "'*" & Trim(arrCadena.GetValue(arrCadena.Length - 1)) & "*'"
Else
cadena = campo & "'*" & cadena.Trim & "*'"
End If
cadena = cadena.Replace("¬", " AND NOT ")
cadena = cadena.Replace("|", " OR ")
cadena = cadena.Replace("&", " AND ")
Return cadena
End Function