[RESUELTO]Listas Desplegables condicionadas a otro campo

Discute sobre las herramientas de la base de datos
Responder
JesúsMi
Mensajes: 36
Registrado: Mié Feb 10, 2010 12:46 pm

[RESUELTO]Listas Desplegables condicionadas a otro campo

Mensaje por JesúsMi »

Para empezar tengo tres tablas
Lugares : ID_Lugares, Lugares.
Horarios: ID_Horarios, horarios.
Turnos: ID_Turnos, Turnos

Necesitaría elegir de la lista desplegable de "lugares" uno de ellos, pero luego al elegir en el campo de "Horarios", me vendría de perlas que sólo se desplegaran los horaios correspondientes a ese lugar y no el de los otros, aunque algunos horarios son los mismos en diferentes lugares y otros diefieren- esto es, en dos lugares dieferentes coinciden dos horarios pero otros dos horarios de esos mismos lugares difieren en cuarto de hora - . De la misma manera ese horario y ese lugar determinarían la letra del turno que correspodiera a esa combinación.

No se si se podrá hacer, ya que si no es posible estaría resuelto, pero si se puede, necesitaría una orientación al respecto.

Gracias por vuestro tiempo y conocimiento.
Última edición por JesúsMi el Vie Abr 16, 2010 9:26 am, editado 2 veces en total.
linuxMint 19 Tara y w7 prof
Cascabel
Mensajes: 283
Registrado: Mié Nov 11, 2009 10:53 am

Re: Listas Desplegables condicionadas a otro campo

Mensaje por Cascabel »

Lo que hice fue vincular los turnos con lugares y horarios.
Un turno queda como una pareja lugar-horario y un texto para diferenciar los turnos (A,B,C...)
En el formulario de definiciones puedes manejar lugares, horarios y turnos.
Puedes diseñar otros formularios de entrada a tu gusto para esta tarea.
En el formulario de empleados, el campo "lugar" no tiene ningún misterio. Es un listbox corriente y moliente.
La parte interesante son las macros.
Al elegir un lugar (o al cambiar de empleado), se actualiza el desplegable de turnos.
LugHorTur.zip
Ejemplo (con macros)
(15.09 KiB) Descargado 1100 veces
OOo 3.3.0: OOO330m20 (Build:9567) en WXP+SP3 y en Ubuntu 10.10
JesúsMi
Mensajes: 36
Registrado: Mié Feb 10, 2010 12:46 pm

Re: Listas Desplegables condicionadas a otro campo

Mensaje por JesúsMi »

Hola de nuevo, he intentado replicar la propuesta, pero no lo consigo.
He adapatado las tablas a la siguiente forma:
HORSALUD: ID_HOR, HORARIOS.
LUGARES2: ID_LUGAR, LUGARES.
TURNOS: ID_TUR, ID_LUGAR, ID_HOR, TURNO

He vinculado: HORSALUD.ID_HOR con TURNOS.ID_HORARIOS. y LUGARES2.ID_LUGAR con TURNOS.ID_LUGAR.

En el formulario, he puesto una lista desplegable de la tabla: LUGARES2, y otra lista desplegable de la tabla turnos, pero no se donde ni como asignarla para que se despliegue exclusivamente los horarios correspondientes al lugar elegido en el anterior desplegable ( el correspondiente al de la tabal:LUGARES2). Para ello creí entender que se lograba asignando al formulario un a Macro. Esta Macro la he intentado replicarla adapatandola de la que me envío Cascabel, pero no lo consigo. Esta Macro modificada os la dejo en un archivo adjunto, ya que no se me deja adjuntar toda la base de datos para que la analizaseis. Espero que se entienda.
Gracias por todo.
Adjuntos
MACRO DE CONDICIÓN DE SELECCIÓN.doc
(12 KiB) Descargado 967 veces
linuxMint 19 Tara y w7 prof
Cascabel
Mensajes: 283
Registrado: Mié Nov 11, 2009 10:53 am

Re: Listas Desplegables condicionadas a otro campo

Mensaje por Cascabel »

Puedes adjuntar el archivo de la base de datos, pero no en formato ODB. Comprímela a ZIP (o a 7Z). Antes, elimina todo lo que no interese para el problema.

Veo bien adaptada la macro, salvo que si en la tabla de turnos el campo se llama "TURNO" (sin ese), en la consulta debe ser lo mismo: SELECT 'Turno '||T.""TURNO"" (también sin ese).

Llamé sAlCambiarEmpleado() a la macro porque va asignada al evento "Tras el cambio de registro de datos" del formulario principal (el de empleados). Esto es así para que se actualice el desplegable de turnos al cambiar de empleado (de lo contrario, retenía la lista de turnos correspondiente al lugar del anterior registro de empleado).

También se asocia la macro sRefrescaListaTurnos() al evento "Estado modificado" del deplegable de lugares. Cuando se elige un lugar, dicha macro cambia el foco a otro control y hace una pausa de 0 milisegundos. Esto permite que el cambio se haga efectivo en el origen de datos (los listbox tienen ese problema de tiempo). Luego, asegurados ya de que el valor correcto está almacenado, invoca la otra macro para que actualice el desplegable de turnos en función del lugar.

La macro sRefrescaCamposTabla() es utilizada sólo en el formulario de definiciones (lugares/horarios/turnos) y lo que hace es refrescar todo listbox que encuentre en el formulario. Edito: ¿Adaptaste también este formulario? Tiene varias columnas listbox en el control de tabla de abajo a las que habría que retocar el SQL.

Sí que es un poco lioso, ahora que lo miro.
OOo 3.3.0: OOO330m20 (Build:9567) en WXP+SP3 y en Ubuntu 10.10
JesúsMi
Mensajes: 36
Registrado: Mié Feb 10, 2010 12:46 pm

Re: Listas Desplegables condicionadas a otro campo

Mensaje por JesúsMi »

He intentado llevar a cabo las indicaciones peo sigue sin funcionar.
Al ver que una de las macros era a signada al formulario principal, he optado por hacerlo en el que utilizaría definitivamente, el cual ha cambiado pero sustancialmente es el mismo problema que me trae de cabeza.
He adjuntado el archivo de la BD y sus Formularios para ver si el problema se puede analizar para su resolución.

Muchas Gracias.
PRUEBA LUGAR Y HORARIOS.zip
BD y Formularios con Macro
(22.89 KiB) Descargado 579 veces
linuxMint 19 Tara y w7 prof
Cascabel
Mensajes: 283
Registrado: Mié Nov 11, 2009 10:53 am

Re: Listas Desplegables condicionadas a otro campo

Mensaje por Cascabel »

Hay un espacio que borrar al final del nombre de la tabla "HORSALUD ". (¡Casi me ha vuelto loco!)
En el formulario "definiciones", al SQL de las columnas de "LUGAR" y "HORARIOS" le falta una segunda columna con la ID.
En el formulario "REGISTRO GENERAL 2010-2011" los controles deben enlazarse a los campos siguientes:
ListBox3 "BARRIO SALUD" ID_LUGAR
ListBox6 "HORARIO SALUD" ID_TUR
Deberías borrar los campos "Bo SALUD" y "HOR.SALUD" de la tabla "AULAS BETA", ya que no se usan.
Convendría definir las relaciones entre la tabla "AULAS BETA" y las otras dos.
Como norma, evita usar ese tipo de nombres (con puntos, espacios y caracteres especiales) en los nombres de formularios, tablas, etc. He tenido que cambiar el nombre al formulario.
Tus controles se llaman "ListBox3"/"ListBox6" y no "lbLugar"/"lbTurno". Los cambié en las macros.
Hay que ordenar el SQL de la macro por "TURNO" y no por "TURNOS".

Te devuelvo el archivo corregido para que sigas trabajando.
PRUEBA LUGAR Y HORARIOS2.zip
Archivo corregido
(21.78 KiB) Descargado 695 veces
OOo 3.3.0: OOO330m20 (Build:9567) en WXP+SP3 y en Ubuntu 10.10
Avatar de Usuario
Cristy
Mensajes: 43
Registrado: Lun Mar 22, 2010 3:24 pm
Ubicación: Lérida (España)

Re: [RESUELTO]Listas Desplegables condicionadas a otro campo

Mensaje por Cristy »

Buenas tardes,

Escribo en este hilo porque he intentado adaptar la macro que nos facilita Cascabel pero debe de haber algo que hago mal (lo siento, es la primera vez que veo una macro "por dentro") y no consigo hacer que funcione.

Si le podeis echar un ojo y me comentais el porque del error y, si puede ser, la posible solución os lo agradeceria mucho.

P.D.: Mauricio, ya me he mirado tu libro y sigo sin saber el porque del problema... :(
Adjuntos
MANTENIMIENTO FORO.7z
Formulario "Tareas realizadas", Campo "Componente"
(109.77 KiB) Descargado 404 veces
AOO 3.4.1 en Windows XP
Cascabel
Mensajes: 283
Registrado: Mié Nov 11, 2009 10:53 am

Re: [RESUELTO]Listas Desplegables condicionadas a otro campo

Mensaje por Cascabel »

Creo que esto iría en un hilo nuevo.

Lo primero que veo es que el formulario no permitía modificar datos. ¿A qué se debe eso? Lo tuve que cambiar para poder hacer algo.
También tuve que corregir la sentencia:

Código: Seleccionar todo

sSQL(0)="SELECT 'Componente ' || C.""Componente"", C.""Id_componente"" FROM ""Componentes"" AS C WHERE C.""Equipo""=" & vComponente & " ORDER BY C.""Componente"" ASC"
Atención a las mayúsculas/minúsculas en los nombres de los campos. Es sensible a la diferencia. Además, faltaba "Componentes" AS C para que tuviera sentido el resto. El segundo campo debe ser la ID y tenías el texto.
Por otra parte, llamabas a la macro sFiltraPorComponente cuando debes llamar a sRefrescaListaEquipo.

Por cierto, tuve que reconstruir el archivo desde 0 porque después de borrar todas las macros, Base me seguía avisando de que el archivo contenía macros. Vigila que no tengas un virus de macros, aunque podría ser simplemente un error de Base.
OOo 3.3.0: OOO330m20 (Build:9567) en WXP+SP3 y en Ubuntu 10.10
Avatar de Usuario
Cristy
Mensajes: 43
Registrado: Lun Mar 22, 2010 3:24 pm
Ubicación: Lérida (España)

Re: [RESUELTO]Listas Desplegables condicionadas a otro campo

Mensaje por Cristy »

Gracias Cascabel!! La setencia me funciona!!

Alomejor el formulario no te dejaba modificar datos porque así se lo tengo ordenado en las propiedades.

Y para dejar la base sin macros yo lo que hago es borrar la biblioteca donde las tengo y al reabrir el archivo no me sale ningún aviso ;)

Nuevamente gracias


P.D.: Para la próxima abro un nuevo hilo
AOO 3.4.1 en Windows XP
Responder