Valor condicionado por otro campo del mismo registro dentro de un subformulario

Tengo un Subformulario "Lineas" en el que introduzco líneas de un pedido, cuyos campos son:

1) Nº pedido (con el que vinculo al formulario padre, que es el pedido)

2) Producto (número de referencia del producto)

3) Descripción (descripción del producto)

4) Precio

Por otro lado, tengo una tabla "Productos" donde, entre otros campos, se incluyen:

A) Referencia

B) Denominación

La cuestión es que cuando en el subformulario selecciono 2)Producto lo tengo enlazado con A)Referencia, me sale un desplegable y selecciono la referencia.

El problema es que me gustaría que apareciese automáticamente la descripción en 3)Descripción, ligada a B)Denominación.

He intentado ligarlo al evento "Al cambiar" del campo 2)Producto, pero no sé cómo hacerlo, ni con código, ni con generador de macros,...

1 Respuesta

Respuesta
1

Tienes varias formas de hacerlo, te voy a comentar dos de ellas:

1º/ Si el desplegable del subformulario (campo 2) Producto), lo tienes diseñado para que coja la referencia y la denominación del producto (ambos datos de la tabla "Productos), es decir, en su "Origen de la fila" tienes algo así:

SELECT Referencia, Denominacion FROM Productos;

En cualquiera de los eventos "Después de actualizar", "Al perder el enfoque" o "Al salir", le generas este código:

Private Sub ....

If Not Nz(Me.Producto,"")="" Then Me.Denominacion=Me.Producto.Column(1)

End Sub

2º/ Si tu desplegable sólo coge el valor Referencia de la tabla Productos (su origen de la fila será: SELECT Referencia FROM Productos):

En cualquiera de lso eventos que te comenté antes, le generas este otro código:

Private Sub...

If Not Nz(Me.Producto,"")="" Then

Me.Denominacion=DLookUp("Denominacion","Productos","Referencia=" & Me.Producto)

End If

End Sub

Si tu campo Referencia no fuera de tipo numérico, tienes que usar esta otra linea:

Me.Denominacion=DLookUp("Denominacion","Productos","Referencia='" & Me.Producto & "'")

En los códigos, si tus campos del subformulario no se llaman "Referencia" Y Descripcion", tendrás que cambiarlo por los que tú tengas (lo puedes ver en las propiedades de cada uno, pestaña Otras->Nombre)

Gracias experto, eso es exactamente lo que quería. Aunque no me ha funcionado ninguna de las dos opciones (imagino que por alguna tontería que no logro entender).

Opción 1ª) Efectivamente lo tengo como dices, pero al insertar:

If Not Nz(Me.Producto, "") = "" Then Me.Descripcion = Me.Producto.Column(2)

No me da ningún error pero no me inserta ningún texto. Lo deja en blanco.

Nota: he cambiado Denominacion por Descripcion, que es el nombre del campo en el subformulario y he puesto Column(2) porque en el select la descripción está en segundo lugar.

Opción 2º) Al no funcionarme la primera, he probado con la segunda, en la que también he cambiado la línea:

Me.Descripcion=DLookUp("Denominacion","Productos","Referencia=" & Me.Producto).

El campo donde quiero que se meta el dato es Descripción.

El campo de donde quiero que coja el valor es Denominacion

La tabla donde esta ese campo es Productos

El criterio de búsqueda es que la referencia coincida con el campo producto de mi subformulario

Creo haberlo entendido pero me da un error "El valor que ha especificado no es válido para este campo". ¿Puede ser que el problema sea porque el campo Descripción (aunque debería ser de texto) me aparece como numérico porque lo tengo relacionado con la tabla productos? ¿Debería quitar esa relación y dejarlo como texto?

Gracias mil.

El error en la primera opción lo tienes al haber cambiado el 1 a 2. Access, por defecto empieza a contar siempre en 0, por lo que la primera columna tiene el índice 0, la segunda el indice 1 y así sucesivamente. Si pones:

If Not Nz(Me.Producto, "") = "" Then Me.Descripción = Me.Producto.Column(1)

Te debería funcionar.

El error que comentas de la segunda opción parece ser, efectivamente, por el tipo de datos que intentas meter en él. Si lo tienes como numérico no te deja introducir texto. Yo quitaría la relación y lo dejaría como texto.

Si sigues teniendo problemas, puedes pasarme una copia de tu BD por medio de dropbox, skydrive... o webs tipo filebig.net, mega... y le doy un vistazo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas