Access - Automatizar relleno de campos

 
Vista:

Automatizar relleno de campos

Publicado por Vinikola (4 intervenciones) el 13/08/2009 11:38:55
Hola a todos!

Soy un aficionado a la cultura del vino y estoy haciendo una base de datos de los vinos que voy catando. Esta base consiste en un formulario donde, entre otros campos, aparecen: "Origen del vino" (zona de procedencia), "Región" y "País". Paralelamente, he creado una tabla ("Territorios del vino") con todas las denominaciones de origen del vino español donde aparecen también los campos "Origen", "Región" y "País". Mi propósito es que cuando rellene el campo "Origen del vino" del formulario "Vinos catados", automáticamente se rellenen los campos "Región" y "País", tomando como referència la tabla indicada. He intentado crear una macro para automatizar el proceso pero no domino mucho el tema y me da error. ¿Me podría alguien echar una mano y darme la fórmula para realizar el proceso?

Muchas gracias!

Vinikola
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Automatizar relleno de campos

Publicado por Antonio (83 intervenciones) el 13/08/2009 13:31:26
Hola,

En el formulario "Vinos catados" el campo origen del vino lo pones en un cuadro combinado que tiene las siguientes propiedades:

Origen del control: el campo de la tabla de vinos catados ("Origen")
Tipo de origen de la fila: Tabla/Consulta
Origen de la fila: la tabla Origenes
Columna dependiente: 1
Limitar a la lista: SI
Ancho de columnas: 0;4

En el mismo formulario los campos Region y Pais deberían ser solo a titulo informativo (es decir no existentes en la tabla Vinos Catados puesto que ya tienes los detalles en la tabla Origenes) y en la propiedad Origen del control

Para Región: dlookup("Region","Origenes",forms![Vinos catados]!Origen)
Para Pais: dlookup("Pais","Origenes",forms![Vinos catados]!Origen)

Nota que la tabla Origenes debe tener un identificador (por ejemplo "Id") como primera columna y la descripción (por ejemplo "Origen") en la segunda columna para que los valores que indico en las propiedades del cuadro combinado sean válidos. También que si intentases poner un valor no existente en Origen, te lo va a rechazar dandote un aviso de error.

Y ojo, esta ayuda tiene un precio: que nos informes a todos de cuales son los vinos más recomendables ;-)

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Automatizar relleno de campos

Publicado por Vinikola (4 intervenciones) el 18/08/2009 07:54:03
Hola Antonio,

Muchas gracias por la info. He empezado bien pero me he quedado a medio camino. Te agradeceré muchísimo que me eches otro cabo.

Te cuento: Lo de convertir en cuadro combinado el campo "Origen" de la tabla "Vinos catados" me ha salido bien: ahora al desplegar el cuadro me aparece el listado completo con las denominaciones de origen y puedo escoger la que quiero. Tienes razón también en cuanto a lo de suprimir los campos "Región" y "País" de la tabla "Vinos catados", pues era redundante con la tabla "Territorios del vino". Lo he hecho y ahora los campos del formulario me aparecen como independientes.

Es a partir de lo de dlookup que me pierdo: el problema es que igual me estoy equivocando en una coma o en una mayúscula y eso lo invalida todo (Access te dice que te equivocas pero no te dice dónde...).

Los puntos "oscuros" son:

1. En qué parte de la ventana "Propiedades" de los controles "Región" y "País" debo introducir la fórmula? Entiendo, según dices, en <Origen del control>.

2. Cómo debo introducir la fórmula, directamente sobre la fila de la propiedad o mediante el generador de expresiones?

3. La fórmula es tal cual la escribes: dlookup("Region","Territorios del vino",forms![Vinos catados]!Origen), es decir: sin espacios, con los nombres entrecomillados... hay que respetar mayúsculas?

4. Finalmente, lo del Identificador tampoco lo comprendo muy bien. En la tabla "Territorios del vino", el primer campo corrresponde a "Origen" y es el campo clave, puesto que no puede haber repetición de registro. Debo aun así introducir otro campo previo autonumérico y convertirlo en campo clave? Si es así entonces no deberé modificar la propiedad <Columna dependiente> del control "Origen" del formulario "Vinos catados" y poner 2 en lugar de 1?

En fin, perdona el tostón y gracias de antemano. Si necesitas los consejos de un somelier puedes contar conmigo, por supuesto...

Vinikola
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Automatizar relleno de campos

Publicado por Antonio (83 intervenciones) el 18/08/2009 12:02:52
Hola de nuevo,

Revisando lo que te indicaba acabo de darme cuenta que estaba incompleto. Espero explicarme ahora mejor. Empezando por el final

La tabla "Territorios del Vino" me dices que tiene su clave que es el campo "Origen". Este campo puede ser un valor numérico o de texto y tengo la impresión que es de texto. Si estoy en lo cierto lo que te podía suceder es que tuvieras dos registros, el primero podría tener como clave "Ribera del Duero" y un segundo registro con clave "Ribera de Duero". Para Acces es válido por que son distintos (de/del). Sin embargo esa situación no es deseable porque estás perdiendo información cuando selecciones uno de ellos. La forma habitual es que se tenga un campo de clave, habitualmente numérico por ejemplo "Id", como te decía en el mensaje anterior y la descripción en un campo de texto que no es el de la clave. Evitando introducir una clave distinta (que sería solo una descripción ligeramente distinta) REDUCES la posibilidad de esa situación no deseada, pero puede seguir ocurriendo si DELIBEDARAMENTE se registra un nuevo territorio, con un Id distinto y con una descripción que puede ser igual o muy parecida a la anterior. Mi recomendación es tener el campo Id. aunque por supuesto la elección es tuya.

Con respecto al origen del control, puedes hacerlo tanto con el generador de expresiones como directamente sobre la línea de la propiedad (cuando ya estás más familiarizado con todo es lo que acabamos haciendo siempre por rapidez). Y aquí es donde estaba incompleta la instrucción. Debe quedar del modo siguiente

Para Región:
=dlookup("Region","Origenes","Origen = " & forms![Vinos catados]!Origen )
Para Pais:
=dlookup("Pais","Origenes",Origen = " & forms![Vinos catados]!Origen)

El signo igual al principio (me faltaba) lo requiere Access para las formulas. Lo otro que estaba incompleto era la condición que tiene que cumplir el registro de la tabla Origenes en ambos casos.

Si el campo "[Territorios del Vino].Origen es un campo de texto entonces esa condición de más arriba no valdría porque necesita comillas sencillas rodeando al valor de Origen (sencillas por que toda la condición a su vez también vá entre comillas). Quedaría de este modo

"Origen = '" & forms![Vinos catados]!Origen & "'"
(nota que después del signo igual que sigue a Origen vá una comilla sencilla '
lo mismo ocurre al final que vá una comilla sencilla ' entre dos comillas dobles "

Ya nos contarás si ha servido. Perdona mi error y un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Automatizar relleno de campos

Publicado por Vinikola (4 intervenciones) el 20/08/2009 11:04:29
Hola Antonio,

Lo he logrado y te estoy muy agradecido! Sin ti no hubiera podido hacerlo ya que ni siguiera sabía la fórmula que requería mi caso. Pero no ha sido tarea fácil. Te cuento porque puede interesarte para ayudar a otros usuarios:

Seguí al pie de la letra tus instrucciones, clarísimas por cierto, pero no había manera. Ni tan solo me dejaba guardar la fórmula, ya que inmediatamente aparecía un mensaje de error de sintaxis que no comprendía. Y lo jodido es que entendía el razonamiento de la fórmula sin problemas (entendía el porqué), pero ni a la de de tres.

Empecé a buscar por otros lares y encontré lo mismo que tu me habías dicho (http://support.microsoft.com/kb/285866/es). Estaba ya por abandonar o empezar la base de datos de cero, cuando de pronto se me encendió la bombilla y tuve un presentimiento: cambié las comas por puntos y coma, y todo resuelto!

Pues no sé por qué en mi caso el programa requiere punto y coma, pero está claro que con comas no funciona. Por otro lado, la función que utiliza no es dlookup sino dbúsq, pero eso importa poco porque cambia automáticamente de aquélla a ésta.

En fin, que ha costado la torta un pan, pero ha valido la pena. Y como te decía, te estoy muy agradecido. Poco puedo hacer por ti como somelier, pero te voy a dar un par de consejos que tal vez te sean de utilidad:

No marides nunca jamón ibérico con vino tinto (es un error muy extendido). El mejor maridaje: jereces secos añejos: palo cortado, amontillado, oloroso. Otro muy bueno: cava o champan (si es cava que sea gran reserva), y si no: un buen vino blanco con barrica o incluso, si me apuras, un rosado, pero jamás un tinto (por qué? no vas a distinguir la diferencia entre un "país" de 10 euros/kg de un "jabugo" de 70).

Si te gusta el sorbete de limón, échale un poco de cava por encima (aunque sea del malo), el resultado es impresionante. Hay restaurantes que ya ofrecen el postre hecho; en otros que solo ofrecen sorbete de limón, yo pido, a parte, la copa de cava, y me echo un poco en el sorbete. Si el camarero mira mal, es su problema... ;-)

Salud!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Automatizar relleno de campos

Publicado por Antonio (83 intervenciones) el 20/08/2009 13:58:30
Hola,

Celebro que lo hayas conseguido. Lo del punto y coma se me pasó a mí por alto, por que normalmente uso VBA y ahí se pone con comas pero en las propiedades de los controles los parámetro se separan con punto y coma. Lo mismo pasa con dlookup, esa es la instrucción en VBA pero el interface de usuario lo tiene traducido y de ahí tienes dbusq, pero acepta la instrucción en inglés.

Y del vino, estoy de acuerdo contigo, para todo lo que sea tapear lo mejor un buen jerez o amontillado. El sorbete, estupendo.

Sigo a tu disposición si tienes alguna otra duda.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Automatizar relleno de campos

Publicado por Vinikola (4 intervenciones) el 20/08/2009 14:32:02
Hola de nuevo!

Estoy haciendo, para seguir practicando con Access (va a ser de las cosas buenas que voy a sacar del verano...), un ejercicio con dos formularios: "Productos" y "Proveedores", donde cada producto tiene su proveedor y cada proveedor su lista de productos.

Querría poder hacer dos cosas:

1. Entrar los productos solo una vez en el formulario "Productos" y que al mismo tiempo se almacenasen en el de "Proveedores".

2. Poder listar o visualizar directamente en el formulario "Proveedores" todos los productos de un proveedor en el registro correspondiente a dicho proveedor.

He intentado alguna cosilla pero solo he conseguido un listado de todos los productos entrados de todos los proveedores.

Por dónde empiezo??

Un saludo!

Vinikola
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar