Cuadros combinados en escalera

De hace mucho tiempo he buscado ejemplos de cuadros combinados que, en función de lo que aparezca en el primero, aparecerá en el segundo, y de este, en el tercero y así sucesivamente hasta 3 o 4. El caso es que consigo lo que busco pero no sé qué ocurre que con el tiempo deja de funcionar. Conociendo tu forma fácil de trabajar con access, ¿alguna idea de las tuyas?

Un saludo y te espero en las Afortunadas ;)

1 Respuesta

Respuesta
1

D

Ciertamente, no acabo de entender tu consulta: ¿Me estás diciendo que te funciona, pero al cabo de un tiempo... plof?

La verdad es que a mí nunca me ha pasado eso, por lo que no sabría qué decirte. Estoy pensando, pero no me viene a la cabeza nada que pueda causarte ese problema.

Me imagino que compactas la BD con periodicidad, ¿verdad?

No sé...

Lo único que se me ocurre hacer es que, cuando te deje de funcionar, vuelvas a crear el mismo sistema en un formulario paralelo: si no consigues hacerlo funcionar podría ser porque has metido algún valor que causa algún tipo de conflicto.

De todas maneras hay un caso (que yo conozca) de mal funcionamiento de cuadros combinados, reconocido por el propio Microsoft (Access 2003). No tiene una relación directa con el tema de los combos en cascada, pero quizá si el combo que da el mal funcionamiento entra en la "cascada" con alguna probabilidad podría "jorobar el invento".

Échale un vistazo en http://support.microsoft.com/kb/824189/es

De todas maneras estoy diciendo cosas por decir, porque, como ya te comentaba, no conozco una causa concreta que provoque el problema que comentas.

En fin...

Un gran saludo,

... http://neckkito.eu5.org ...

efectivamente, compacto pero... cada vez que cierro la base. Sólo en una ocasión conseguí el efecto, y como dejó de funcionarme, lo borré todo y lo hice a mano. Es decir, si elegía la opción A en el primer combo, entonces en el 2ª me aparecían las opciones del A, B, C, etc.

Aburrida me tiene este tema...

Vamos a ver...

Que compactes la BD al salir es algo bueno, por lo que...

Y, por lo que comentas, entiendo que sabes cómo hacer combos en cascada, ¿verdad?

Lo único que puedo añadir a lo que he dicho es que, siempre que te sea posible, apliques los filtros a través de claves principales o valores numéricos.

Si no... no sé.

voy a hacerlo ahora a ver si me sale (porque esa es otra, cuando comienzo un código un buen día, me funciona a la perfección y cuando quiero repetirlo, hay algo que falla). Ya te comento para no tener esta pregunta abierta sin más y pueda ayudar a los demás... ;)

Espero novedades... de que todo ha ido bien, claro ;)

Hola M,

Te cuento lo que me ha pasado.

Inserto el código y lo acoplo a mi base (que por 358º vez he vuelto a empezar, chico! me aburro ;)

Hago las pruebas (tengo 3 combos en cascada y para facilitarme los nombres, los he llamado Nivel1, Nivel2 y Nivel3). Nivel 1 hace referencia a Categorías, Nivel 2 a Carpetas y Nivel 3 a Subcategorías.

Pruebo el código.

Combo CATEGORÍA (Nivel1) tiene 3 opciones: A, B, C (aún no he elegido nada y en el resto de los combos, BIEN!!, no aparecen opciones aún).

Elijo opción A del Nivel1. Abro opciones del Nivel2. PERFECTO! me aparecen sólo los datos correspondientes al Nivel1. Ahora toca Nivel3. PERFECTO! también...

Hago una 2ª prueba. En Nivel2 elijo opción B. Los datos de los niveles 2 y 3 siguen ahí... ESTO NO ME GUSTA UN PELO! Los despliego. Siguen los datos correspondientes a la opción A del Nivel1.

Cierro la base.

Elijo la opción A nuevamente, del Nivel1... y a qué no sabes??? para no perder la costumbre... ahora NO APARECEN DATOS EN EL RESTO DE LOS COMBOS!!!!!

Si es que...

En el origen del Nivel1 tengo:

SELECT DISTINCTROW [tblNivel1].[IdNivel1], [tblNivel1].[Nivel1] FROM tblNivel1 ORDER BY [Nivel1];

En el origen del Nivel2 tengo:

SELECT DISTINCTROW tblNivel2.IdNivel2, tblNivel2.Nivel2 FROM tblNivel2 WHERE (((tblNivel2.IdNivel1)=[Formularios]![frmPrincipal]![Nivel1])) ORDER BY [Nivel2];

En el origen del Nivel3 tengo:

SELECT DISTINCTROW tblNivel3.IdNivel3, tblNivel3.Nivel3 FROM tblNivel3 WHERE (((tblNivel3.IdNivel2)=[Formularios]![frmPrincipal]![Nivel2])) OR (((nz([Formularios]![frmPrincipal]![Nivel2]))=0) AND ((tblNivel3.IdNivel2) In (SELECT DISTINCTROW tblNivel2.IdNivel2 FROM tblNivel2 WHERE (((tblNivel2.IdNivel2)=[Formularios]![frmPrincipal]![Nivel2]));))) ORDER BY [Nivel1];

jejejeje, ¿te cuento un chiste? ¿Cuánto ha pasado? ¿Dos minutos? Es que caí en la cuenta de que en el evento Después de actualizar, había cambiado el nombre de mi control y aparecía el evento vacío... Así que arreglado (por el momento). He hecho todas las pruebas y todo correcto.

Pero hay una duda a ver si me puedes abrir un poco los ojos... con esta solución que he encontrado en internet, resulta fácil en parte. Ya que con este sistema, los niveles tengo que tenerlos por escrito de antemano. Pero no es así, los voy añadiendo conforme voy creando carpetas (es decir, que no sé con antelación los nombres de los niveles). Lo que me obliga a delantarme, no sólo eso, sino que tengo que recordar que el 1, del nivel1, para el nivel2, el la opción A1, etc.

Vamos! un coñazo. Te pongo un ejemplo:

Campos de la tabla Nivel1: IdNivel1, Nivel1

Campos de la tabla Nivel2: IdNivel2, IdNivel1, Nivel2

Campos de la tabla Nivel3: IdNivel3, IdNivel2, Nivel3

Lo que significa que para rellenar las tablas Nivel2 y Nivel3, tengo que recordar los Id...

¿Jugando otra vez con combos? :P

Entiendo que los campos [IdNivel1], [IdNivel2] e [IdNivel3] son claves principales, ¿OK?

Prueba una cosa.

1.- Abre tu tabla Nivel2.

2.- Selecciona tu campo [IdNivel1]. Te vas a tipo de datos y le pones como tipo de dato "Asistente para búsquedas".

3.- Cuando te salga el asistente lo configuras de la siguiente manera:

- Deseo buscar los valores en una tabla

- Seleccionas la tabla Nivel1

- Añades los campos disponibles (lo dos, vamos)

- Ordenas por el campo que quieras (entiendo que lo lógico sería ordenar por [Nivel1])

- Si no te interesa la clave principal dejas el check de "ocultar la columna clave". Si, por lo que fuera, quisieras ver la clave, pues desmarcas ese check. Redimensionas los campos visibles a tu gusto.

- Dejas el nombre que le habías puesto ("IdNivel1")

- Finalizas y guardas la tabla para que se creen las relaciones.

¿Qué hemos conseguido con esto? Pues que ahora, cuando rellenes la tabla Nivel2, podrás elegir por nombre "Nivel1" el campo [IdNivel1], puesto que aunque veas los valores de [Nivel1] el valor que estás almacenando es [IdNivel1].

Si te va bien, para la tabla Nivel3 haces el mismo proceso, pero referenciado a la tabla Nivel2.

Ya me dirás qué tal.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas