Ir al mismo registro del Formulario anterior

Tengo 4 formularios y cada uno va a una tabla distinta con su Id (autonumérico). Primero un menu que abre el primero, luego un botón que cierra el primero y abre el segundo, otro botón que cierra el segundo y abre el tercero.. Y así sucesivamente. Lo que quiero es que si el Formulario 1 se ha abierto en el registro 10 que el Formulario 2 se abra también en el registro 10, y el 3 y el 4 también. Seria como decir que el Id (autonumérico) del Formulario 1 sea = al del Formulario 2, etc.. Pero no sé cómo ponerlo en VBA.

2 respuestas

Respuesta
2

Albert, tal como lo planteas implicaría que no podrías borrar ningún registro de cualquiera de las tablas, ya que si borraras, por ejemplo, el Id=2 de la tabla2, cuando desde la primera tabla le dijeras que se fuera al id=2 de la tabla2, éste no existiría, pero...

Basta con que en el botón del primer formulario pongas

docmd.openform"nombredelsegundoform",,,"iddelsegundoform=" & me.iddelprimero & "",,acdialog

En el segundo botón

docmd.openform"nombredeltercero",,,"iddeltercero=" & me.iddelsegundo & "",,acdialog

Etc.

Me sale que: "la expresión que ha especificado hace referencia a un objeto que está cerrado o que no existe".

Por otro lado quería saber exactamente cómo se usa el "' & Me.Id... & '" (donde y como se ponen las comillas y las &. Gracias!

Vale ya sé porqué porque antes del código tenia un Docmd.Close

Lo que veo es que si del Formulario estoy en el Registro 36 y en el segundo en el 9 a la que voy al 37 del primero me va al 10 del segundo cuando debería ser el 37.

Realmente lo necesito porque he hecho una consulta que une a todos los los ID (todas las tablas) y si no coinciden, la consulta no sale.

Si tengo el formulario Clientes con un botón

Si pulso el botón se abre el formulario Pedidos en 

Y si pulso el botón del formulario Pedidos

Los he puesto en vista diálogo para que veas que se abren en el registro con Id...=3

El código del botón del formulario Clientes es

Private Sub Comando9_Click()
DoCmd.OpenForm "pedidos", , , "idpedido=" & Me.IdCliente & "", , acDialog
End Sub

El código del botón del formulario Pedidos es

Private Sub Comando7_Click()
DoCmd.OpenForm "productos", , , "idproducto=" & Me.IdPedido & "", , acDialog

End sub

Otra cosa sería si nos estuviéramos refiriendo a registros actuales(currentrecord)

Vale, sí que me funciona pero con registros que ya se habían creado anteriormente. Antes de abrir el Formulario 1, 2, 3 o 4 hay un primer formulario inicial que sólo tiene un botón y se llama Menú y lo único que hace es abrir el Formulario 1 en un nuevo registro. Así que el ID siempre tendrá que ser el nuevo registro del Formulario 1. Y quiero que los formularios 2, 3 y 4 se adapten al ID del Formulario 1.

Depende de como los abras. Por ejemplo, vamos a suponer que partes de cero y que desde el formulario Clientes "escribes" un registro y quieres abrir el formulario Pedidos tambien en un registro nuevo(pero, importante, tendrías que poner el campo Idpedido como numérico, ya que los autonuméricos son "incontrolables")

1º Puedes poner en el botón

Docmd. Openform"pedidos",,,, acformadd, acdialog (te pongo esto de acdialog para que puedas comprobar, si te fías lo borras)

Con lo que, de entrada, te abre el formulario Pedidos en un registro nuevo

Y, personalmente, le pondría en el evento Al cargar del formulario Pedidos

If currentproject.allforms("clientes").isloaded then

idpedido=forms!clientes!idpedido

end if

O sea, que si abres el formulario Pedidos desde el formulario Clientes(está cargado), el valor del campo Idpedido sea igual al que figura en ese momento en el formulario Clientes. Esto tiene la ventaja de que si por lo que sea abres el formulario pedidos solamente, como Clientes no está cargado no te modifica nada.

Por cierto, no leí toda la pregunta anterior

Si haces referencia a un control o una variable numérica es

" & me.precio & "

Si el control o la variable es texto

'" & me.nombrecliente & "' es decir apostrofe comillas & y cierra & comillas apostrofe

Si es fecha

#" & me.fechafactura & "#

De todas formas, si quieres, repito, si quieres, mándame un mensaje(solo el mensaje) a [email protected] y te mando un ejemplo. Si lo haces, en el asunto del mensaje pon tu alias Albert Borras ya que si no sé quien me escribe ni los abro.

Respuesta
2

Albert: Tienes el Método DoCmd. OpenForm que en dos de sus parámetros tiene la condición de apertura.

En el WhereCondition y en el OpemArgs

https://docs.microsoft.com/es-es/office/vba/api/access.docmd.openform 

Un saludo >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas