Copiar datos de un formulario a otro y que se guarden en una tabla distinta.

Vuelvo a conectar contigo y siento darte la lata pero es que tengo una base de datos con varias tablas, consultas y formularios (simples y con subformularios). Quiero que con un botón en el formulario (con subformularios) se tomen datos del conjunto del mismo y los presente en otro formulario para guardarlos en una tabla distintas a las que se usaron para crear el primero.

He hecho varios intentos con distintas opciones pero no sale.

1 respuesta

Respuesta
1

Si los quieres pasar a otro formulario, el código del botón sería algo parecido a esto:

1/ Declaras una variable del tipo adecuado, para cada campo que quieres traspasar:

Dim var1 as...

Dim var2 as ...

2/ Si el formulario de destino no está abierto, lo abres:

DoCmd. OpenForm "nombreFormulario"

3/ Le pasas los valores almacenados en las variables:

Me.Campo1=Var1

Me.Campo2=Var2

...

4/ Si quieres cerrar el formulario de origen:

DoCmd. Close acForm, Me. Name

A ver si con estas indicaciones te es suficiente.

Un saludo.

PD: Otra opción, sería trabajar directamente con las tablas de destino, por medio de SQLs o de Recordsets, sin pasar por el segundo formulario.

Aplico lo que me dices en el botón del formulario y no abre nada ni traslada nada a la otra tabla.

Dime que código pusiste en el boton y los nombres de los formularios y en que tablas se basan.

Tengo un formulario principal (ingreso) de una tabla (paciente), del que tengo que extraer los datos de un campo (htc) para añadir a otra tabla (semp).

En este formulario principal (ingreso) existe un subformulario (episodio) del que tengo que extraer los datos de dos campos (gfh) y (cama), también para la tabla (semp).

A su vez, este subformulario (ingreso) tiene otros dos subformularios (vingreso) y (valoración semp). De este último tengo que extraer datos de campos (fpeticion) y (puntuación) también para la tabla (semp).

En el formulario principal está el botón (Registrar) para copiar los datos a la nueva tabla (semp) a través del formulario (control semp), donde también tengo que terminar de completar otros campos.

En el botón escribe en eventos el siguiente código al hacer click():

Option Compare Database
Dim var1 As htc
Dim var2 As gfh
Dim var3 As cama
Dim var4 As fpeticion
DoCmd.OpenForm "control semp"
Me.htc = var1
Me.gfh = var2
Me.cama = var3
Me.fpeticion = var4
DoCmd.Close acForm, Me.Name
End Sub

Esto me resulta enrevesado explicarlo hasta mí.

Por favor, oriéntame. Quizás, seguro, es un problema de mala definición de tablas, relaciones, etc. me pierdo.

Gracias.

Disculpa, pero no me expresé bien en mi primera respuesta. El código que tienes que poner en tu botón registrar es este (tienes que ponerlo entre las lineas Private Sub y End Sub):

'Declaras la variables, como no sé de que tipo son, las declara todas como variant

Dim miHtc as Variant

Dim miGfh As Variant

Dim miCama As Variant

Dim miFpeticion As Variant

Dim miPuntuacion as Variant

'Cojo los valores de los campos que quieres traspaasr y los paso a las variables

miHtc=Me.htc

miGfh=Me.episodio.Form.gfh

miCama=Me.episodio.Form.cama

miFpeticion=Me.valoracion_semp.Form.fpeticion

miPuntuacion=Me.valoracion_semp.Form.puntuación

'Abro el formulario en un nuevo registro

DoCmd.OpenForm "control semp",,,,,acFormAdd

'Traspaso los valores, suponiendo que los campos de destino se llaman igual que los originales

With Forms!control_semp

.htc=miHtc

.gfh=miGfh

.cama=miCama

.fpeticion=miFpeticion

.puntuación=miPuntuacion

End With

'Cierro el formulario Ingreso

DoCmd. Close acForm, Me. Name

Después de introducir los códigos que me das me da un error de compilación "No se encontró el método o el dato miembro".

No sé si es porque los datos se encuentran en uno de los subformularios.

Lo siento.

¿En qué parte te da el error?

O mejor, para ir más rápido, ¿me puedes pasar una copia de la BD? Así ya te doy una respuesta testada y que funcione.

Perdona por la trabajera que estoy dando, pero yo me muevo en lo habitual de access. Se me ocurren las ideas, sé que el programa da mucho e intento llegar a las soluciones pero necesito ampliar conocimientos. Aprendo de las aportaciones de desinteresados como tu.

¿Como puedo enviarte la bd?.

Gracias.

Sube una copia a cualquier servidor web (www.filebig.net, por ejemplo) y me pegas aquí el enlace de descarga (es el primero de los 4 que salen cuando cargues el archivo)

El código que tienes que usar es este:

'Declaras la variables, como no sé de que tipo son, las declara todas como variant

Dim miHtc As Variant
Dim miGfh As Variant
Dim miCama As Variant
Dim miFpeticion As Variant
Dim miPuntuacion As Variant
Dim miEpisodio As Variant
'Cojo los valores de los campos que quieres traspasar y los paso a las variables
miHtc = Me.htc
miEpisodio = Me.inicio_episodio.Form.episodio
miGfh = Me.inicio_episodio.Form.gfh
miCama = Me.inicio_episodio.Form.cama
miFpeticion = Me.inicio_episodio.Form.valoracion_semp.Form.fechapeticion
miPuntuacion = Me.inicio_episodio.Form.valoracion_semp.Form.A
'Abro el formulario en un nuevo registro
DoCmd.OpenForm "control semp", , , , , acFormAdd
'Traspaso los valores, suponiendo que los campos de destino se llaman igual que los originales
With Forms("control semp")
.episodio = miEpisodio
.htc = miHtc
.gfh = miGfh
.cama = miCama
.fpeticion = miFpeticion
.puntuación = miPuntuacion
End With
'Cierro el formulario Ingreso
DoCmd. Close acForm, Me. Name

El anterior no te funcionaba, porque tenias nombres de campos y formularios distintos de los que me indicabas. Además, para que te funcione correctamente, he añadido una variable para el episodio, que también se traspasa al nuevo formulario, pues si no lo hacía así, al estar relacionadas las tablas por ese campo, se originaba un error que no te permitía continuar. Ahora mismo parece que funciona todo correctamente, Si no me lo comentas.

¡¡¡Funciona!!!.

Estudiaré lo que has hecho para futuras ocasiones.

Si me puedes dar alguna referencia para estudiar, te lo agradecería.

Y sobre todo muchas gracias por el aporte y difusión de tu conocimiento, la ayuda y como no la inmensa paciencia.

Gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas