¿Se puede en un campo de una tabla que me ponga el valor del campo de otra tabla?

Lo que quiero es lo siguiente:
Tengo una tabla llamada PRECIOS que tiene el campo PRECIO dependiendo de la EMPRESA Y de los TIPOS de precios. Yo lo que pretendo es que en la tabla REGISTROS tener un precio que lo "traiga" de la tabla PRECIOS pero que quede grabado. Ya que si en un futuro si modifico el PRECIO de la tabla PRECIOS no influya en los precios que se pagaron es su momento. Por lo que lo ideal era que lo pusiera automáticamente al crear el registro de la tabla REGISTROS pero que quedara para siempre ese precio grabado.

1 respuesta

Respuesta
2

Si lo quieres hacer directamente en la tabla, necesitas Access 2010 o superior y programar una macro de datos en la tabla.

Si lo haces en un formulario, usa la función DLookUp para buscar el precio del artículo en cuestión. Por ejemplo, si lo quieres poner al rellenar el campo Empresa:

Me.Precio=DlookUp("Precio","Precios","Empresa='" & Me.Empresa & "'")

¿Cómo tendría que hacer en el formulario? ¿Donde pongo esa función?

En el supuesto del ejemplo, iría en el evento "después de actualizar" del campo Empresa.

En tu formulario real, tendrás que poner una instrucción similar en el campo que corresponda (que será el que esté relacionado con la tabla precios) y en la función hacer los cambios pertinentes con los nombres que tengas.

¿Cómo sería lo de programar una macro de datos en la tabla? Es que lo otro tampoco me sale. Igual es porque tiene que tener en cuenta dos campos realmente: el campo EMPRESA y el campo TIPOS de la tabla PRECIOS (combinando los dos no hay ningún registro igual pero sino si coinciden en el nombre el campo tipos). Una aclaración me pones después de actualizar el campo empresa, pero realmente el Formulario está agrupado por empresas, que a su vez tiene cada una de ellas el subformulario FRM CONTRATA desde el que meto todos los datos CONCEPTO, CANTIDAD, etc., aquí es donde está el campo PRECIO que quería que lo pusiera automáticamente desde la tabla PRECIOS. En fin un lío.

Andrés, has de tener en cuenta que yo no sé cómo tienes montada tu BD ni cómo se su`pone que funciona, y solo sé de ella lo que tú cuentas, y en esta pregunta fue más bien poco (por no decir nada).

Mi respuesta es, por tanto, una respuesta general para que tú hagas el trabajo y el esfuerzo de adaptarla a tu caso concreto.

Dicho esto, la forma de hacerlo por código sigue siendo la misma, usar la función DLookup() para buscar en la tabla el valor del campo deseado, en función de uno o más criterios, que son los que tienes que poner en el tercer argumento de la función (http://www.accessyexcel.com/donde-y-como-utilizar-la-funcion-de-dominio-dlookup/)

En cuanto al evento en donde colocarlo, deberás colocarlo en algún campo del subformulario que rellenes "a mano", pero ojo, salvo que en el formulario tengas los campos que sirvan para localizar en precio, tendrás que usar los del formulario, para lo que te servirá esto: http://www.llodax.com/Tutoriales/SintaxisSubForms.htm

Por macros de datos no creo que lo puedas hacer, porque me da que en el subformulario no tienes los campos necesarios para que se identifique el registro de la tabla precios.

¡Gracias! Hoy no tengo tiempo pero lo miraré. Tiene pinta de estar bien explicado en esa página.

BUFFFF, no hay manera:
En un cuadro de texto de mi formulario puse lo siguiente para practicar:

=[Me]![frm contrata].[Formulario]![nombrecontrata]

Y ni eso me funciona... pone ¿nombre?

Para los precios esto creo que es el código que quiero... pero tendrá muchas erratas ... no me va ni lo anterior.

=DBúsq("precio";"precios";"[empresa]=me![frm contrata]nombrecontrata"And [tipos]=me![FRM REGISTROS]concepto")

Creo que quiero esto pero sólo me coge el primer registro de la tabla. ¿hay que hacer un recordset o como se llame?

=DBúsq("precio";"precios";"[empresa]=Form![frm contrata].[nombrecontrata]" Y "[tipos]=Form![frm registros].[concepto]")

El Me. solo lo puedes usar en código VBA, no en le origen de control de un cuadro de texto. Usa [Formularios]![NombreFormulario]

En el primer DBúsq() te sobran las comillas antes del AND

En el segundo, tienes mal esta parte:( " Y " )que debería ser simplemente ( AND ).

Por otro lado, habría que ver dónde tienes el cuadro de texto en el que pones ese origen de control y dónde están los controles a los que hacen referencia, para saber si la expresión está bien o no

Ahora mismo lo que tengo son dos expresiones. Una es esta que dices está incorrecta:

=DBúsq("precio";"precios";"[empresa]=Form![frm contrata].[nombrecontrata]" Y "[tipos]=Form![frm registros].[concepto]")

Me coge sólo el primer valor de la tabla PRECIOS. Por cierto así, pongo AND pero automáticamente me pone Y.

Por otra parte esta:

=DBúsq("precio";"precios";"[empresa]=Form![frm contrata].[nombrecontrata] and [tipos]=Form![frm registros].[concepto]")

Esta me pone #Error

Pruebo a ponerlo en dos sitios: por un lado en un cuadro de texto del subformulario FRM REGISTROS cuyo formulario principal es FRM CONTRATA, por otro lado pruebo en el campo PRECIO como valor predeterminado (que es lo que realmente me interesa), pero el resultado es el mismo.

El primer DBúsq lo tienes mal, el operador Y (o AND) tiene que ir sí o sí dentro de las expresión de los criterios (como lo pones en la segunda). Otra cosa es que la expresión no te funcione porque la sintaxis de los criterios no sea la correcta.

Yo acabo de hacer un par de pruebas, y cualquiera de éstas funciona:

=DBúsq("Precio";"TPrecios";"Empresa=[Formularios]![FContratas]![Empresa]  AND Tipo= [Tipo]")
=DBúsq("Precio";"TPrecios";"Empresa=[Formularios]![FContratas]![Empresa] AND Tipo='" & [Tipo] & "'")
=DBúsq("Precio";"TPrecios";"Empresa='" & [Formularios]![FContratas]![Empresa] & "' AND Tipo='" & [Tipo] & "'")
=DBúsq("Precio";"TPrecios";"Empresa=[Formularios]![FContratas]![Empresa]  AND Tipo=[Formularios]![FContratas]![Secundario4]![Tipo]")

Funcionan en el origen de control del cuadro de texto, no en valor predeterminado.

Ahora bien, para lo que lo quieres, intuyo que no te sirve, porque si lo haces así no te quedará el dato guardado en la tabla asociada al subformulario. Para eso has de hacer lo mismo, pero usando código VBA, como te vengo diciendo en mis respuestas anteriores..

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas