• Lunes 29 de Abril de 2024, 16:08

Autor Tema:  Como filtrar una BD con LIKE  (Leído 2465 veces)

lagunax

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Como filtrar una BD con LIKE
« en: Lunes 23 de Febrero de 2009, 23:50 »
0
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
 
    ' Cantidad de registros
    Me.Caption = "Registros encontrados: " & CStr(rst.RecordCount)
 
    ' Desconecta de la base de datos
    Call Desconectar
End Sub

Private Sub Text2_GotFocus()
    Text2.Text = ""
End Sub

cpmario

  • Miembro HIPER activo
  • ****
  • Mensajes: 629
    • Ver Perfil
    • http://www.cpimario.com
Re: Como filtrar una BD con LIKE
« Respuesta #1 en: Martes 24 de Febrero de 2009, 02:41 »
0
Trata remplazando lo siguiente:

Código: Visual Basic
  1. "SELECT ID,Nombre,Descripcion FROM TablaAplicacion WHERE Descripcion Like '%" & Text2.Text & "%'" AND Nombre Like "& Combo1.Text &"
  2.  

Con esto

Código: Visual Basic
  1. "SELECT ID,Nombre,Descripcion FROM TablaAplicacion WHERE Descripcion Like '%" & Text2.Text & "%' And Nombre Like '" & Combo1.Text & "'"
  2.  

 :comp:

lagunax

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: Como filtrar una BD con LIKE
« Respuesta #2 en: Miércoles 25 de Febrero de 2009, 16:35 »
0
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:

cpmario

  • Miembro HIPER activo
  • ****
  • Mensajes: 629
    • Ver Perfil
    • http://www.cpimario.com
Re: Como filtrar una BD con LIKE
« Respuesta #3 en: Miércoles 25 de Febrero de 2009, 17:12 »
0
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.

lagunax

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: Como filtrar una BD con LIKE
« Respuesta #4 en: Miércoles 4 de Marzo de 2009, 00:03 »
0
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.

Una vez más, Gracias.