You are on page 1of 3

LISTA MUY LISTA1

Supongamos que tenemos una tabla con unas poblaciones.


A su vez tenemos otra tabla con las ciudades de esas
poblaciones. Queremos seleccionar una población, que
aparece en un cuadro de lista, y que en ese mismo cuadro
de lista nos aparezcan las ciudades de la población
seleccionada. Una vez seleccionada una ciudad ese valor
nos pasa a un campo del formulario.

La información que nos interesa es:

– La tabla que contiene las poblaciones se llama <TPoblaciones>


– La tabla que contiene las ciudades se llama <TCiudades>
– El campo clave principal de <TPoblaciones> se llama [Poblacion] → De tipo texto
– La tabla <TCiudades> tiene los siguientes campos:
– [Id] → Autonumérico y clave principal
– [PoblacionCiu] → Texto
– [Ciudad] → Texto

Para desarrollar el ejemplo vamos a crearnos un formulario en blanco y vamos a añadir


(cancelando los asistentes):

– Un cuadro de lista
– Un cuadro de texto

Sacamos las propiedades del cuadro de lista y nos vamos a la Pestaña Otras → Nombre, y
escribimos lstPoblacion

En la etiqueta del cuadro de lista escribimos algo así como “Seleccione una población”.
Sacamos sus propiedades y le ponemos de nombre lblPoblacion

Sacamos las propiedades del cuadro de texto y nos vamos a la Pestaña Otras → Nombre, y
escribimos txtResultado

PREPARANDO LA TRAMPA
Vamos a seleccionar el cuadro de lista y vamos a hacer un copy-paste del mismo. Veremos que
nos aparece abajo un nuevo cuadro de lista. Sacamos sus propiedades y le ponemos de
nombre lstCiudad. En su etiqueta escribimos “Selecciona una ciudad”. Sacamos sus
propiedades y le ponemos de nombre lblCiudad

Una vez hecho lo anterior situamos este segundo cuadro de lista ENCIMA del primero, de
manera que parezca que sólo hay un cuadro de lista.

Para que cada vez que abramos el formulario o pasemos a un nuevo registro la lista nos
muestre las poblaciones lo que tenemos que hacer es:

1.- Sacamos las propiedades del formulario y nos vamos a la Pestaña Eventos → Al activar
registro, y generamos el siguiente código.

1 La BD de ejemplo os la podéis bajar aquí.

1
Visítame en http://siliconproject.com.ar/neckkito/
Private Sub Form_Current()
'Declaramos la variable
Dim miOrigen As String
'Creamos una SQL con el origen de la lista
miOrigen = "SELECT TPoblaciones.Poblacion FROM
TPoblaciones" _
& " ORDER BY TPoblaciones.Poblacion"
'Asignamos el origen a la lista
Me.lstPoblacion.RowSource = miOrigen
'Mostramos lstPoblacion y ocultamos lstCiudad
Me.lstCiudad.Visible = False
Me.lblCiudad.Visible = False
Me.lstPoblacion.Visible = True
Me.lblPoblacion.Visible = True
End Sub

MANIPULANDO LAS LISTAS


Vamos a sacar las propiedades del cuadro de lista lstPoblacion (si tenemos a la vista la ventana
de propiedades podemos seleccionarla a través del desplegable de la parte superior, que nos
indica qué control estamos manipulando) y nos vamos a la Pestaña Eventos → Al hacer doble
click, y generamos el siguiente código:


Private Sub lstPoblacion_DblClick(Cancel As Integer)
'Declaramos las variables
Dim vPobl As String
Dim miOrigen As String
'Cogemos el valor seleccionado
vPobl = Me.lstPoblacion.Value
'Creamos la SQL de origen
miOrigen = "SELECT TCiudades.Ciudad FROM TCiudades" _
& " WHERE TCiudades.PoblacionCiu = '" & vPobl & "'" _
& " ORDER BY TCiudades.Ciudad"
'Aplicamos nuestro origen a la lista
Me.lstCiudad.RowSource = miOrigen
'Refrescamos la información de la lista
Me.lstCiudad.Requery
'Ocultamos la lista lstPoblaciones y mostramos lstCiudades
Me.lstCiudad.Visible = True
Me.lblCiudad.Visible = True
Me.lstCiudad.SetFocus
Me.lstPoblacion.Visible = False
Me.lblPoblacion.Visible = False
End Sub

Y ahora sólo nos queda manipular lstCiudad. Así pues, en el evento “Al hacer doble click” de
esta lista generamos el siguiente código:


Private Sub lstCiudad_DblClick(Cancel As Integer)
'Declaramos la variable
Dim vCiud As String

2
Visítame en http://siliconproject.com.ar/neckkito/
'Cogemos el valor seleccionado
vCiud = Me.lstCiudad.Value
'Escribimos el valor en nuestro TextBox
Me.txtResultado.Value = vCiud
'Ocultamos la lista lstCiudades y mostramos
lstPoblaciones
Me.lstPoblacion.Visible = True
Me.lblPoblacion.Visible = True
Me.lstPoblacion.SetFocus
Me.lstCiudad.Visible = False
Me.lblCiudad.Visible = False
End Sub

Y eso es todo. Si queréis probar podéis bajaros esta miniBD de ejemplo.

Espero que os sea útil.

¡Saludos!

3
Visítame en http://siliconproject.com.ar/neckkito/

You might also like