Cuatro (4) cuadros combinados en cascada

Tengo cuatro (4) cuadros combinados en un formulario :

  • Cuadro Combinados Estados
  • Cuadro Combinado Municipios
  • Cuadro Combinado Parroquias
  • Cuadro Combinado Código Postal

En el cuadro combinado Estados, tengo los estados de Venezuela

En el cuadro combinado Municipios tengo los Municipios de cada Estado

En el cuadro combinado Parroquias tengo las parroquias de cada Municipio

En el cuadro combinado Código Postal tengo los códigos postales de cada Parroquia

Necesito lo siguiente,

Al seleccionar un Estado, en el cuadro combinados Estado, me aparezcan en el cuadro combinado los municipios del estado seleccionado; Al seleccionar el Municipio en el cuadro combinado Municipio, me aparezcan las parroquias en el cuadro Combinado Parroquias; Al seleccionar una Parroquia en el cuadro combinado Parroquias, me aparezcan los códigos postales de cada parroquia.

Agradezco toda la ayuda que me puedan aportar en la configuración de estos 4 cuadros combinados en cascada.

1 respuesta

Respuesta

Los cuadros combinados solo presentan los datos, lo importante es crear las tablas que los contienen y lo mas importante: sus relaciones, ello facilitara asignar el contenido de los combos.

El combo 'Estados' (el de nivel superior) no es un problema

Al seleccionar uno de sus Items se toma su ID y con el se crea el contenido (RowSource) del siguiente utilizándolo para filtrar el combo 'Municipios'.

El tercero y cuarto obtienen su respectivos 'RowSource' de igual forma, esto es, tomando el ID seleccionado en el combo que le precede para filtrar su contenido.

En todas las tablas debería haber dos IDs, uno el propio (sin repeticiones) y otro el de la tabla con la que esta relacionada (que podrá repetirse), la excepción: la primera (todos son Venezuela).

Para evitar posibles duplicaciones de datos, se crean índices con los campos que lo impidan.

Amigo Enrique Feijo, disculpe en haberle respondido hoy, Voy a tratar de seguir sus recomendaciones.

A continuación le informo como esta conformada la BD, Base de datos muy sencilla ya que mi única intención es de aprendizaje de CUADRO COMBINADO EN CASCADA en el caso de 4 cuadros combinado. Hasta ahora no he visto por internet un ejemplo para el caso de 4 cuadro combinado en cascada.

TABLAS DE LA BASE DE DATOS

Tbl_Estados                                                                                             

  • Id_Estado
  • Estado

Tbl_Municipios

  • Id_Municipio
  • Municipio
  • Id_Estado

Tbl_Parroaquias

  • Id_Parroquias
  • Parroquia
  • Id_Municipio

Tbl_Codigo_Postal

  • Id_Codigo_Postal
  • Codigo Postal
  • Id_Parroquias

CUADRO COMBINADOS EN EL FORMULARIO

Cc_Estado

Cc_Municipios

Cc_Parroquias

Cc_Codigo Postal

FORMULARIO DE LA BD

Frm_Registro_Socio

Pruebo y si tengo problema, lo hago saber.

No hay limite en los 'encadenamientos' se puede:

.- Solicitar el almacén

.- En el almacén la planta (el piso)

.- En ese piso la fila

.- En esa fila la columna

.- En la columna el estante

.- En el estante el apartado

Y con el dato obtenido la/una maquina recolectora (un/el robot) localiza y obtiene el cable USB de tipo C de color naranja que esta en esa posición espacial.

Si no se utilizan más de tres, es porque no suele ser practico en un entorno real de trabajo (pero por ejemplo, puede ser útil para llenar formularios de solicitudes)

Amigo estos son los eventos que configure en los Cuadros combinados y solo me funciona los cuadros copmbinados  CboEstado y CboMunicipio.

¿Cual puede ser el error que estoy cometiendo?

Private Sub CboEstado_AfterUpdate()

    Me.CboMunicipio.RowSource = "SELECT Municipio FROM" & _

                            " Tbl_Municipios WHERE Id_Estado= " & Me.CboEstado & _

                            " ORDER BY Municipio"                     

   Me.CboMunicipio = Me.CboMunicipio.ItemData(0)

End Sub

*******************************************************

Private Sub CboMunicipio_AfterUpdate()

    Me.CboParroquia.RowSource = "SELECT Parroquia FROM" & _

                            " Tbl_Parroquias WHERE Id_Municipio= " & Me.CboMunicipio & _

                            " ORDER BY Parroquia"

  Me.CboParroquia = Me.CboParroquia.ItemData(0)

End Sub

************************************************************

Private Sub CboParroquia_AfterUpdate()

Me.CboCodigoPostal.RowSource = "SELECT CodigoPostal FROM" & _

                            " Tbl_Codigo_Postal WHERE Id_Parroquia= " & Me.CboParroquia & _

                            " ORDER BY Codigo_Postal"

    Me.CboCodigoPostal = Me.CodigoPostal.ItemData(0)

End Sub

En principio parece que esta todo bien, pero dado que el ultimo da problemas, me surge la duda de que tipo de campo se trata, un ID se puede guardar en un campo de texto o en un campo numérico.

El problema también puede ir en otra línea: que no se este tomando el dato de la columna adecuada (la que tiene el ID) y que devuelva otra.

Los combos devuelven el dato de la columna dependiente (en modo diseño: en sus propiedades ==>>  pestaña datos ==>> 'columna dependiente'), que se numeran de izquierda a derecha comenzando en la unidad.

Para que funcionen las relaciones, los datos han de ser del mismo tipo (ambos numéricos o texto), cuando sean texto: se le han de añadir los correspondientes marcadores (una comilla simple al inicio, otra al final o marcadores equivalentes).

Si se añade un punto de interrupción se puede verificar (en la ventana de inmediato) la SQL que da lugar a a ese origen de datos:

? "SELECT CodigoPostal FROM Tbl_Codigo_Postal WHERE Id_Parroquia= " & Me.CboParroquia & " ORDER BY Codigo_Postal"

O en un MSGBOX (se añade al principio una línea que mas tarde se puede borrar o comentar):

MsgBox ("SELECT CodigoPostal FROM Tbl_Codigo_Postal WHERE Id_Parroquia= " & Me.CboParroquia & " ORDER BY Codigo_Postal")

Doy por supuesto que existen datos que cumplan las condiciones.

Gracias por su atención al caso, voy a chequear e informo

Buenas tardes Amigo,

En atención a su recomendación logre la sincronización de los 4 Cuadros combinados en el Formulario. Guarda bien los registro en la tabla pero cuando abro el formulario de nuevo solo me trae la información de los dos primeros cuadro combinado (Estado y Municipio) los cuadros combinados Parroquia y Código Postal me salen en blanco. aun estando la información completa en la tabla de registro. Agradezco informarme cual seria el problema. Si acepta le puede hacer la base de datos que solo contienen un Formulario, las tablas es un formulario de aprendizaje  para tenerlo de ejemplo. Saludos

Común para todos los objetos de un formulario: sus eventos se ejecutan al interactuar con el objeto (seleccionar un valor o cambiarlo, recibir un click ... etc).

El primero (o uno cualquiera) activa el evento y ejecuta el código programado
Código que en este caso consiste en generar el origen de datos del siguiente combo en base al Item actual.

(Pero solo hace eso: asignarle un RowSource no selecciona ninguno de los/sus elementos).

Tras finalizar el código envía el foco al siguiente objeto que se convierte en el activo y quede a la espera de que se seleccione uno de sus Items. Y repetir el ciclo.

.- El primer combo:
Tiene un origen de datos y un elemento seleccionado

.- El segundo combo:
Tiene un origen de datos (se lo asigno el primero), pero no tiene seleccionado ningún elemento

.- El tercer combo:

No tiene origen de datos (no se ejecuto el evento del segundo que aún esta a la espera) ni por supuesto elemento seleccionado.

.- El cuarto combo:

No tiene origen de datos (no se ejecuto el evento del tercero) ni por supuesto elemento seleccionado.

Los eventos son simples secuencias de código (subfunciones) y se pueden reutilizar en el mismo formulario, solo hay que 'llamarlo' por su nombre al combo 'Parroquia' se le llamaría así:

CboParroquia_AfterUpdate

Y se ejecutaría el 'evento' sin interactuar con el objeto (como si se utilizase la función EnviarTeclas)

Prueba a modificar el código actual añadiendo al primer combo una llamada al segundo, al segundo una al tercero y al tercero una llamada al cuarto y así para los que resten.

Con esto se conseguirá actualizar en cadena los combos (todos actualizan al siguiente y siguientes).

Analiza el comportamiento:

En un registro nuevo, todos (excepto el primero que no depende de ninguno) deberán 'estar en blanco.
(El primero a la espera de que se seleccione uno de sus Items y ejecutar el evento).

En un registro ya creado o al cambiar de registro deberían presentar los datos adecuados (si la programación no lo impide).

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas