Programación General => Visual Basic 6.0 e inferiores => Mensaje iniciado por: lagunax en Lunes 23 de Febrero de 2009, 23:50
Título: Como filtrar una BD con LIKE
Publicado por: lagunax en Lunes 23 de Febrero de 2009, 23:50
Hola, aqui nuevamente tengo un pequeño problema que espero algien me pueda ayudar. Tengo una BD en access 2003, en el formulario trato de filtrar la información (desplegada en un MSHFlexgrid) mediante dos campos: el contenido de una lista del Combo1.Text y un Text2.Text, el cual va filtrando la BD mediante un campo de la misma, al momento de escribir alguna letra en el text.
Mi problema es que deseo que se filtre la BD dos veces, ejemplo: selecciono del Combo1 "Nombre X" (hay un campo Nombre en la BD asociado al combo), para luego escribir en el Text2 (asociado a un campo descripcion en la BD) el cual va realizando una busqueda para encontrar el registro que corresponda a lo escrito en el mismo text2.
Lo que busca el Text2 no respeta el filtrado hecho por el combo1.
Logro filtrar por separado, pero si quiero hacerlo al mismo tiempo me genera errores, aqui hay un ejemplo de lo que trate de hacer:
Private sub_Text2_Change() ...
rst.Open "SELECT ID,Nombre,Descripcion FROM TablaAplicacion WHERE Descripcion Like '%" & _ Text2.Text & "%'" AND Nombre Like "& Combo1.Text &", cn, adOpenStatic, adLockOptimistic
Error: No se reconoce la variable Nombre ...
Ojala alguien me pueda ayudar, es muy importante. Gracias.
Aqui esta el codigo del formulario.
Option Explicit Public bool As Boolean Public ident As Integer Public cn As ADODB.Connection Public rst As ADODB.Recordset Sub Conectar()
' Crea una nueva conexión y un recordset Set cn = CreateObject("ADODB.Connection") Set rst = CreateObject("ADODB.Recordset")
rst.CursorLocation = adUseClient ' abre la base de datos DIRECCION ANTERIOR ' cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data " & _ ' "Source=C:Program FilesMicrosoft " & _ ' "Visual StudioVB98SISTEMA BUSQUEDAAplicacion.MDB;Persist Security Info=False" 'DIRECCION NUEVA DEL SERVIDOR \XOA008 cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data " & _ "Source=\Xoa008COMPARTIDO SISTEMASSistema " & _ "de Registro & Solución de ProblemasBase de DatosAplicacion.MDB;Persist Security Info=False"
End Sub
Sub Desconectar() 'MOSTRAR LA LISTA DE SOLUCIONES EN TEXT3.TEX ' Form6.Text3.Text = rst("Solucion_1") '******************************************* rst.Close cn.Close Set rst = Nothing Set cn = Nothing End Sub
Private Sub Combo1_Click() Call Conectar
//****FILTRA LA BD SEGUN LO QUE MUESTRE EL COMBO1.TEXT rst.Open "SELECT ID,Nombre,Descripcion FROM TablaAplicacion WHERE Nombre Like '%" & _ Combo1.Text & "%'", cn, adOpenStatic, adLockOptimistic
' Muestra los datos en el FlexGrid Set MSHFlexGrid1.DataSource = rst
' Visualiza la cantidad de registros filtrados Me.Caption = "Peugeot - Registros encontrados: " & CStr(rst.RecordCount)
Call Desconectar End Sub
Private Sub Command1_Click()
Text2.Text = "" Text3.Text = "" End Sub
Private Sub Command2_Click() Form6.Hide Form1.Show End Sub
Private Sub Form_Load() MSHFlexGrid1.Clear
With MSHFlexGrid1 .SelectionMode = flexSelectionByRow .FixedCols = 0 .ColWidth(0) = 700 .ColWidth(1) = 2500 .ColWidth(2) = 5000 ' .ColWidth(3) = 4000 ' .ColWidth(4) = 4000 End With
Text2.Text = "" Text3.Text = "" End Sub
Private Sub Text1_GotFocus() Text1.Text = "" End Sub
Private Sub Text2_Change() ' conecta Call Conectar bool = False ' Ejecuta la consulta SQL
////*************AQUI ES DONDE SE HACE EL FILTRADO SEGUN SE VA ESCRIBIENDO EN EL TEXT2.TEX ////*************DONDE NO LOGRO AGREGAR UN LIKE PARA QUE SOLO FILTRE LOS DATOS QUE YA ////*************SE FILTRARON EN EL COMBO1.TEXT rst.Open "SELECT ID,Nombre,Descripcion FROM TablaAplicacion WHERE Descripcion Like '%" & _ Text2.Text & "%'", cn, adOpenStatic, adLockOptimistic
' ' Para acceder a un campo: If rst.EOF = True Then Text3.Text = "" Else 'ULTIMA MODIFICIACION ADODC****************************************************** ident = rst("ID") Adodc1.RecordSource = "SELECT * FROM TablaAplicacion" Adodc1.Refresh Do While bool = False If Adodc1.Recordset.Fields("ID") = ident Then Text3.Text = Adodc1.Recordset.Fields("Solucion_1") bool = True Else Adodc1.Recordset.MoveNext End If Loop '******************************************************************************* ' GOOD Text3.Text = rst("Solucion_1") End If
' Enlaza el FlexGRid Set MSHFlexGrid1.DataSource = rst
' Desconecta de la base de datos Call Desconectar End Sub
Private Sub Text2_GotFocus() Text2.Text = "" End Sub
Título: Re: Como filtrar una BD con LIKE
Publicado por: cpmario en Martes 24 de Febrero de 2009, 02:41
Trata remplazando lo siguiente:
Código: Visual Basic
"SELECT ID,Nombre,Descripcion FROM TablaAplicacion WHERE Descripcion Like '%" & Text2.Text & "%'"AND Nombre Like"& Combo1.Text &"
Con esto
Código: Visual Basic
"SELECT ID,Nombre,Descripcion FROM TablaAplicacion WHERE Descripcion Like '%" & Text2.Text & "%' And Nombre Like '" & Combo1.Text & "'"
:comp:
Título: Re: Como filtrar una BD con LIKE
Publicado por: lagunax en Miércoles 25 de Febrero de 2009, 16:35
Muchas gracias, lo he probado y ha funcionado correctamente. Solo me gustaria pedirte un ultimo favor, ¿podrías explicarme como va la sintaxis del LIKE con los signos (% " ' &)?
"SELECT ID,Nombre,Descripcion FROM TablaAplicacion WHERE Descripcion Like '%" & Text2.Text & "%' And Nombre Like '" & Combo1.Text & "'"
Asumi que eran modificadores de busqueda, pero no he encontrado a que hacen referencia.
Una vez más, gracias por tu respuesta. :good:
Título: Re: Como filtrar una BD con LIKE
Publicado por: cpmario en Miércoles 25 de Febrero de 2009, 17:12
El símbolo % en Like del SQL es un comodín al igual que ?. Si buscas en un listado de apellidos de personas por ejemplo Like 'MOR%' encontrarás apellidos como MORONES, MORALES, MORA, MORINES, etc Si buscas por ejemplo Like '%LEZ' encontrarás apellidos como GONZALEZ, CARRIZALEZ, SANCHEZ, PEREZ, etc Si buscas por ejemplo Like '%ALE%' encontrarás nombres como ALEJANDRINA o MAGDALENA
Puede utilizar también el signo comodín "?" (uno o varios) y colocarlo en lugar de las letras. Por ejemplo: "EL?A" localiza nombres como ELBA, ELDA, DELIA. Si buscas por ejemplo Like '%EL?A%' encontrarás nombres como ELBA, ELDA, YUDELKA, BELIAR, DELIA
En Access se usa el comodín * en lugar de %, también el comodín ?
Espero te sirva.
Título: Re: Como filtrar una BD con LIKE
Publicado por: lagunax en Miércoles 4 de Marzo de 2009, 00:03
Gracias por la explicación, realmente no estaba seguro del funcionamiento de cada uno de los simboos, espero no tener mas problemas con este tipo de filtrado.