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