Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/07/2005, 07:03
Avatar de Bravenap
Bravenap
 
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 22 años, 4 meses
Puntos: 4
Crear criterios de consulta para Acess

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.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!