Búsqueda al presionar la primer letra o conjunto de palabras

Ante todo un saludo. Vaya que es difícil encontrarte...

Mi pregunta va enfocada a lo siguiente:
Como se puede realizar una consulta dentro de un formulario haciendo uso de botones de la A a la Z, esto es, si presiono la letra A se vaya al primer registro (a_paterno) que inicie con esa letra y así sucesivamente. O en su defecto tecleando las letras (palabras) que coincidan.
¿Podrías ayudarme?
Yo ya tengo mi formulario (se llama captura) pero me gustaría agregarle ese tipo de búsquedas y no hacer uso de los binoculares que vienen para tal fin. Mi tabla contiene estos campos: a_paterno, a_materno, nombre, colonia, ciudad, etc.

1 respuesta

Respuesta
1

Lo que pides de los botones de la A a la Z es bastante laborioso. Yo te explico cómo se hace con uno, pero tú deberías hacerlo con todos y cada uno de los botones. La verdad es que no te envidio... je, je...

1.- Vamos a programar el botón A, que será, lógicamente, un botón de comando. Sacas sus propiedades y te vas a la pestaña Eventos -> Al hacer click. Le das al pequeño botón de puntos suspensivos y, en la ventana que se te abre le dices que quieres generar código.

2.- Se te abrirá el editor de VB con dos líneas por defecto (Private Sub... y End Sub). Esas líneas no debes tocarlas. En medio de ellas escribes el siguiente código:

...

Private Sub ...
Dim miFiltro As String
miFiltro = "[a_paterno] LIKE 'A*'"
Me.Filter = miFiltro
Me.FilterOn = True
End Sub

...

Y ya tienes el filtro creado.

Para el botón de la letra B no tienes más que repetir el proceso y copiar el código, cambiando la línea que define la variable miFiltro por esta otra:

miFiltro = "[a_paterno] LIKE 'B*'"

Y así sucesivamente.

Si quieres añadir un botón para quitar los filtros el código que debes asignarle sería:

...

Private Sub...

Me.FilterOn = False

End Sub

...

Finalmente, por el tema de buscar por valores aproximados (tecleando una o varias letras) te remito a la respuesta que el di a <deprofundis>, y no creo que tengas ningún problema en adaptarlo a tu BD. Esa respuesta la puedes encontrar aquí: http://www.todoexpertos.com/mitodoexpertos/question/udu47gq8jixih/buscar-personalizado

Lo que sí te recomiendo es que programes el primer botón y lo pruebes... antes de pegarte la "matada" de programar todos los botones con un código que no sea correcto.

Ante cualquier duda me comentas.

Neck, gracias por contestar. Voy a realizar lo que me indicas y te lo hago saber en breve.

Referente a la pagina que me remitiste con la respuesta a  <deprofundis> me dice: "Página no autorizada. No tienes permiso para ver la esta página". Seria interesante pegarle una checada, por lo que te pido me envíes el link correcto o en su defecto algún ejemplo si eres tan amable.

Hola nuevamente Neck, para comunicarte que realicé con éxito lo que me indicaste.

Ahora solo falta la búsqueda por palabras o conjunto de letras (ese si me interesa muchísimo). Mucho te agradece mi ilustres con tu sabiduría al respecto.

Gracias nuevamente, espero tus comentarios. Saludos.

Hola Neck, por fin logre realizar el ejemplo que le indicaste a <dprofundis>, solo que te quiero preguntar una cosa. Como hacer para que no aparezca tal cual el nombre del campo a como esta registrado en la BD, ejemplo:

a_paterno, a_materno, sino que aparezca en el combo Apellido Paterno, Apellido Materno

Gracias, ya con esto cerraría mi pregunta/petición y pondría mis comentarios finales.

No sé exactamente a qué te estás refiriendo. Si hablas de la etiqueta (que supongo que no) basta simplemente con editar el título de la etiqueta y cambiarlo.

Me huelo que me estás hablando de Access 2010, porque en Access 2007 no aparecen los títulos de las columnas. ¿Me equivoco? ¿Hablamos de A2010?

Bueno, te ruego me aclares un poco más este punto para estar seguro de qué estás preguntando.

Por otra parte me alegro que el tema de los filtros te funcionara correctamente. ;)

Hola Neck,

Me refiero a que en el cuadro combinado, origen de la fila "Lista de Campos", me salen todos los campos de la base de datos (con el nombre que fue creado).

Ejemplo:

a_paterno - No podría ser Apellido Paterno en lugar de a_paterno

a_materno - No podría ser Apellido Paterno en lugar de a_materno

Por otra parte, no se podría limitar a que solo me muestre los campos mas importantes (a juicio).

Gracias, espero tus comentarios.

Directamente no se puede conseguir lo que quieres. Los campos son los que son, con el nombre que has establecido para ellos.

Sin embargo, sí podemos hacer un poco de "trampa" para conseguir las dos cosas que pretendes (es decir, que matamos dos pájaros de un tiro). Si lo pillas la cosa no es difícil, pero según el número de campos que quieras incluir es laborioso.

Para esa trampa tienes que hacer lo siguiente:

1.- Creas una consulta sobre la tabla de donde quieres coger los campos. No añadas ningún campo al grid de la consulta

2.- En el grid de la consulta, en las columnas vacías, escribes, en la primera línea, la siguiente estructura:

NombreAMostrar: NombreCampo

Es decir, que, en tu caso, escribirías:

Apellido paterno: a_paterno

Apellido materno: a_materno

Y así sólo con los campos que quieras que te aparezcan en el combo (los que tu comentas como "a juicio").

3.- Guardas la consulta con el nombre que quieras.

4.- En el combo le dices que el origen de la fila es la consulta que has creado.

5.- Necesitarás, en el código, realizar unas equivalencias entre los nombres que has definido tú y los campos de la tabla. Eso lo puedes hacer, si tienes dos campos para elegir, con un IF... END IF. Si tienes más de dos campos para elegir puedes utilizar un SELECT CASE.

Por ejemplo, el código en abstracto te podría quedar así (ojo, que es en abstracto, y no como código):

campoABuscar = me.cboListaCampos.Value

-> Por ejemplo, te devolverá "Apellido paterno" si seleccionas este valor

Transformas el campo:

SELECT CASE campoABuscar

Case "Apellido paterno"

campoABuscar = "a_paterno" -> Ya lo has cambiado al nombre del campo de la tabla

Case "Apellido materno"

campoABuscar = "a_materno"

Case "nombreEnConsulta"

campoABuscar = "nombreEnTabla"

END SELECT

Y a partir de ahí seguir operando con el código.

Como no sé cómo tienes la cosa estructurada sólo puedo comentarte generalidades. Espero que hayas "pillado" la mecánica del asunto y no tengas problemas en adaptarlo a tu BD.

Perdón Neck, no me queda claro eso del código en abstracto, donde lo pongo?

Ya me atore, una disculpa.

El código lo debes poner en aquellos eventos donde necesites realizar el filtro, siempre y cuando intervenga el valor seleccionado en dicho combo. Sin ver tu BD es muy difícil darte una respuesta, porque no sé exactamente qué haces con ese combo, ni qué acciones se derivan de la selección de un valor en ese combo.

En mi respuesta yo he dado por supuesto que utilizas el valor del combo para realizar los filtros, pero eso es una suposición.

Por ejemplo, supongamos que el funcionamiento de tu formulario es el siguiente:

- Seleccionas un campo del combo

- En un cuadro de texto escribes un valor para buscar.

- Pulsas un botón para buscar los resultados

El formulario te filtra ese valor en el campo que has seleccionado a través del combo.

Entonces el código estaría en el botón, que te diría (a lo bestia)

Filtro= <campoDelCombo> LIKE *valorBuscado*

Con la trampa que te proponía tendrías que hacer la conversión, y te quedaría así (a lo bestia):

campoCombo = valorDelCombo

campoCombo = equivalencia (si el valor del combo es "Apellido parterno" cámbiamelo a "a_paterno")

Filtro=<campoCombo(transformado)> LIKE *valorBuscado*

Espero haberte aclarado un poco la historia. Piensa que yo NO sé para que utilizas el valor del combo, y a lo mejor te estoy montando aquí una montaña de lo que podría ser un grano de arena.

En el peor de los casos no hagas ninguna equivalencia. Cuando le des a un botón (o cualquier control que puedas tener programado) que tenga código y te salga algún error de código, si ves que el error tiene relación con el combo, pues ahí debes meter la equivalencia.

Ya me dirás,

Neckkito

Analizado lo que me dices, tienes razón Neck.

Creo que seria mejor si me ejemplificaras con el uso del Select Case mediante un combo y así me evito el seleccionar de la lista de campos de mi base de datos.

Mis búsquedas se basan en los campos a_paterno, a_materno, nombre y este es el código que tengo.

Private Sub cmdBusca_Click()
Dim vCamp As String, vText As String
Dim miFiltro As String
vCamp = Nz(Me.cboCampo.Value, "")
vText = Nz(Me.txtBusca.Value, "")
If vCamp = "" Or vText = "" Then Exit Sub
miFiltro = "[" & vCamp & "] LIKE '*" & vText & "*'"
Me.Filter = miFiltro
Me.FilterOn = True
End Sub

Imagino que en lugar de los IFs van los Case

Espero tus comentarios, gracias.

Marchando una de código!

...

Private Sub cmdBusca_Click()
Dim vCamp As String, vText As String
Dim miFiltro As String
vCamp = Nz(Me.cboCampo.Value, "")
vText = Nz(Me.txtBusca.Value, "")
If vCamp = "" Or vText = "" Then Exit Sub

Select Case vCamp

Case "Apellido paterno"

vCamp = "a_paterno"

Case "Apellido materno"

vCamp = "a_materno"

'etc con los diferentes campos que quieras

End Select
miFiltro = "[" & vCamp & "] LIKE '*" & vText & "*'"
Me.Filter = miFiltro
Me.FilterOn = True
End Sub

...

Muchísimas gracias.

Créeme que con la lógica, experiencia y facilidad con la que explicas las cosas, mis mas sinceros respetos Neck.

Enhorabuena!

Espero seguir despejando mis dudas con tu sabiduría.

Un abrazo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas