Con un click encampo de formulario acceder a otro formulario.

Tengo una BD con un formulario Clientes y otro Contactos. Por supuesto que como tablas están relacionados y funciona bien. Mostrar todos los datos de ambos formularios me ocupa mucho espacio en mi pequeña pantalla y quisiera que el subformulario CONTACTOS solo se vea cuando haga clic en algun campo del formulario CLIENTES. ¿Es posible?

3 respuestas

Respuesta
1

¿Te has planteado el hacerlo emergente y visible/invisible a voluntad?

Me estás hablando de algo nuevo para mi, ¿me explicas esos pasos por favor?

Emergente ... un símil es un MsgBox, se superpone al contenido y queda en primer plano.

Pero la propiedad emergente solo se puede aplicar a los formularios, por lo que dejará de ser subformulario y habrá que recrear la sincronización entre el y el antes era su contenedor (el principal o padre).

Esa relación (la que exista) si se desconoce se puede copiar de las propiedades del subformulario como contenedor (propiedades >> datos >> (vincular campos del principal/vincular campos del secundario).

Para recrearla se puede regenerar su contenido modificando su origen de datos, pero se puede utilizar la que antes ya existía: aplicar un filtro (la propiedad filter del formulario, el método que utiliza Access internamente.

Cada una tiene sus ventajas e inconvenientes y dependerá en gran medida de los datos y como se utilice.

Lo de mostrarlo/ocultarlo es sencillo, en el que antes era el padre, un click en un botón o el evento que sea idóneo se le hace visible, en el ahora emergente un botón que en su evento click lo oculta

Sincronizarlos se hará en el evento Current del principal, lo que si ha de hacer es abrirlo (y oculto si fuera el caso) cuando se abra el principal ... pero son detalles ampliables cuando se decida si se acepta el planteamiento.

Respuesta
1

Sería no utilizar el subformulario con el formulario principal, en este caso en el evento Al hacer clic en el campo del formulario CLIENTES utilice

DoCmd.OpenForm "subformulario", , , "idcliente=" & Me.idcliente

Además, puede programar para que el subformulario dure visible determinado tiempo y después de este cierre programando en el subformulario Intervalo el cronómetro en xxxx tiempo y en el evento al cronómetro algo como:

Private Sub Form_Timer()
   DoCmd.Close acForm, Me.Name
End Sub

Tenga presente que si va a adicionar registros en el subformulario NO sirve como se lo planteamos, en este caso se deben hacer unos ajustes.

Por esto le comenté no va a tomar el id porque lo tiene es vinculado a un formulario principal y debe adicionarlo manualmente, pruebe con Me. Rarent! Id como le indican

Le complemento, si el id queda en blanco es porque la tabla está mal diseñada este campo debe ser requerido.

Respuesta
1

Vamos a suponer que el formulario y el subformulario están relacionados por un campo llamado Idventa. Si tengo el formulario Ventas, donde no está el subformulario

Si pulso el botón Comand

Te abre el formulario DetalleVenta en vista diálogo.

En este caso, el código del evento Al hacer clic del botón es

DoCmd.OpenForm "detalleventa", , , "idventa=" & Me.IdVenta & "", , acDialog

También podrías dejar el subformulario en el formulario, pero reducido a su mínima expresión y como no visible y al pulsar un botón lo pones como visible=si y le das dimensiones a Ancho, superior, izquierda,

Todo depende de como quieras meter datos en el subformulario.

OK el subformulario CONTACTOS  se levanta como quería hacer, pero al introducirle datos a este no me guarda los cambios. Entonces voy a las tablas y reviso y están todos los datos del contacto menos el Id

Alexis, es que lo puedes hacer de mil formas también. Por ejemplo, vamos a suponer que estás en un registro cualquiera del formulario. Pulsas el botón en el que has puesto, por ejemplo

Docmd. Openform"DetalleVenta",,,, acformadd, acdialog

Es decir, que se "muestre" en un registro nuevo., para rellenar datos en el subformulario. En las propiedades de éste último, en el evento Al activar registro puedes poner

IdVenta=me.parent!id venta

O sea, que al activar registro te ponga en el idventa del subformulario el Idventa que figura en ese momento en el formulario. Y, si quieres para mayor seguridad, puedes ponerlo como

If me.newrecord then

IdVenta=me.parent!idventa

end if

Es decir, que sólo le ponga el valor de Idventa del formulario si el registro es uno nuevo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas