Formulario de búsqueda "Al cambiar"

Tengo el siguiente código, que funciona perfecto, lo saque de la web de Neckkito's en

www.siliconprojects.com.ar

Me.lstPersonas.RowSource = "SELECT Paciente.ID, Paciente.Nombre_Apellido FROM Paciente" _
& " WHERE Paciente.Nombre_Apellido " _
& "LIKE '*" & Me.TxtBuscar.Text & "*' ORDER BY Nombre_Apellido"
Me.lstPersonas.Requery

el filtro seria:

miSeleccion = "[ID] IN ("

Set ctlList = Me.lstPersonas

For Each Opcion In ctlList.ItemsSelected

miSeleccion = miSeleccion & ctlList.ItemData(Opcion) & ","

Next Opcion

If Len(miSeleccion) = 9 Then

MsgBox "No has seleccionado ninguna persona", vbInformation, "AVISO"

Exit Sub

End If

miSeleccion = Left(miSeleccion, Len(miSeleccion) - 1) & ")"

Con ese codigo puedo buscar en el campo Nombre_Apellido, pero yo quisiera poder elegir en que campo buscar, con una lista de valores que seleccione en que campo lo hace. No entiendo como seguir.

1 Respuesta

Respuesta
1

Sustituye la parte del WHERE por una referencia a tu cuadro de lista. Por ejemplo, si tu cuadro se llama lstEligeCampo, y devuelve un texto:

Me.lstPersonas.RowSource = "SELECT Paciente.ID, Paciente.Nombre_Apellido FROM Paciente" _

& " WHERE " & Me.lstEligeCampo _

...

Si lo que quieres es filtrar el cuadro de lista.

Si lo que quieres es modificar el filtro que se aplica al otro formulario, haz lo mismo en la parte del ID:

miSeleccion = "[" & Me.lstEligeCampo & "] IN (" ....

Un saludo.


Hola Sveinbjorn El Rojo, quedo así:

Private Sub cmdVer_Click()

Dim ctlList As Control

Dim Opcion As Variant

Dim miSeleccion As String

miSeleccion = "[" & Me.lstEligeCampo & "] IN ("

Set ctlList = Me.lstPersonas

For Each Opcion In ctlList.ItemsSelected

miSeleccion = miSeleccion & ctlList.ItemData(Opcion) & ","

Next Opcion

If Len(miSeleccion) = 9 Then

MsgBox "No has seleccionado ninguna persona", vbInformation, "AVISO"

Exit Sub

End If

miSeleccion = Left(miSeleccion, Len(miSeleccion) - 1) & ")"

Call AbreF_Paciente(3, miSeleccion)
DoCmd.Close acForm, Me.Name

End Sub

En el cuadro de texto, al cambiar:

Private Sub TxtBuscar2_Change()

Me.lstPersonas.RowSource = "SELECT Paciente.ID, Paciente.Nombre_Apellido FROM Paciente" _
& "WHERE " & Me.lstEligeCampo _
& "LIKE '*" & Me.txtBuscar2.Text & "*' ORDER BY Nombre_Apellido"
Me.lstPersonas.Requery
End Sub

No funciona, cree el cuadro combinado con tipo de origen de fila "lista de valores", les escribo los valores a seleccionar. No tira error de ningún tipo, simplemente no busca. ¿Se te ocurre que podrá ser?

Ni idea, y como me hablas de dos cosas distintas, no sé cual es la que no te funciona...

con la manera original buscaba por nombre apellido. Quisiera que se pueda elegir entre otras variantes como DNI, Cama, por eso cree el cuadro de lista pero no entiendo como hacer para continuar. Gracias

Lo que hace el ejemplo original lo tengo claro (es un ejemplo mío), y lo que intentas también, pero filtrar el cuadro de lista al ir tecleando y abrir el formulario filtrado con lo seleccionado son dos cosas distintas, y no dices cual te falla.

Creo que tu mejor opción (y más sencilla) sería ésta, a partir del ejemplo original:

1º/ En el formulario FBuscador, añades un cuadro combinado (lo llamaré cboCampo) con los nombres de los campos por los que quieras filtrar.

2º/ El código del evento "al cambiar" del cuadro de texto lo dejas así:

Private Sub txtBuscar_Change()
Me.lstPersonas.RowSource = "SELECT TAgenda.ID, TAgenda.Nombre FROM TAgenda" _
& " WHERE TAgenda.[" & Me.cboCampo _
& "] LIKE '*" & Me.txtBuscar.Text & "*' ORDER BY Nombre"
Me.lstPersonas.Requery
End Sub

Y listo, sin hacer nada más el cuadro de lista se te filtrará por el campo seleccionado y al pulsar el botón se te abrirá FAgenda con las personas seleccionadas.

Si quieres puedes configurar el cuadro de lista para que muestre el resto de campos y no solo el nombre y apellidos, en cuyo caso sería interesante que en la SQL del cuadro de lista incluyas todos por los que vas a poder filtrar.

hice todo al pie de la letra pero evidentemente no lo hago bien.

Pues está bien explicadito.

Yo más no puedo hacerte.... http://filebig.net/files/xg42cRdmFi http://filebig.net/files/xg42cRdmFi 

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas