Consulta como formulario

Tengo un problema en el diseño de un formulario. Llevo una semana preguntando a varios expertos pero no recibo respuesta y estoy más que atrancado en el diseño de mi base de datos. Te agradecería un poco de ayuda, por favor.
Pongamos que tengo la siguiente tabla con 4 campos:
Id Tipo de Carbón Peso Precio
1 coke 1 2 Euros.
2 coke 2 3,5 Euros.
3 coke 3 4,15 Euros.
4 lignito 1 4 Euros
5 lignito 2 6,85 Euros
6 lignito 3 9,95 Euros
Pretendo crear un formulario en el que tanto "tipo de Carbón" como "Peso" sean cuadros combinados y que, en función a lo que elija de entre estos dos cuadros combinados, en un cuadro de texto (precio) me aparezca automáticamente el precio que le corresponde.
Te agradezco de antemano tu colaboración y quedo a la espera de tu respuesta.

1 respuesta

Respuesta
1
Supongamos que la tabla se llama Almacen, con los campos TipoCarbon, Peso y Precio.
En el formulario un cuadro combinado independiente, con botón derecho vamos a propiedades, en nombre lo llamamos Cuadro1, en origen de la fila: Select TipoCarbon from Almacen group by TipoCarbon order by TipoCarbon (si tienes dificultades para escribir la sql pulsas en el cuadradito de la derecha, el de los ... y la construyes en modo diseño. El group by es para que no te salgan repetidos los tipos de carbón. En la acción Al hacer clic ---> Procedimiento de Evento ---> Me. Refresh (para escribirlo pulsa en el cuadrado de los ...). el Me. Refresh es para actualizar el formulario y poder usar el valor elegido.
Otro cuadro combinado que llamaremos Cuadro2, en origen de la fila: Select Peso from Almacen where TipoCarbon=form! Cuadro1. Value group by Peso order by Peso. El TipoCarbon lo igualamos al que hemos seleccionado en el cuadro combinado anterior con el fin de que solo nos salgan los pesos de ese tipo de carbón. Al hacer clic otra vez Me. Refresh.
Un cuadro de texto, en Origen del Control pondremos: =DBúsq("[Precio]";"[Almacen]";"TipoCarbon=form!Cuadro1.Value and Peso=form!Cuadro2.Value")
Es decir, búscame el campo Precio de la tabla almacen cuyo campo TipoCarbon sea igual al valor del Cuadro1 y el campo Peso=Valor del Cuadro2.
Ángeles, todo funciona a la perfección. Sólo tengo un problema. No sé por qué cuando integro esto cuadros (cuadro1, cuadro2 y precio) en un formulario mayor para poder emitir facturas no se me graba el precio. Intentaré explicarme mejor. Tengo una tabla que se llama "Pedidos" que integra los campos de la tabla "Almacén" que es la que me has ayudado a convertir en formulario. Pero, si bien se me graban el Tipo de Carbón y el Peso, no ocurre lo mismo con el dato del Campo "Precio" que no aparece en la tabla. ¿Cómo podría hacerlo?
Pd. Muchas gracias por contestar, has sido de gran ayuda y ya empezaba a agobiarme.
¡¡¡¡"CONVERTIR"!!!!!___________mil perdones
Quizás sea porque al buscar el precio no actualizas el formulario. Has visto que en los cuadros combinados hemos puesto Al hacer clic ---> Procedimiento de evento ---> Me. Refresh, esto lo que hace es que al elegir un dato del cuadro combinado con un clic se actualiza el formulario y de alguna forma se guarda el valor para poder utilizarlo después. Prueba a hacer lo mismo en el cuadro de texto, no se, en la acción Al cambiar o Al perder el enfoque. Prueba y me cuentas. Sino tendriamos que poner un botón que ejecute la sentencia Insert Into Pedidos.....
Acabo de intentar añadir "Me.Refresh" pero negativo, no funciona. Mientras esperaba tu respuesta he hecho lo siguiente. He convertido cuadro de texto "Precio" en un cuadro combinado y en Origen de la Fila he puesto lo siguiente:
SELECT Almacén.Precio
FROM Almacén
WHERE (((Almacén.Peso)=[form]![Peso].[Value]) AND ((Almacén.TipoCarbón)=[form]![TipoCarbón].[Value]))
GROUP BY Almacén.Precio
ORDER BY Almacén.Precio;
De esa forma sí que que logro que el precio quede grabado en la base de datos pero, cómo decirlo, no queda muy elegante y, si quien toma nota de los pedidos se equivoca, tiene que modificar los dos cuadros combinados "TipoCarbón" y "Peso" y eso puede dar lugar a errores.
En vez de convertir el cuadro de texto en cuadro combinado conviértelo en cuadro de lista, es más parecidor al cuadro de texto y en origen de la fila pones el Select.
Consejo, cuando te refiereas en el select a una sola tabla no tienes que referir el campo a esa tabla, es decir, por ejemplo, en vez de Almacén. Precio con Precio te bastaría. Otra cosa, como supongo que para un Tipo de carbón y un peso solamente tienes un precio el group by y el order by te sobraría ya que solo tienes una respuesta.
En cuanto a lo de equivocarse, no se muy bien lo que quieres decir.
Esta noche probare lo que me aconsejas y te mandaré el resultado. Ahora tengo que salir. De nuevo muchas gracias por la ayuda... muchas
Ya me contarás
He hecho todo lo que me indicas. Pero únicamente me graba los datos del campo "precio" cuando dicho campo es un Cuadro Combinado. No los graba ni como Cuadro de Edición, ni como Cuadro de Lista.
Con respecto a lo de equivocarse me refiero a que si elijo:
TipoCarbón: vegetal encina
Peso: 50
... me da un Precio de, por ejemplo: 12Euros. Si el cliente me dice que en lugar de 50 de peso prefiere 65, lo cambio y se actualiza el precio. Bien, esto no ocurre si lo que tengo que actualizar es el tipo de carbón. Si quiero cambiar el tipo de carbón aunque sea con el mismo peso, tengo que volver a escribir 50 de peso para que lo actualice.
Quizá ocurra esto por la manera en la que expreso el origen de la fila:
SELECT Precio
FROM Almacén
WHERE (((Peso)=[form]![Peso].[Value]) AND ((TipoCarbón)=[form]![TipoCarbón].[Value]));
Resumiendo, mis dos problemas son:
1º.- Que el precio no aparece automáticamente si no que tengo que pulsar la flechita del cuadro combinado
2º.- Que cuando cambio el tipo de carbón tengo obligatoriamente que modificar el peso si quiero que se actualice el precio
No está nada mal lo que ha avanzado mi base con tu ayuda. Lo que te solicito es para nota. Si lo podemos lograr genial y si no, ya he conseguido todo lo que necesitaba y me doy más que por satisfecho.
Un saludo
Al cambiar el tipo de carbón es lógico que tengas que cambiar el peso ya que este cuadro combinado lo tenemos vinculado al cuadro combinado del precio del carbón.
Para insertar el registro lo podemos hacer mediante un botón en el que pondremos en la acción Al hacer clic un procedimiento de evento:
Insert Into Pedidos (TipoCarbon, Peso, Precio) Values (form!Cuadro1, form!Cuadro2, form!Texto1)
Siendo Cuadro1 y Cuadro2 el nombre de los cuadros combinados y Texto1 el nombre del cuadro de texto donde buscamos el precio.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas