Dbúsq como valor predeterminado o campo calculado en vista diseño

Uso access 2010

Llevo unas horas intentando resolver este problema que describo a continuación:

Tengo una tabla Tb_reses con estos campos:

"crotal res", "raza res"

Otra tabla Tb_inseminaciones con estos campos:

"crotal vaca", "raza vaca insemi"

Los valores de los campos de la tabla Tb_reses se introducen a mano al "dar de alta" la res.

En Tb_inseminaciones el campo "crotal vaca" también se introduce a mano.

Lo que necesito es que en la tabla Tb_inseminaciones cuando se introduce el valor en "crotal vaca" se introduzca automáticamente el valor del campo "raza vaca insemi" que seria tomado desde la tabla Tb_reses "raza res" .

Aclarar que los campos "crotal res" y "crotal vaca" contienen los mismos valores únicos y "crotal vaca" es una lista desplegable basada en los valores de "crotal res".

En otras palabras que se puede identificar la raza de la res basándose en el crotal, que como digo es un numero único.

He intentado esto como valor predeterminado con el campo en tipo texto y en vista diseño de la tabla:

=DBúsq("[Raza res]";"[Tb_Reses]";"[crotal res]=[crotal vaca]")

Y me arroja este error:"Fucion desconocida 'Dlookup' en la expresión de validación o valor predeterminado de 'Tb_Inseminaciones.raza insemi vaca'

La misma expresión cambiando tipo de campo a calculado y en vista diseño de la tabla me arroja este otro error:

"La expresión =DlookUp("[Raza res]";"[Tb_Reses]";"[crotal res]=[crotal vaca]") no se puede usar en una columna calculada"

Hay algún modo de guardar la raza de la res en la tabla inseminaciones basándose en los datos de la tabla reses o es que no se puede usar esta función en vista diseño de tabla?

¿Qué opciones tengo?

También si mi planteamiento en la construcción de la db es incorrecto agradecería ser informado.

1 Respuesta

Respuesta
1

Hasta donde yo sé (suelo trabajar con access 2003), no puedes usar la función DBúsq en una tabla, por eso te da ese error. Si te fijas, esa función no aparece en el generador de expresiones de la vista diseño de las tablas (al menos en 2003).

Para solucionarlo, puedes crear un formulario basado en la tabla tb_inseminaciones, vas a diseño, cuadro de texto crotal vaca, propiedades, pestaña eventos, y en después de actualizar pinchas en los 3 puntos (...) -> generar código, y le pones:

Private Sub crotal_vaca_AfterUpdate()
Dim crotal As String
Dim res As String
crotal = Nz(Me.crotal_vaca.Value, "")
If crotal = "" Then 'Si el campo crotal está vacío, res estará vacío

Me.raza_vaca_insemi.Value = null

Exit Sub

end if
res = Nz(DLookup("[raza res]", "Tb_reses", "[crotal res]='" & crotal & "'"), "")
If res = "" Then ' Si el crotal no está en la tabla tb_reses, nos avisa
MsgBox "Crotal no registrado", vbInformation, "AVISO"
Exit Sub
End If
Me.raza_vaca_insemi.Value = res
End Sub

Ya me dirás si te sirve así.

Hola,

Muchas gracias por la respuesta y sobre todo por el código ya que aun investigando dudo que yo pudiera hacerlo tan funcional y simple.

Funciona perfectamente, solo he tenido que borrar y re-añadir el cuadro de texto "raza vaca insemi" porque por alguna razón daba un error de compilación. (es que ya tenia el formulario creado)

Increible trabajo, muchimas gracias.

Saludos.

Lo dicho un millón de gracias :-)

Ah, se me pasó comentarte una cosa, aunque por lo que comentas ya da igual, pero te lo digo igual por si lo usas en otra ocasión:

Si el campo "crotal" es numérico, tienes que cambiar un par de lineas del código:

Private Sub crotal_vaca_AfterUpdate()
Dim crotal As integer
Dim res As String
crotal = Nz(Me.crotal_vaca.Value, 0)
If crotal = 0 Then 'Si el campo crotal está vacío, res estará vacío
Me.raza_vaca_insemi.Value = null
Exit Sub
end if
res = Nz(DLookup("[raza res]", "Tb_reses", "[crotal res]=" & crotal ), "")
If res = "" Then ' Si el crotal no está en la tabla tb_reses, nos avisa
MsgBox "Crotal no registrado", vbInformation, "AVISO"
Exit Sub
End If
Me.raza_vaca_insemi.Value = res
End Sub

No te olvides de cerrar la pregunta y puntuar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas