Te explico cosas:
1º/ Si en un formulario (creado sobre una tabla o consulta) pones un cuadro de texto, y a ese cuadro de texto en su "Origen de control" le pones el nombre de un campo de la tabla/consulta, queda vinculado con esa tabla/consulta y podrás ver los valores ya almacenados, modificarlos, eliminarlos o añadir unos nuevos.
Si embargo, si como origen de control pones una expresión (=DBúsq(...), o =Fecha(), o =[Precio]*[Cantidad], o lo que sea), estás haciendo ese cuadro de texto "independiente" de la tabla/consulta, y el valor que muestre no se guardará en la tabla/consulta a no ser que lo hagas por medio de código o una macro.
Por tanto, y para responder a tu pregunta, si quieres guardar el valor de Adreça en la tabla FACTURES, el origen de control a de ser Adreça, y su valor lo tendrás que obtener vía código. (Más abajo te explico formas de hacerlo)
2º/ DBúsq(), al igual que el resto de funciones de dominio (DMáx(), DCont()...) y demás funciones, código y expresiones en general, tienen una notación específica para tratar los distintos tipos de dato:
- Tipo texto: el valor que se le pasa tiene que ir entre comillas, por ejemplo:
DLookUp("Direccion","Clientes","Nombre='Pedro'")
- Tipo numérico: el valor que se pasa va directamente. Ejemplo:
DLookUp("Direccion","Clientes","ID_Cliente=50")
- Tipo fecha/hora: el valor tiene que ir entre almohadillas:
DLookUp("Nombre","Clientes","FechaAlta=#15/03/2017#")
Es lo mismo que si pones criterios en una consulta para filtrar los resultados.
Si en vez de pasarle un valor "fijo" como en los ejemplos anteriores le quieres pasar un valor "variable", que dependa de los datos del registro activo, la idea será la misma:
DLookUp("Direccion","Clientes","Nombre='" & [Nombre] & "'")
DLookUp("Direccion","Clientes","ID_Cliente=" & [ID_Cliente])
DLookUp("Nombre","Clientes","FechaAlta=#" & [FechaAlta] & "#")
3º/ ¿Cómo puedes traer los datos a FACTURES? Pues tienes varias formas:
- Si en tu formulario el campo "Empresa" lo tienes como un cuadro combinado, puedes modificar ese cuadro combinado (el "origen de la fila", "número de columnas" y "ancho de columna") para que te coja todos los campos que vas a necesitar y se vea solo el principal. Por ejemplo:
Origen de la fila: SELECT Empresa, Adreça, Localitat, Provincia FROM CLIENTS
Número de columnas: 4
Ancho de columna: 4cm;0cm;0cm;0cm;
Luego, en el evento "Después de actualizar" le generas este código:
Private Sub Empresa_After_Update()
Me.[Adreça]=Me.Empresa.Column(1)
Me.[Localitat]=Me.Empresa.Column(2)
Me.[Provincia]=Me.Empresa.Column(3)
End Sub
De esta forma, al elegir una empresa te pasa los datos y se guardan en la tabla FACTURES.
- Otra forma, tanto si Empresa es un cuadro combinado con una única columna como si es un cuadro de texto, sería con DBúsq(), con el siguiente código:
Private Sub Empresa_AfterUpdate()
Me.[Adreça]=DLookUp("[Adreça]","CLIENTS","Empresa='" & Me.Empresa & "'")
Me.[Localitat]=DLookUp("[Localitat]","CLIENTS","Empresa='" & Me.Empresa & "'")
Me.[Provincia]=DLookUp("[Provincia]","CLIENTS","Empresa='" & Me.Empresa & "'")
End Sub
Y conseguirías lo mismo.
El único inconveniente que le veo que se pueda dar es que alguna de tus empresas tenga entre sus caracteres comillas simples (por ejemplo Editorial O'Reilly), con lo que te saltará un error. En ese caso tendrás que usar Replace() para lidiar con ella, por ejemplo:
Me.[Adreça]=DLookUp("[Adreça]","CLIENTS","Empresa='" & Replace(Me.Empresa,"'","''") & "'")
A ver si así te va saliendo.
De todas formas, comentarte que en la web de Neckkito hay varios ejemplos sobre cuadros combinados y formas de traer datos de otras tablas.
Un saludo.