Arrastrar datos entre formularios

Tengo un formulario (ofertas) que según el valor de una combobox hace aparecer un botón, el cual, al ser pulsado "arrastra" una serie de datos a otro formulario (contratos). Todo esto funciona bien, el problema es que cada vez que se arrastranlos datos al formulario contratos se machacan los datos anetiormente registrados ya que este formulario vuelca los datos en la Tabla Contratos, por lo que sólo hay un registro en esta tabla.
¿Cómo puedo hacer para que cada vez que se pulse el botón y se arratren los datos al formulario contratos, los datos sean cada vez un registro diferente?
Notas: los formularios ofertas y contratos están creados con campos dependientes de las tablas Ofertas y Contratos respectivamente
Adjunto el código, que tengo en el evebto Al hacer click del botón
Dim stDocName As String
Dim stDocName2 As String
stDocName = "Contratos"
stDocName2 = "Ofertas"
DoCmd.OpenForm stDocName, acNormal
Forms![Contratos]![Cliente] = Forms![Ofertas]![Cliente]
Forms![Contratos]![DenomContrato] = Forms![Ofertas]![DenomOferta]
DoCmd. Close acForm, stDocName2, acSaveYes

1 respuesta

Respuesta
1
Lo primero creo que no sabes muy bien lo que hace el código que has puesto. Lo explico:
Dim stDocName As String  'Creas una variable para referirte a un formulario
Dim stDocName2 As String ' Lo mismo que la anterior
stDocName = "Contratos" ' Le das valor a la primera variable
stDocName2 = "Ofertas" ' Le das valor a la segunda variable
DoCmd. OpenForm stDocName, acNormal ' Abres el formulario sin más
Forms![Contratos]![Cliente] = Forms![Ofertas]![Cliente] 'Pasas un dato
Forms![Contratos]![DenomContrato] = Forms![Ofertas]![DenomOferta] 'Pasas otro dato
DoCmd. Close acForm, stDocName2, acSaveYes 'Cierras el segundo formulario
Bien a partir de aquí varias consideraciones.
1) No es necesario crear una variable que no es "variable", es decir, si los formularios a abrir siempre son los mismos cómo se desprende de tu código, es lo mismo que:
DoCmd. OpenForm "Contratos", acNormal
Forms![Contratos]![Cliente] = Forms![Ofertas]![Cliente] 
Forms![Contratos]![DenomContrato] = Forms![Ofertas]![DenomOferta] 
DoCmd. Close acForm, "Ofertas", acSaveYes
Como ves ya hemos reducido el código (y aclarado de paso) simplificándolo.
2)Access hace lo que le dices, tienes un formulario abierto, le mandas que abra otro, lo hace como debe hacerlo, salvo que se le haya indicado lo contrario, es decir, por el primer registro.
Y luego le dices que introduzca unos datos en los controles del segundo formulario independientemente de que estén rellenos o no. Es decir, siempre estarás rellenando el primer registro.
3)Independientemente de que yo creo que no es la mejor manera, ya que hay maneras más sencillas para hacerlo (insertando los datos directamente en la tabla Contratos, sin necesidad de abrir el segundo formulario), tienes que hacer que el formulario que abres "Contratos" pase a un nuevo registro.
Formas de hacerlo:
1) Con el código que tienes cambia la linea:
DoCmd. OpenForm "Contratos", acNormal por esta otra

DoCmd. OpenForm "contratos", acNormal,,, acFormAdd ATENTO A LAS COMAS
2) En las propiedades del formulario pon en "Entrada de datos" SI. De esa forma siempre que abras el formulario se abrirá en un nuevo registro
3) En el evento "Al abrir" del formulario pon el siguiente código:
DoCmd. GoToRecord,, acNewRec
Como ves hay muchas variaciones y formas de hacer lo mismo. Utiliza la que te sea más provechosa.
Mi foro Mi web Mi blog
Un saludo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas