Insertar abecedario búsqueda en un formulario.

Me he hecho una BD para mi bibioteca y me gustaría saber como puedo poner las letras del abecedario en un formulario y que al picar sobre ellas me aparezca el primer registro que empiece por esa letra (título o autor/a)

Respuesta
1

Hay varias maneras de hacerlo. Te cuento una que he usado yo en algunas ocasiones.

En mi caso tengo una lista de personas (unas 10.000) con datos entre los que está el campo Apellidos. Tengo un formulario denominado "frmBuscarPersona_Listado" en el que su mayor parte está ocupada con un subformulario de tipo continuo llamado "frmBuscarPersona_ListadoSub", es decir, que muestra en cada línea el registro de una persona (con su barra de desplazamiento vertical...). Este subformulario está basado en una consulta sobre la tabla que contiene los datos de las personas (tblPerosnas), a la que se le añade como criterio en el campo Apellidos una sentencia como la siguiente:

WHERE (((tblPersonas.Apellidos) Like [Formularios]![frmBuscarPersona_Listado]![FiltroDeBotones]))

Con esto le indico a la consulta que solo me enseñe los apellidos que sean como el valor que esté en el campo "FiltroDeBotones" del formulario "frmBuscarPersona_Listado". En este formulario tengo un grupo de opciones llamado "BotonesFiltroAlfabetico" en el que he incluido un botón para cada letra del abecedario, y uno con el texto "Todos". Este botón es el predeterminado del grupo. Cada botón tiene en su propiedad titulo la letra que le toca (para mostrarla como texto del botón) y un valor (A > 1, B > 2 ...). Coloca los botones para que queden aparentes (en mi caso en dos líneas, con un mayor tamaño del botón "Todos", formato de letra...). En el código que te adjunto verás que al seleccionar un botón (una letra visualmente) en el grupo de opciones "BotonesFiltroAlfabetico" actualizo el valor del campo "FiltroDeBotones" del formulario. Como este campo está en la consulta base del subformulario que muestra las personas, al ejecutarse finalmente el código asociado a BotonesFiltroAlfabetico_AfterUpdate se recalcula el origen de datos a mostrar. Osea, si presiono la letra A en el grupo de opciones "BotonesFiltroAlfabetico", en el campo (oculto para que quede bien visualmente) "FiltroDeBotones" establezco el valor A*. Una vez ejecutadotodo el código al recalcularse el origen de datos del subformulario, éste solo presentará los registros cuyos apellidos empiecen con la letra A. Puedes añadir un contador de registros para que te diga cuantos hay que empiecen por A o cualquier letra que selecciones...

Ya solo te queda añadir código a los eventos antes de actualizar y después de actualizar del grupo de opciones "BotonesFiltroAlfabetico" (usar el generador en la ventana de propiedades...). Modifícalo en función de los nombre que les des a tu formulario, campos... y con esos cambios debe de funcionarte.

Te copio el código de ambos eventos.

Private Sub BotonesFiltroAlfabetico_BeforeUpdate(Cancel As Integer)
On Error GoTo BotonesFiltroAlfabetico_BeforeUpdate_Err
    Select Case Me.BotonesFiltroAlfabetico
        Case 1
            Me.FiltroDeBotones = "A*"
        Case 2
            Me.FiltroDeBotones = "B*"
        Case 3
            Me.FiltroDeBotones = "C*"
        Case 4
            Me.FiltroDeBotones = "CH*"
        Case 5
            Me.FiltroDeBotones = "D*"
        Case 6
            Me.FiltroDeBotones = "E*"
        Case 7
            Me.FiltroDeBotones = "F*"
        Case 8
            Me.FiltroDeBotones = "G*"
        Case 9
            Me.FiltroDeBotones = "H*"
        Case 10
            Me.FiltroDeBotones = "I*"
        Case 11
            Me.FiltroDeBotones = "J*"
        Case 12
            Me.FiltroDeBotones = "K*"
        Case 13
            Me.FiltroDeBotones = "[LL]*"
        Case 14
            Me.FiltroDeBotones = "M*"
        Case 15
            Me.FiltroDeBotones = "[NÑ]*"
        Case 16
            Me.FiltroDeBotones = "O*"
        Case 17
            Me.FiltroDeBotones = "P*"
        Case 18
            Me.FiltroDeBotones = "Q*"
        Case 19
            Me.FiltroDeBotones = "R*"
        Case 20
            Me.FiltroDeBotones = "S*"
        Case 21
            Me.FiltroDeBotones = "T*"
        Case 22
            Me.FiltroDeBotones = "U*"
        Case 23
            Me.FiltroDeBotones = "V*"
        Case 24
            Me.FiltroDeBotones = "W*"
        Case 25
            Me.FiltroDeBotones = "X*"
        Case 26
            Me.FiltroDeBotones = "Y*"
        Case 27
            Me.FiltroDeBotones = "Z*"
        Case 28
            Me.FiltroDeBotones = "*"
    End Select
BotonesFiltroAlfabetico_BeforeUpdate_Exit:
    Exit Sub
BotonesFiltroAlfabetico_BeforeUpdate_Err:
    MsgBox Err.Description
    Resume BotonesFiltroAlfabetico_BeforeUpdate_Exit
End Sub
Private Sub BotonesFiltroAlfabetico_AfterUpdate()
On Error GoTo Err_BotonesFiltroAlfabetico_AfterUpdate
    Me.frmBuscarPersona_ListadoSub.Requery
Exit_BotonesFiltroAlfabetico_AfterUpdate:
    Exit Sub
Err_BotonesFiltroAlfabetico_AfterUpdate:
    MsgBox Err.Description
    Resume Exit_BotonesFiltroAlfabetico_AfterUpdate
End Sub

En lugar de hacerlo sobre el campo Apellidos, puedes hacerlo sobre los campos que comentas (titulo, autor o cualquier otro que desees). Basta con que bases el subformulario en una consulta en la que en la columna que corresponda tenga un filtro similar al que uso en mi caso sobre el campo Apellidos.

Cordiales saludos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas