• Domingo 22 de Diciembre de 2024, 18:52

Autor Tema:  Re: Consulta seleccion Varias palabras  (Leído 1391 veces)

Periko

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Consulta seleccion Varias palabras
« en: Miércoles 5 de Marzo de 2003, 13:32 »
0
Hola, necesito hacer una consulta de selección que seleccione los registros que en un campo contengan determinadas palabras, ejemplo: En un campo de AUTORES, quiero hacer una consulta que si yo pongo JOSE PERALES, me salgan todos los Autores que se llamen JOSE, PERALES y/o JOSE LUIS PERALES.

Un Saludo,

Pedro Pimentel
perikon@hotmail.com

HurryCrack

  • Miembro MUY activo
  • ***
  • Mensajes: 206
    • Ver Perfil
Re: Consulta seleccion Varias palabras
« Respuesta #1 en: Miércoles 5 de Marzo de 2003, 21:13 »
0
Creo que eso es un poco mas complicado de lo que en un principio piensas, ya que antes de evaluar una sentencia WHERE debes saber lo que filtrar y no tener un condicional en la sintaxis.:think:

Fale mesplico..........

Cuando tu filtras una tabla debes hacerlo por una cadena y no puedes decirle que esa cadena sea buscada dentro del filtro...........

osea para poder asé eso debes abrir la tabla por ejemplo
"SELECT * FROM tabla ORDER BY nombre"

con lo cual tienes tu tabla abierta ordenada por el campo nombre. Fale?

Ahora lo que tienes que hacer es volver a filtrar ese recordset que has abierto de forma que:

do while not Rs.EOF
if instr(RS!Nombre,JOSE PERALES) then Rs_aux=Rs
loop

de esta forma obtendras en el recordset auxiliar, todos los registros que posean lo que tu quieres. Fale?
Un saludo.:jumpie:

Jose Arriagada

  • Miembro MUY activo
  • ***
  • Mensajes: 373
    • Ver Perfil
Re: Consulta seleccion Varias palabras
« Respuesta #2 en: Miércoles 5 de Marzo de 2003, 23:59 »
0
Si lo que vas a consultas siempre es de la forma <nombre><espacio><apellido>, entonces la cosa es facil.
Usa lo siguiente


texto="JOSE PERALES"
nombre=MID(texto,1,instr(" ",texto)-1)
apellido=MID(texto,instr(" ",texto)+1,len(texto)-instr(" ",texto)+1)

sentencia="select * from tabla where "
sentencia=sentencia & "( nombre like '%" & nombre & "%' or "
sentencia=sentencia & "(nombre like '%" & apellido & "%' or "
sentencia=sentencia & "(nombre like '%" & texto & "%'  order by nombre"


Si el texto contiene mas palabras, entonces tienes que crear una rutina que descomponga el texto y vaya concatenando la consulta.

P.D.: Asumo que el ejemplo que das es JOSE PERALES, por que, a menos que tu computador sea SUPERINTELIGENTE habra adivinado de alguna parte el "LUIS"....

J.M.Movilla

  • Miembro MUY activo
  • ***
  • Mensajes: 427
    • Ver Perfil
Consulta seleccion Varias palabras
« Respuesta #3 en: Jueves 6 de Marzo de 2003, 01:47 »
0
Hola: Yo uso algo parecido a esto:

(txtBusc.Text contiene la/las palabras que deben buscarse, introducidas mediante un textbox)

Private Sub txtBusc__KeyDown(KeyCode As Integer, Shift As Integer)

    Dim cBus As String, n As Integer
    Dim pBus As String, nSpa As Integer, aBus As Variant
    Dim cAnd As String
   
    If KeyCode = 13 Then
        If txtBusc.Text = "" Then
            Exit Sub
        End If
        pBus = Trim(txtBusc.Text)
        aBus = Array("", "", "", "", "", "", "", "", "")  ' Para anidar hasta 9 palabras, que creo son suficientes...
        nSpa = 0

        '  ATENCIÓN:  Preparo la SQL compleja:

        Do
            n = InStr(pBus, " ")
            If n = 0 Then
                aBus(nSpa) = pBus
                Exit Do
            End If
            aBus(nSpa) = Left(pBus, n - 1)
            pBus = Trim((Mid(pBus, n + 1)))
            nSpa = nSpa + 1
        Loop
        cBus = ""
        cAnd = ""
        For n = 0 To nSpa
            cBus = cBus & cAnd & "CampoName like '*" & aBus(n) & "*'"
            cAnd = " Or "   '  En los casos en que debe contener TODAS las palabras del textbox, sería: cAnd = " And "
        Next
        ' Miro a ver si algún registro cumple la condición
        dbData.Recordset.FindFirst (cBus)
        If dbData.Recordset.NoMatch Then
             msgbox("No se encuentra ningún caso.")
            Exit Sub
        End If

        '  Abro un recordset con los casos que cumplan la condición de búsqueda
        ' Aplico la SQL preparada

        DataBus.RecordSource = "Select * From Tabla1 Where " & cBus & " Order by CampoName"
        DatBus.Refresh

end If

End Sub