Access - sincronizacion formularios

 
Vista:
sin imagen de perfil

sincronizacion formularios

Publicado por emiliano (23 intervenciones) el 14/05/2024 01:50:48
Tengo un formulario (Formulario 1, F_ALUMNOS), en el cual, al hacer click en un botón de comando, debería abrirse otro formulario (Formulario 2, F_CARGA_VIVIENDA), mostrando una serie de datos relativos al registro activo en un combox llamado "vivienda" o domicilio del Formulario 1. El problema es que en el Formulario 2 no logro que
a) me muestre los datos según voy cambiando de registros y pinchando sobre el comando cuando el combo tiene registros activos en formulario 1
b) en caso de no haber registros activos en formulario 1, en el formulario 2 me permita cargar nuevos domicilios o viviendas que luego aparecerán como opciones de lista

En procedimiento de evento "al hacer click" del comando abrir formulario 2 generé el código, que se transcribe abajo, que sirve para visualizar los datos ampliados de los distintos domicilios que voy navegando en formulario 1, y hacer modificaciones en caso de necesitarlo, pero cuando no hay registros activos en formulario 1, o sea me desplazo a "nuevo registro", y el formulario 2 debiera abrir para cargar "nuevos domicilios" se me produce un error (3075, falta operador en la expresion de consulta "id_vivenda=")

Private Sub abre_form_vivienda_Click()
DoCmd.OpenForm "F_CARGA_VIVIENDA", , , "id_vivienda=" & vivienda.Value, , acDialog
End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

sincronizacion formularios

Publicado por Anonimo (3369 intervenciones) el 14/05/2024 02:32:35
Si el registro es nuevo no existe el ID y se produce el error.

Si hay una relación de dependencia entre las tablas (los orígenes de datos de los formularios) se tiene que crear el registro en el formulario uno, guardarlo y tras ello se podrá crear el registro en el formulario dos (a Access no le gustan los huérfanos).

Posiblemente una opción que puede salvar el problema sea condicionar el actual sincronismo:

.- Si hay un ID se utiliza lo actual
.- Si no lo hay borra (limpia) los datos del formulario dos (pero no se desplaza a el)

Solo se podrá acceder al formulario dos tras crear (y guardar) el registro del formulario uno.

Dado que no se dispone de información suficiente me surge la duda de si generaría el ID en el formulario dos ......
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

sincronizacion formularios

Publicado por emiliano (23 intervenciones) el 14/05/2024 04:31:37
Hola gracias, pero olvidando esa parte del código que compartí, ¿no es posible con un condicional If then proponer argumentos del tipo: si hay registro activo en formulario 1 mostrame los datos asociados a ese registro en formulario 2; pero si no hay registros en combox del formulario 1 abrime el formulario 2 en modo carga "ir a nuevo registro"?
Aplicando algun código desde el comando del formulario 1 o desde propiedades evento "al cargar" del formulario 2.
PD: el formulario 2 originalmente se abre con apariencia dialogo para cargar nuevos domicilios que se muestran luego como opcion de la lista del combo (en formulario 1); sólo que luego se me ocurrió más funcional que al posicionarme en registros ya cargados, al cliquear sobre el mismo comando sirva también para realizar modificaciones en los datos asociados a la vivienda, sin tener que utilizar un cuadro combinado en formulario 2 que haga las veces de buscador.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

sincronizacion formularios

Publicado por Anonimo (3369 intervenciones) el 14/05/2024 11:12:27
Es muy similar a lo ya propuesto, si hay elementos para mostrar en el formulario dos se utiliza lo que ya existe si no los hay .....

Aqui aparece el primer desacuerdo, la existencia de datos relacionados en el formulario dos, se desconoce la relación entre los datos y si (como se da a suponer) la relación es la clásica (1 a N):
.- Para crear la 'N' (el formulario dos)
.- Es indispensable crear antes la '1' (el formulario uno).

Hay ambigüedades que si no se resuelven solo pueden ir en una línea: camino directo al fracaso.

No entiendo la causa de que exista un elemento en el combo que no pueda mostrarse en el formulario dos ¿de donde se obtiene ese dato?.

Para verificar si hay datos que mostrar en el formulario dos, hay que conocer la relación que mantiene con el combo del formulario uno, conocida esta, un DCount o un DLookup sobre el origen de datos del formulario dos se obtiene la respuesta buscada.
(DCount devolverá cero si no hay datos relacionados, DLookup un NULL en las mismas circunstancias).

He apreciado que el formulario dos se le abre de forma modal, en cuanto reciba el foco se detendrá el código en ejecución del formulario uno y si no hay nada programado (esto es: por defecto) se retornara a ese mismo punto al cerrarlo (la excepción: abrir otro elemento emergente que se encadenará al anterior) lo que presenta ventajas la mayor parte de las veces.

En dos líneas:
.- Sí, a la posibilidad de utilizar un condicional (IF - THEN - ELSE ...).
.- Sí, a verificar la existencia de datos y abrir el formulario dos en un nuevo registro si fuera el caso.

Conociendo el propósito de la aplicación y las relaciones entre tablas, se puede hacer una programación eficiente e incluso proponer (si la hay) una alternativa mas eficaz que la actual.

Desconociendo la aplicación solo se puede teorizar y lo que se proponga puede ser inadecuado o peligroso para mantener la fidelidad de los datos o (en el mejor de los casos) inocuo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

sincronizacion formularios

Publicado por emiliano (23 intervenciones) el 14/05/2024 20:22:07
En principio lo resolví dividiendo las funciones. En el comando que abre el formulario 2 dejé la macro generada con la creacion del botón "abrir formulario" y coloqué en modo agregar datos, por lo que lo abre en "nuevo registro"; después sobre cuadro combinado "vivienda" del formulario 1 -que es el que retoma datos cargados en formulario 2 en forma de lista desplegable- coloqué, en propiedades del combo, un evento "al hacer doble click" que permite ver o modificar en formulario 2 el registro activo en formulario 1 (DoCmd.OpenForm "F_CARGA_VIVIENDA", , , "id_vivienda=" & vivienda.Value, , acDialog).
De todos modos, no entiendo que debiera compartir para que puedas ayudarme a unificar esas acciones en el comando o botón. Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

sincronizacion formularios

Publicado por Anonimo (3369 intervenciones) el 14/05/2024 23:17:07
Puedes compartir lo que tu consideres, partiendo del principio de que con la excepción de tí -y posiblemente alguien próximo- nadie sabe la finalidad de esa aplicación o su contenido.

Solo se sabe que hay dos formularios y que uno tiene un cuadro combinado (que al parecer es el que 'sincroniza' los dos formularios) ...

En principio dire que los formularios son independientes y que el formulario-dos tiene una relación con el cuadro combinado del formulario-uno (cuyo contenido se desconoce) pero no parece síncrona, solo es el dato (la referencia) para que a golpe de botón en el formulario-dos se presente información complementaria.

Imaginando un poco: en el formulario-uno la ficha de un posible comprador, en el combo del formulario-uno fabricantes de vehículos y (seleccionado un Item en el combo), en el formulario-dos se muestran los modelos de de la marca seleccionada .....

No creo que se parezca nada a lo que has creado (ni de lejos) es solo uno de los posibles escenarios que se podrían dar con lo que has publicado, entiende pues que solo tu sabes el principio, el medio y el fin de tu aplicación, cualquier respuesta que te den puede ser acertada o fantasiosa según se aproxime mas o menos a lo que se este programando.

Si hojeas un poco el foro, podrás analizar como han planteado otros usuarios sus dudas, lo que han aportado para aclararlas y los resultados que han obtenido, en comparación con lo que otros usuarios (que posiblemente no han podido compartir lo mismo) han logrado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar