SoloCodigo
		Programación General => Visual Basic 6.0 e inferiores => Mensaje iniciado por: Periko en Miércoles  5 de Marzo de 2003, 13:32
		
			
			- 
				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
- 
				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:
- 
				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"....
- 
				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