Cambiar de registro en formulario Access con botón

Tengo un formulario principal donde hay dos subformularios y en el formulario principal he puesto un botón para que me copie los registros de un subformulario a otro. He conseguido que me copie solo el primer registro pero quiero que en el otro subformulario baje de registro, es decir se pone en el primer registro del subform de la derecha, lo copia al de la izquierda, baja uno en el de la derecha, lo copia en la izquierda y asi hasta 8 veces.

El problema que tengo es que me da error cuando le digo que en el subform de la derecha, vaya a un registro.

¿Sabeis cómo puedo hacerlo?

3 respuestas

Respuesta

Sería conveniente aportara una imagen para ofrecer una solución correcta.

No la haría de ninguna de las formas, piense en utilizar un cuadro de lista de selección múltiple.

Respuesta

Derecha o izquierda solo tiene sentido en una posición física concreta, el que esta enfrente lo vera de otra forma espacial, llamemos a uno A y a otro B (el nombre lo identifica en cualquier posición espacial).

Si los registros se copian de uno en uno al click de un botón (que esta en el principal) se pueden dar dos casos:

Se borran de 'A' al pasar a 'B' :
El siguiente de 'A' (que antes era el segundo), ahora será el primero, simplemente se repite el ciclo, cuando se llega al final, 'A' se queda sin registros.

Se copian de 'A' a 'B' :

Para obtener el segundo (o uno que no hubiera sido copiado en 'B') habrá que crear una consulta que devuelva los de 'A' que no están en 'B' y tomar el primero o uno cualquiera, no los duplicara aunque se cambie el orden.

Dependiendo de como se traspasen los registros (quien los envíe / reciba) puede ser necesario refrescar el contenido para que reconozca los que le han añadido.

Respuesta
-1

Javier, no necesitas para nada ir cambiando de registro. Por ejemplo, supongamos que tengo el formulario Ventas con los subformularios DetalleVenta y DetalleOtro. El formulario Ventas está relacionado con el subformulario DetalleVenta por el campo Idventa

El subformulario de la derecha es DetalleOtro. Si en el formulario pulso el botón Comando 70, automáticamente

En este caso el código del botón es simplemente

Private Sub Comando70_Click()
DoCmd.SetWarnings False
DoCmd.RunSQL "insert into detalleotro select * from detalleventa where idventa=" & Me.IdVenta & ""
Me.DetalleOtro.Form.Requery
End Sub

Es decir, guárdame en la tabla DetalleOtro aquellos registros de la tabla Detalleventa en que el Idventa sea igual al que figura( aunque no se vea) en ese momento en el formulario

Luego que el subformulario DetalleOtro "reconsulte" su origen de registros.

Buenos días,

Os pongo una imagen de lo que tengo:

He hecho algún cambio y ahora tengo el formulario de la derecha, como un subformulario y el de la izquierda como el principal. El de la izquierda, aunque esté puesto así en columna, es un registro sólo de una fila. La idea es que al dar al botón transferir, copie los valores del de la derecha en el de la izquierda. He conseguido que copie pero solo el registro seleccionado y lo que había pensado es que el de la derecha, vaya bajando a medida que copie, es decir, se pone en el primero, lo copia en el lunes, baja al segundo, lo copia en el martes, baja al tercero, lo copia en el miércoles y así hasta el ultimo.

Ahora en el botón tengo esto:

Me.Lunes = Me.Recet_aleat_2!Id_receta_gener

DoCmd.GoToRecord acDataForm, Me.Recet_aleat_2, acNext

Consigo que lo copie pero no baja al siguiente registro.

Gracias.

Personalmente no haría así el formulario, porque, entre otras cosas, me da que el formulario de la derecha es independiente, pero si es tu gusto,,, Tengo el formulario Recetas con el subformulario Productos. En mi caso el subformulario está ordenado por Idproducto.

Al los controles del formulario los llamo (propiedades-otras-nombre)

El de receta lunes lo llamo R1

El de recetaMartes lo llamo R2

Y así hasta R7

En el subformulario selecciono un registro

Puedes ver que he seleccionado mermelada de grosellas. Si ahora pulso el botón transferir

En este caso, repito, en este caso, el código del botón es

Private Sub Comando18_Click()
Dim i As Byte, ctl As Control
For i = 1 To 7
Set ctl = Controls("R" & i)
ctl = DLookup("producto", "productos", "idproducto=forms!recetas.productos.form!idproducto + " & i & "-1")
Next
End Sub

Pero como te dije, yo no lo haría así.

La idea es que el subformulario de la derecha me genere 8 recetas aleatorias y pasarlas al de la izquierda que luego aparecen en el menu de la semana. El de la derecha es independiente y solo lo uso para seleccionar esas 8 y ver la selección antes de transferirla.

No se que pensar, lo que dices ahora no se parece absolutamente en nada a lo de la primera pregunta ni a lo de la segunda. ¿Por qué no empiezas preguntando directamente lo que quieres?

Dicho esto, no necesitas para nada un cuadro de lista. Si tengo la tabla Recetas, en la que por comodidad le he puesto 7 campos y con ella hago un formulario en el que a los controles los llamo como te dije en la respuesta anterior. También tengo una tabla Productos con 77 productos con el que hago un formulario continuo, y me queda tal como

Si pulso el botón Transferir del subformulario

Ha rellenado las recetas al tun tun.

Me voy a un registro nuevo

Cuando pulso el botón Transferir

El código del botón es sencillo, son sólo 8 líneas de código pero preferiría explicártelo. Por eso, si quieres, repito, si quieres, mándame un mensaje (sólo el mensaje) a [email protected] y te mando el ejemplo.

Si lo haces, en el asunto del mensaje pon tu alias Javier Valenzuela, ya que si no sé quien me escribe ni los abro.

Perdona, pero si lees la pregunta, en parte de ella pone: "...

quiero que en el otro subformulario baje de registro, es decir se pone en el primer registro del subform de la derecha, lo copia al de la izquierda, baja uno en el de la derecha, lo copia en la izquierda y asi hasta 8 veces.

El problema que tengo es que me da error cuando le digo que en el subform de la derecha, vaya a un registro."

Creo que pone de forma clara, que quiero que el formulario de la derecha baje un registro o vaya a otro.

da igual que tu lo hicieras de otra forma.

Si tengo la tabla Recetas como

Con ella hago el formulario Recetas donde le pongo el formulario Productos tal que

En el subformulario Puedes ver que he "seleccionado" el registro 4. Si pulso el botón Transferir

En R1 me ha puesto el producto de el registro 4 que era el que estaba seleccionado, en R2 el producto del registro siguiente, y puedes ver por la punta de flecha que ha seguido bajando hasta el 10. En caso de que hubieras seleccionado el registro, por ejemplo, 24, te hubiera pasado el 24, 25, 26, 27, 28, 29 y 30 y el cursor se habría quedado en el 31.

El código del botón es

Private Sub Comando9_Click()
Dim i As Byte
For i = 1 To 7
Forms!recetas!("R" & i) = Producto
DoCmd.GoToRecord , , acNext
Next
End Sub

Es decir, primero seleccionas desde que registro quieres "empezar" y luego pulsas el botón.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas