No soy partidario de las relaciones porque sí, ya que para eso están las funciones Dlookup, Dcount, etc. Pero si que se deben relacionar cuando van a trabajar juntas, caso de formulario y subformulario, informe y subinforme, nada más. Por ejemplo, si tengo una tabla Productos donde se refleja el nombre del producto, sus existencias y el beneficio acumulado que me va generando ese producto cuando lo vendo y otra tabla Movimientos que va a recoger los ídem de ese producto y hago un formulario con subformulario
Cunado selecciono el concepto, en precio me pone el que figura en el formulario( que no sé de donde sale ni para que sirve, ya que el verdadero precio se determina cuando te entra un producto) y en Antes me pone las existencias que hay de ese producto hasta ese momento. Cuando anoto una cantidad y pulso Enter
En después me pone las nuevas existencias de ese producto, me actualiza las existencias de la tabla Productos, y como es una entrada no hay beneficios. Por el contrario si pongo una salida
En antes me pone las existencias que hay en ese momento y cuando pulso Enter, como es "una venta".
Me rebaja las existencias y en beneficio me pone la diferencia acumulada de ese producto de
Cantidad*(precioventa-preciocompra). Otro movimiento
Al pulsar Enter
Es decir, tengo siempre las existencias de un producto actualizadas sin necesidad de un segundo subformulario y en Beneficio me va mostrando los beneficios acumulados de ese producto.
El código del evento Después de actualizar del combinado Concepto es
Private Sub Concepto_AfterUpdate()
DoCmd.SetWarnings False
Antes = Nz(DLookup("existencias", "productos", "idproducto=" & Me.IdProducto & ""))
Precio = Me.Parent!precioventa
Cantidad.SetFocus
End Sub
Y el código del evento Después de actualizar del control Cantidad es
Private Sub Cantidad_AfterUpdate()
DoCmd.RunCommand acCmdSaveRecord
If Concepto = "entrada" Then
Despues = Antes + Cantidad
Else
Despues = Antes - Cantidad
Me.Parent!beneficio = DSum("Cantidad", "productos", "idproducto=" & Me.IdProducto & " and concepto=""Salida""") * (Me.Parent!precioventa - Me.Parent!preciocompra)
End If
DoCmd.RunSQL "update productos set existencias=Despues where idproducto=" & Me.IdProducto & ""
End Sub
También se le podría poner un simple cuadro de texto en el formulario que te fuera mostrando los "vaivenes" de las existencias de un producto entre entradas y salidas.