Problema con combinados en cascada

Dudas sobre Tablas, Consultas, Formularios, Informes...
oliviergil80
Nivel 1
Mensajes: 9
Registrado: Dom Oct 07, 2018 10:33 pm

Problema con combinados en cascada

Mensajepor oliviergil80 » Dom Oct 14, 2018 12:26 am

Buenas de nuevo,

Bueno pues confirmo que sí que he podido crear un formulario bastante útil con esto de los subformularios.
Muchas gracias otra vez Sveinbjorn.

Ahora tengo una duda relacionada con la posibilidad de enlazar campos en el formulario, de forma que al meter un valor en un campo se filtren automáticamente las opciones posibles en otro campo relacionado.
En concreto estoy liado con el campo "sitio", ubicado en el subformulario SSP.
Como se ve en la imagen de la ventana de relaciones que adjunté (download/file.php?id=500&mode=view), el campo "sitio" tiene asignados en cascada una ciudad, una provincia y un país.
Aprovechando esto, para facilitar la operativa al crear una entrada nueva en la base de datos, he añadido al subformulario SSP el campo "ciudad".
La idea sería que al meter la ciudad primero, las opciones disponibles en el campo "sitio" se filtraran por ciudad y se redujeran por tanto al mínimo necesario.

Esto lo he intentado hacer de la manera siguiente:

- En el formulario SSP, en las propiedades del control "sitio" he creado una consulta para filtrar por ciudad.
Es decir, para el control "sitio", en la Hoja de propiedades / pestaña Datos / campo Origen de la fila, he metido:
SELECT Sitios.id_sitio, Sitios.sitio, Sitios.ciudad FROM Sitios WHERE (((Sitios.ciudad)=[Formularios]![ssp]![ciudad]));

- Luego he creado un evento para el control "ciudad" para que me actualice los sitios disponibles a cada vez que cambio de ciudad.
Para ello, en el control "ciudad", en la Hoja de propiedades / pestaña Eventos / campo Después de actualizar, he metido el código VBA:
Private Sub ciudad_AfterUpdate()
Me.sitio.Requery
End Sub


De esta forma, ahora a cada vez que selecciono una ciudad en el formulario SSP se actualizan correctamente los sitios disponibles para seleccionar.
No obstante se producen dos cosas que no deseo:

1. Al ir pasando los registros existentes a través del formulario SSP, ahora sólo se ve el sitio en aquellos registros cuya ciudad he "refrescado" en último lugar. El sitio en los demás registros se ve vacío (a pesar de existir en la tabla SSP). Si refresco otra ciudad, entonces pasan a estar visibles únicamente los sitios correspondientes a esa ciudad.
2. Cuando lanzo el formulario padre "salidas", el cual tiene anidado el subformulario SSP, me salta el mensaje "Introduzca el valor del parámetro ? Formularios!ssp!ciudad"

Yo lo que quiero es que los registros ya grabados en la BD se visualicen en el formulario tal y como están grabados, mientras que al crear un registro nuevo me funcione el filtro de sitio por ciudad.

Qué estoy haciendo mal?
Graciasss de nuevo!!

Avatar de Usuario
Sveinbjorn
Moderador
Mensajes: 989
Registrado: Sab Oct 24, 2015 10:12 pm

Re: Problema con combinados en cascada

Mensajepor Sveinbjorn » Dom Oct 14, 2018 8:41 am

1º/ Si pones, en el evento "al activar registro" de tu subformulario la instrucción Me.sitio.Requery, ya solucionas este problema.

2º/ Si el filtrado del cuadro combinado lo haces por código, y no directamente en el origen de la fila, te desaparecerá ese mensaje que te pide el parámetro, pues solo harás ese filtrado si hay algo escrito/seleccionado en ciudad.

Para hacerlo por código, puedes ver ejemplos explicados en la web de Neckkito, como:
.- http://neckkito.xyz/nck/index.php/ejemp ... en-cascada
.- http://neckkito.xyz/nck/index.php/ejemp ... combinados
Sveinbjorn El Rojo

oliviergil80
Nivel 1
Mensajes: 9
Registrado: Dom Oct 07, 2018 10:33 pm

Re: Problema con combinados en cascada

Mensajepor oliviergil80 » Dom Oct 14, 2018 12:29 pm

Hola Sveinbjorn,

Muchas gracias una vez más por tu respuesta ultra-rápida :)

1º) Milagro! Funciona! :lol:
Cuál es la explicación?

2º) He mirado los dos artículos que enlazas pero me cuesta un poco llegar a la solución para mi caso particular.
Entiendo que tu recomendación de "hacerlo por código y no directamente en el origen de la fila" se refiere a que el filtro deseado se debe meter en "origen del control" en vez de en "origen de la fila", no?
No obstante en los ejemplos todo se centra en cuadros de texto, cuyo objetivo entiendo que es mostrar información relacionada con el valor concreto de un campo (p.ej. mostrar la provincia y el país asociados a una ciudad seleccionada). En mi caso creo que es un poco distinto ya que lo que quiero no es que al seleccionar un sitio me muestre la ciudad asociada, sino que al seleccionar la ciudad en el cuadro combinado "ciudad" las opciones disponibles para elegir en el cuadro combinado "sitio" se limiten a los sitios que tengan esa ciudad asociada. No sé si me explico, pero me cuesta encontrar los pasos a seguir a partir de los artículos... supongo que serán mis limitaciones informáticas... :roll:
Sería simplemente meter la función DLookup en "origen del control" en vez de crear una consulta en "origen de la fila"?

Gracias!
Un saludo,

Avatar de Usuario
Sveinbjorn
Moderador
Mensajes: 989
Registrado: Sab Oct 24, 2015 10:12 pm

Re: Problema con combinados en cascada

Mensajepor Sveinbjorn » Dom Oct 14, 2018 4:30 pm

1º/ La explicación es sencilla: los objetos de un formulario son únicos. Con esto quiero decir que si en el origen de la fila del cuadro combinado le dices que te muestre los sitios de la ciudad X, será esos los sitios que muestre (y ninguno más) aunque en la tabla tengas los datos de otros sitios.
Por eso si en "al activar registro" recargas el cuadro combinado, siempre te mostrará los sitios de la ciudad que conste en cada regsitro.

2º/ Quizás los ejemplo no sean los más adecuados... fallo mío.

A ver, lo primero es quitar el filtro del origen de la fila, es decir, borra desde el WHERE en adelante.
Lo siguiente es, por ejemplo, programar el evento "al recibir enfoque" (podrías usar algún otro evento, ya es cuestión de gustos) del cuadro combinado sitio, le pones:

Código: Seleccionar todo

If Not Nz(Me.ciudad,"")="" Then
Me.sitio.Rowsource="SELECT Sitios.id_sitio, Sitios.sitio, Sitios.ciudad FROM Sitios WHERE ciudad=" & Me.ciudad
Me.sitio.Requery
End If


Y listo, si acerté con los nombres de tus controles y tipos de datos (estoy suponiendo que ciudad es numérico) ;)
Sveinbjorn El Rojo

oliviergil80
Nivel 1
Mensajes: 9
Registrado: Dom Oct 07, 2018 10:33 pm

Re: Problema con combinados en cascada

Mensajepor oliviergil80 » Dom Oct 14, 2018 9:36 pm

Lo has clavado!! funciona perfecto ahora :)

La verdad es que pensaba que habría alguna manera más sencilla de hacer esto que no fuera programando a pelo, es decir a través de algún asistente o algo por el estilo que traduzca el razonamiento humano a código.
Entiendo la lógica de tu secuencia pero está claro que la sintaxis no la habría adivinado yo solo...

Bueno pues nuevamente muchas gracias y te recomendaría fallar alguna vez, porque sino fomentas que te sigamos preguntando :lol: :lol: :lol:

Venga un saludo!

oliviergil80
Nivel 1
Mensajes: 9
Registrado: Dom Oct 07, 2018 10:33 pm

Re: Problema con combinados en cascada

Mensajepor oliviergil80 » Lun Oct 15, 2018 11:55 pm

Ups malas noticias con esto, al crear un registro nuevo y seleccionar el sitio según lo descrito (es decir, 1º selecciono ciudad, 2º selecciono el sitio entre los sitios filtrados por esa ciudad), me sale el siguiente mensaje de error tras el 2º paso:

"El campo activo debe coincidir con la combinación '?' en la tabla que sirve como lado 'uno' de la relación uno a varios. Escriba un registro en la tabla del lado 'uno' con el valor de clave deseado y después realice la entrada con la clave de combinación en la tabla del lado 'varios'".

La tabla "sitios" está correctamente rellenada, la tabla "ciudades" también...

Me da la sensación que el problema está relacionado con otra cosa que no va bien que es que la utilización del formulario de ssp me está modificando la tabla "sitios" (cambia la ciudad de algunos registros) cuando únicamente debería servir para elegir sitios de dicha tabla (sin alterarlos) y asociarlos a salidas y personas.

Alguna idea?
Gracias!


Volver a “Objetos Access”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado