Actualizar el origen de datos de un cuadro de lista cuando busco un dato en access 2010

Tengo unformulario en access 2010 donde en un cuadro de texto introduzco un valor y con ese valor genero la siguiente instrucción sql:

SELECT * FROM PERSONAS WHERE NOMBRE LIKE 'CUADRO DE TEXTO%'

Tengo un cuadro de lista con todo el contenido de la tabla y me gustaría que el cuadro de lista muestre sólo los valores que concuerdan con la sentencia sql.

Estoy aprendiendo vba para access y me gustaría saber qué código debo intriducir para obtener ese resultado

He colocado en el codigo lo siguiente

Lista7.RowSource = Instruccion (variable donde almaceno la instruccion sql)
Lista7. Requery

Pero no obtengo resultado

2 respuestas

Respuesta
2

Un ejemplo de lo que buscar es el vídeo siguiente. La diferencia es aquí se busca por un ID .

Revísalo tal vez te ayude el código del que utilizan esta en la descripción del video.

https://www.youtube.com/watch?v=JtVbc323tmY&index=2&list=PLsbpurIPHmoJm-7po7cJvTTp3TfZrEM19 

Gracias Antonio, en cuanto pueda lo miro y veo si me sirve!!!

Si, claro.

Respuesta
2

Jorge: Prueba éste código sustituyendo TextoABuscar por lo que tú tengas y si puedes cambia el Nombre de CUADRO DE TEXTO por un Nombre sin Espacios, sea el que yo pongo u otro cualquiera.

'Esta declaración de variables fuera de Procedimientos. 
'Inmediatamente debajo del Option Compare.....y Option Explicit
Dim StrSQL As String
Dim dbs As DAO.Database, Rst As DAO.Recordset
Private Sub TextoABuscar_LostFocus()
StrSQL = ""
Call ActualizaLista
StrSQL = "SELECT DISTINCT PERSONAS.NOMBRE FROM PERSONAS "
StrSQL = StrSQL & "WHERE PERSONAS.NOMBRE LIKE '" & "*" & Me.TextoABuscar.Value & "*" & "' " & "ORDER BY PERSONAS.NOMBRE"
Set dbs = CurrentDb()
Set Rst = dbs.OpenRecordset(StrSQL)
If Rst.RecordCount > 0 Then
       'Llamamos al procedimiento de Actualizar los datos de la Lista7
       ActualizaLista
Else
       MsgBox "No se encontro la palabra tecleada", vbOKOnly, "DATO NO ENCONTRADO"
       'Esta línea manda el Foco a un Botón, para hacer un rebote de Foco, pero puede ser otro control distinto al TextoABuscar
       Me.BtnSalir.SetFocus
       'Aquí es donde recuperamos el Foco en el cuadro de Texto
       Me.TextoABuscar.SetFocus
End If
Rst.Close
Set Rst = Nothing
Set dbs = Nothing
End Sub
Sub ActualizaLista()
Me.Lista7.RowSource = StrSQL
Me.Lista7.Requery
End Sub

Mis saludos >> Jacinto

Jacinto, muchas gracias por tu pronta respuesta, te muestro el código completo que escribí. Veras que no hay mucha diferencia con el tuyo, sólo que vos trabajas con DAO y yo estoy aprendiendo con ADO. La búsqueda la realizo con un botón en una tabla con datos de personas.

Private Sub Comando9_Click()
Dim Miconexion As New ADODB.Connection
Set Miconexion = CurrentProject.Connection
Dim Instruccion As String
Instruccion = "SELECT * FROM PERSONAS WHERE NOMBRE LIKE '" & txt_nombre & "%'"
Dim MiRecordset As New ADODB.Recordset
MiRecordset.Open Instruccion, Miconexion
If MiRecordset.BOF Then
    MsgBox "No encontrado"
Else
    txt_nombre = MiRecordset!nombre
    txt_apellidos = MiRecordset!apellidos
    txt_edad = MiRecordset!edad
End If
Lista7.RowSource = Instruccion
Lista7.Requery
MiRecordset.Close
Set MiRecordset = Nothing
Miconexion.Close
Set Miconexion = Nothing
End Sub

He verificado que encuentra el valor buscado y he colocado el valor de otros campos en los TextBox, lo único que no puedo lograr es que la lista me muestre todos los registros que en el campo nombre coincidan con lo que he colocado en el TextBox

Jorge: Independientemente del ADO/DAO, lo que no veo es el Else de tu código.

Supongamos que en Txt_Nombre pones "Juan José" y hay 50.

¿Qué apellidos quieres que te muestre en Txt_Apellidos y en Txt_Edad?

El del primero, el número 31 o el último. Por lo tanto si es que estás usando el Txt_Nombre para buscar que es lo que parece, te sobran el Txt_Apellidos y el Txt_Edad.

Algo que no veo (y no tengo por qué verlo), es la configuración de tu ListBox.

Debería tener según parece 3 columnas, de ancho adecuado cada una... etc.

Después veo el comodín % en lugar del * y eso puede causar algún conflicto.

Hace tiempo e hice una pregunta, porque no había manera de que supiera la causa del problema.

Te pongo el enlace de la solución que me dió Neckkito, por si te puede resolver tu caso.

http://nksvaccessolutions.com/Foro/viewtopic.php?f=8&t=256&p=1607&hilit=comodin+LIKE#p1607

Ya me contarás. Mis saludos >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas