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