2013-11-02

Cuadros combinados en cascada en Ms Access

Los cuadros combinados en cascada en un formulario son cuadros combinados sincronizados. La elección de un elemento de un cuadro combinado limita los elementos disponibles en los cuadros combinados subsiguientes. Pueden ser muy útiles para guiar, agilizar y reducir la probabilidad de errores en la búsqueda o la introducción de datos en un formulario. Por ejemplo, si en nuestro ejemplo seleccionamos Castilla-La Mancha en CC.AA., en provincia no podremos elegir Granada o en municipio Salamanca.


Para construir cuadros combinados dependientes necesitamos:

1. Orígenes de filas con consultas cuyos criterios se basen en los cuadros combinados precedentes.
2. Eventos que recalculen los valores de los cuadros combinados dependientes.

Tenemos tres tablas relacionadas Tbl_CCAA, Tbl_Provincias y Tbl_Municipios. Creamos tres cuadros combinados con origen en sus respectivos campos.

1. Cuadro combinado CC.AA.



Accedemos a las propiedades del cuadro combinado haciendo clic sobre icono Hoja de propiedades o seleccionando el cuadro y presionando Alt+Entrar o F4. En la pestaña Datos, en la propiedad Origen de la fila seleccionamos las comunidades autónomas de la tabla homónima:


En la pestaña Eventos, seleccionamos Después de actualizar, clic en el cuadro con tres puntos suspensivos y, a continuación, clic en Generador de código.

En el editor de visual escribimos el siguiente código:
Private Sub CCAA_AfterUpdate()
Provincia.Value = Null
Provincia.Requery
Municipio.Value = Null
Municipio.Requery
End Sub
Cada vez que cambia la selección del cuadro combinado CCAA, asigna un valor nulo a los cuadros Provincia y Municipio, y recalcula ambos. Sin recalcular, el cambio en el cuadro combinado precedente no tendría efecto en las consultas de origen de fila basadas en los mismos. Pues los cuadros combinados se actualizan al abrir el formulario.

2. Cuadro combinado Provincia.

En la Hoja de propiedades, en las pestaña Datos, Origen de la fila, hacemos clic sobre los tres puntos para diseñar una consulta que relacione las tablas Tbl_CCAA y Tbl_Provincias. Introducimos un criterio basado en la selección del cuadro de combinado precedente: CCAA.


En la pestaña Eventos, seleccionamos Después de actualizar, clic en el cuadro con tres puntos suspensivos y, a continuación, clic en Generador de código:
Private Sub Provincia_AfterUpdate()
Municipio.Value = Null
Municipio.Requery
End Sub

Cada vez que cambia la selección del cuadro combinado Provincia, asigna un valor nulo a Municipio, y lo recalcula.

2. Cuadro combinado Municipio.

Repetimos el paso anterior, esta vez con el cuadro municipio. En la Hoja de propiedades, en las pestaña Datos, Origen de la fila, hacemos clic sobre los tres puntos para diseñar una consulta que relacione ambas tablas, Tbl_Provincias y Tbl_Municipios. En criterios acotamos la consulta en función de la elección del cuadro provincias.

Esta vez no es necesario crear el evento Después de actualizar.

Tras estos pasos, ya tendríamos los tres cuadros combinados sincronizados en cascada.

Entradas relacionadas

28 comentarios:

  1. Si se siguen los pasos en detalle, funciona perfectamente!!! Sólo tener en cuenta que los nombres Provincia y Municipio, son los nombres de los cuadros combinados a los que se hace referencia.

    ResponderEliminar
  2. Perfecto !!! Muy buena utilidad.!!!

    Sólo tener en cuenta que dónde se indican los nombres Provincia y Municipio, se está refiriendo a los nombres de los cuadros combinados, lo que por defecto el asistente coloca como 'Cuadro_CombinadoNN'.

    ResponderEliminar
  3. Buenos dias
    Hola, me pueden decir como le hago cuando ya esta hecho el cuadro combinado al momento de estar introucinedo caracteres la lista que despliega del cuadro combinado se vaya reduciendo??

    ResponderEliminar
    Respuestas
    1. Buenas tardes, eso sería otra solución diferente. Consulta el enlace
      'Usar un cuadro combinado para buscar al teclear en Access' que he añadido al final, en entradas relacionadas. Saludos

      Eliminar
  4. Parecía fácil pero... A los combos les he asignado el mismo nombre del ejemplo pro anteponiendo el prefijo "cbo". He seguido todos los pasos pero el combo 3 no presenta nada.
    Orígen de la fila:
    Combo 1: SELECT tblCCAA.CCAA, * FROM tblCCAA;

    Combo 2: SELECT tblProvincias.Provincia, tblCCAA.CCAA, * FROM tblCCAA INNER JOIN tblProvincias ON tblCCAA.CCAAID = tblProvincias.CCAAID WHERE (((tblCCAA.CCAA)=[Formularios]![frmCuadrosCombinados]![cboCCAA])) ORDER BY tblProvincias.Provincia;

    Combo 3: SELECT tblMunicipios.Municipio, tblProvincias.Provincia, * FROM tblProvincias INNER JOIN tblMunicipios ON tblProvincias.ProvinciaID = tblMunicipios.ProvinciaID WHERE (((tblProvincias.Provincia)=[formularios]![frmCuadrosCombinados]![cboProvincias])) ORDER BY tblMunicipios.Municipio;

    AfterUpdates:

    Private Sub cboCCAA_AfterUpdate()
    cboProvincia.Value = Null
    cboProvincia.Requery
    cboMunicipio.Value = Null
    cboMunicipio.Requery
    End Sub

    Private Sub cboProvincias_AfterUpdate()
    cboMunicipio.Value = Null
    cboMunicipio.Requery
    End Sub

    ¿Qué estoy haciendo mal?. Gracias por vuestro tiempo y atención

    ResponderEliminar
    Respuestas
    1. Hola Javier, repasa bien las consultas orígenes de filas y los nombres de los cuadros combinados. Veo varias erratas en el código que has escrito: comas al final del último campo y un asterisco. Además solamente necesitas seleccionar un campo como origen (provincia y municipio). En Combo3 denominas a un cuadro combinado como cboProvincias y en el evento after update lo llamas cboProvincia (le falta una s). Saludos.

      Eliminar
  5. Tengo una duda, cuando se escribe el código en la consulta esta el siguiente código [Formularios]![Formulario1]![CCAA], en mi caso mi tabla tiene el nombre de Tipo de servicio, por lo que escribí [Formularios]![Formulario1]![Tipo de servicio], mi duda es si debo dejar así el código o debo escribir entre los espacios en blanco guion bajo, siendo de la siguiente manera [Formularios]![Formulario1]![Tipo_de_servicio]

    ResponderEliminar
    Respuestas
    1. Tardas menos en comprobarlo tú mismo que en preguntarlo. Saludos.

      Eliminar
  6. Hola, tengo problemas con los combos en cascada, al incluirlos en un formulario que apunta a una consulta en la que están relacionadas varias consultas con otros campos combinados, el combo en cascada no funciona. ¿Hay alguna forma de solucionar dicho problemilla? Los combos en cascada los quiero utilizar para incluir datos en una ficha de cliente, de forma que al seleccionar la provincia solo me permita poner la localidad correspondiente a dicha provincia.

    Asimismo, estoy buscando como poner combos en cascada con selección múltiple en el último combo y no encuentro información, ¿podrías ayudarme?

    Muchas gracias.

    ResponderEliminar
    Respuestas
    1. Buenas tardes, debes acudir a un foro de resolución de problemas. Saludos.

      Eliminar
  7. Hola me sirvió bastante tu post! pero quería hacerte una consulta relacionada al paso siguiente, resulta que tengo 4 tablas en donde selecciono una mediante un cuadro de lista y luego ingreso un rut mediante un cuadro combinado, Luego necesito que me liste a esa persona... es decir, que abra la hoja de datos o algo parecido con los datos del rut que ingreso. si pudiera ayudarme seria supero he buscado hasta el cansancio

    ResponderEliminar
  8. no podrias pasarme la base de datos en access asi la veo y me ubico con todo lo exp;icado por favor mi correo es themenace244@hotmail.com

    ResponderEliminar
    Respuestas
    1. No, salvo que estés dispuesto a pagar por el servicio. Saludos.

      Eliminar
  9. Hola,
    Tengo una duda.... ¿Se pueden hacer listas anidadas utilizando la vista de Hoja de Datos?
    Lo he intentado, pero en la lista secundaria me muestra las opciones según el último valor cargado en la última lista principal....
    Gracias!

    ResponderEliminar
  10. Como podría hacer para si una Comunidad es uniprovincial, automaticamente aparezca el nombre de su única provincia en el cuadro combinado "Provincia" ?

    Es que así como esta, aunque sea de una sola provincia, hay que hacer click en el desplegable y seleccionarla.

    Gracias.

    ResponderEliminar
    Respuestas
    1. Editando el código en 'Después de actualizar' estableciendo por defecto el primer valor en lugar de nulos.
      Saludos

      Eliminar
    2. Muchisimas gracias!

      Eliminar
  11. Hola! genial!! Cómo podría guardar los datos de esos cuadros combinados en la tabla? Ya que por ejemplo, en mi caso:

    Tengo una agenda para dar citas. Los cuadros combinados que he creado son:
    - Cuadro_combinado65
    - Paciente
    - dnip
    - numpac

    De tal modo que seleccion Cuadro_combinado65, de ahí sólo me saldrán los pacientes asociados a ese cuadro, luego he creado una lista para el dnip y para el numpac. Una vez seleccionado todo esto, me gustaría que se guardara la cita ya que he creado el botón de imprimir cita y el justificante.

    Si lo hago sobre la marcha puedo imprimir la cita sin problema, pero el problema viene cuando por ejemplo el 1 de mayo le he dado cita para el 3 de junio, el 1 de mayo imprimo sin problemas la cita, pero cuando entro el día 3 hay que seleccionar otra vez todos los datos para darle el justificante de la visita.

    ¿Cómo podría guardar esos datos para que no tenga que volver a escribirlos?

    No sé si me he explicado correctamente jejeje.

    Gracias!!!!
    -

    ResponderEliminar
    Respuestas
    1. Buenas Daniel, has podido solucionar esto? yo estoy teniendo el mismo problema. ME interesa rescatar del cuadro combinado "municipios" por ejemplo el campo Id para volcarlo en otra tabla

      Eliminar
  12. Hola aplique la sugerencia y funciona bien la primera vez, pero luego no refresca los cuadros de provincia y municipio cuando hago otra selecciom del ccaa

    ResponderEliminar
  13. Hola:

    Tengo una BDD en la que quiero una cascada de datos, a partir de País, Comunidad, Provincia, Vegueria, Comarca, Subcomarca, Municipio y Lugar. He seguido paso a paso el tutorial, pero en la ejecución me aparece un error 424. Ruego si me pueden ayudar. Podría pasar datos por privado. Gracias

    ResponderEliminar
    Respuestas
    1. No hago trabajos de consultoría gratis. Saludos.

      Eliminar
    2. Sin problema. Disculpas. Saludos.

      Eliminar
    3. Para intentar resolverlo empieza con dos cuadros combinados. Cuando funcione y lo entiendas bien, ve añadiendo más cuadros combinados.

      Eliminar
    4. Hola. Gracias. Con el ejemplo que indicáis de tres, funciona perfectamente, pero cuando intento ponerle más de 3, entonces ya no va bien. Supongo que algo haré mal con las relaciones de los combos. Seguiré mirando a ver.

      Eliminar
  14. Hola buenas a mi me ha funcionado perfecto. En mi caso en vez de tres cuadros combinados, tengo 6, se van actualizando los campos correctamente, sin embargo cuando los relleno y paso al siguiente registro o creo uno nuevo o cierro el formulario, los campos de estos cuadros que había rellenado se eliminan y no aparecen. No se a que se puede deber, es como si no guardara la selección.

    ResponderEliminar

Nube de datos