Formulario con "Combo en cascada"

Tengo una Base de datos con una tabla "tbl_averias" y otra llamada "tbl_combo_averias" que las utilizo junto con un formulario llamado "frm_averias". Dentro del formulario hay un combo en cascada compuesto por 5 cuadros combinados llamados cbo_ubicacion1 a cbo_ubicacion_5, seguido de un cuadro de texto llamado "txt_descripcion_averia". Para trabajar con los cuadros combinados utilizo los datos de la tabla "tbl_combo_averias" y guardo los datos del formulario en la tabla "tbl_averías". Para hacer el combo en cascada cogí el código de la base de datos "Combos en cascada" realizada por neckkito . http://neckkito.xyz/nck/index.php/ejemplos/16-controles/114-combos-en-cascada 

Y la modifique para trabajar con 5 cuadros combinados. Y está funcionando como la del ejemplo. Para entender mejor el problema les explicaré con los datos del ejemplo de neckkito que será más esclarecedor. Cuando filtramos por ejemplo País = España, Provincia = Cordoba, Población = La Victoria ,  y tenemos un País = Argentina, Provincia = Cordoba, Población = San Luis, en población nos aparecen los pueblos de España y los de Argentina, solo guarda en memoria el valor del cuadro combinado anterior y no filtra correctamente.

Otro problema sería, que utilizando el cuadro combinado 4 para "Urbanización" y el cuadro combinado 5 para "Barrio"por ejemplo, que si no tienen datos, se fuesen directamente al cuadro de texto que hay después del combo en cascada.

Les agradecería que me lo detallasen lo mejor posible ya que tengo un nivel básico.

2 Respuestas

Respuesta
3

El ejemplo de Neckkito es solo eso, un ejemplo para explicar una cosa (en ese caso combos en cascada) de una forma muy simplificada.

En una aplicación "seria", hubiera utilizado una tabla Paises (con un IDPais), una tabla Provincias (con un IDProv y relacionada con Paises por IDPais) y así sucesivamente, con lo que a la hora de hacer los combos en cascada ya te evitas ese problema de que te salgan pueblos de Córdoba (España) y Córdoba (Argentina)

En el caso de hacerlo como en el ejemplo, con una sola tabla, tienes que ir acumulando filtros:

Al segundo combo, le pones el criterio del país, como en el ejemplo

Al tercer combo le pones dos criterios: el del país, y el de la provincia

Al cuarto, le pones 3 criterios, país, provincia y población.

Y así sucesivamente. De este modo, te filtrará cada combo correctamente.

Un saludo.


http://nksvaccessolutions.com/academy/ 

Respuesta
2

Por partes, no me gusta meterme en el trabajo de otros pero por adelantarte algo. Supongamos que tienes una tabla Mundo con País, Comunidad, Provincia, ciudad y Barrio. Si el combinado País lo has hecho(que no lo sé) con los países, en su evento Después de actualizar puedes poner

Comunidad.rowsource="select comunidad from mundo where pais='" & me.pais & "'"

En el combinado Comunidad, en el mismo evento puedes poner

Provincia.rowsource="select Provincia from mundo where comunidad='" & me.comunidad & "'"

Y así hasta el final.

En el caso de provincia puedes poner algo así como

If dcount("ciudad","mundo","comunidad='" & me.comunidad & "'")=0 then

Msgbox"como esta comunidad no tiene ninguna provincia me voy al cuadro de texto", vbokonly,"Que lo sepas"

Nombredlecuadro de texto.setfocus

else

ciudad.rowsource="select ciudad from mundo where provincia='" & me.provincia & "'"

end if

A los combinados, por comodidad le he puesto el mismo nombre que los valores.

Hola,

La primera cuestión la pude solucionar con la respuesta que me disteis, gracias.

Con respecto a la segunda no lo acabo de entender, perdón.

En una tabla tbl_MisDatos, que es donde grabaré los datos finales, tengo los campos Mundo, País, Comunidad, Ciudad, Barrio y otro código_postal.

En otra tabla llamada tbl_combo es donde tengo los datos para mostrar y poder seleccionar a través del formulario frm_MisDatos, dicha tabla tiene los campos combo_Mundo, combo_Pais, combo_Comunidad, combo_Ciudad y combo_Barrio.

En el formulario frm_MisDatos donde seleccionare los datos  tengo 5 cuadros combinados, cbo_Mundo, cbo_Pais, cbo_Comunidad, cbo_Ciudad y cbo_Barrio, en este orden, seguido de un cuadro de texto llamado txt_codigo_postal.

En el caso de estar en el formulario frm_MisDatos , llegara al cuadro combinado cbo_comunidad, y selecciono una comunidad, que en el campo combo_ciudad de la tabla tbl_combo no hubiese nada, al perder el foco del cuadro combinado cbo_comunidad me pasase directamente al cuadro de texto txt_codigo_postal, sin haber cogido el foco del cuadro combinado cbo_ciudad.

Esto es más o menos lo que me gustaría que hiciese el código.

Un saludo

Gracias

Para no pasarme la tarde rellenando registros(que lo odio) te pongo el ejemplo con tres combinados, pero la mecánica es la misma. Yo he hecho las tablas Mundo, Pais y Comunidad de esta forma( no hace falta que este relacionadas, yo lo hice para poder hacer formularios y rellenar registros)

Con la tabla Mis datos hago el formulario, da igual si es único o continuo y en vista diseño cambio los cuadros de texto por combinados y no le pongo nada en el Origen de la fila. Cada cuadro combinado le digo que tenga dos columnas, que su ancho sea 0;5 y que la columna dependiente sea la 2. Luego en el evento al recibir el enfoque del combinado Mundo le digo

Como puedes ver le voy diciendo que al recibir el enfoque su origen de la fila sean los valores que le indico. Y por último le digo que si algún pais no tuviera comunidad, en el ejemplo Nigeria, el cursor se vaya a CodPostal

No salen ciudades ni barrios pero como te decía la mecánica es la misma y cuando he elegido Nigeria el cursor se ha ido a CodPostal.

Como me parece entender que tienes todos los campos en una misma tabla sólo tendrías que poner, en el caso de Mundo

Mundo.rowsource="Select Mundo from tbl_combo group by mundo"

Y en los combinados poner una columna y en columna dependiente la 1

Luego sería

Pais.rowsource="select Pais from tbl_combo where mundo='" & me.mundo & "'"

Comunidad.rowsource="select comunidad from Tbl_combo where pais='" & me.pais & "'"

De todas formas, si quieres, repito, si quieres, mándame un mensaje(sólo el mensaje), pero si me mandas la tabla Tbl_combo no tengo que rellenar registros a [email protected] Si lo haces, en el asunto del mensaje pon tu alias José Vergel, ya que si no sé quien me escribe ni los abro

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas