Auto rellenado en varios campos del mismo significado

Tengo una tabla "TABLA FICHAS"con los campos IdFicha (autonumerico principal), FICHA, Ingrediente1, cantidad1, medida1, medidaExt1, Ingrediente2, cantidad2, medida2, medidaExt2, ingrediente 3, cantidad3, medida3, medidaExt3... Así hasta 15 veces.

Lo que quiero es que cuando ponga la medida, por ejemplo Kgs me salga en otro campo KILOGRAMOS.

Tengo unido a través de consulta las distintas  cantidades con la medida "Expr1:[cantidad1]&" "&[medida1]"   para que en el informe me  quede más presentable. Pero necesito que me salga a continuación de la medida la medida extendida, en otro campo.

He creado una tabla "MEDIDAS" con los campos Medida como clave principal y MedidaExt

Los resultados serían algo así

Medida          MedidaExt

Grs                  GRAMOS

Kgs                  KILOGRAMOS

L                       LITROS

En la TABLA FICHAS tengo relacionado "medida1" con Medida de la tabla MEDIDAS de manera que cuando ingreso la medida1, automáticamente me auto escribe medidaExt1.

La pregunta es la siguiente, como hago para que inserte automáticamente todas las MedidasExt restantes sin tener que hacer 15 tablas para relacionar los campos Medida1, Medida2, medida3...

3 respuestas

Respuesta
2

Yo haría una tabla Fichas y otra tabla Ingredientes, solo con Ingrediente, Cantidad, Medida, MedidaExt, relacionada uno a varios. Una "Tarta" Varios ingredientes. Pero... si tengo el formulario(no hagas caso a las etiquetas, ya que los cuadros de texto se llaman MedidaExt1... hasta MedidaExt8. Como no sé donde le "das" la medida, le he puesto un cuadro de texto( es sólo para el ejemplo)

Si escribo, por ejemplo Kgs

Al pulsar Enter

Me lo "cambia" a todos. Si pongo Grs

El código del evento Después de actualizar del cuadro de texto es

Private Sub Texto16_AfterUpdate()
Select Case Texto16
Case Is = "Grs"
Dim i As Integer
Dim Ctl As Control
For i = 1 To 8
     Set Ctl = Controls("Medidaext" & i)
     Ctl = "Gramos"
Next i
Case Is = "Kgs"
 For i = 1 To 8
     Set Ctl = Controls("Medidaext" & i)
     Ctl = "Kilogramos"
Next i
Case Else
For i = 1 To 8
     Set Ctl = Controls("Medidaext" & i)
     Ctl = "Litros"
Next i
End Select
End Sub

Se podría hacer más sencillo pero al no saber como lo tienes.

Hola de nuevo, 

Creo que he liado demasiado la madeja de hilo. No es eso lo que quiero.

Me explico de nuevo porque creo que no he sabido explicar lo que quiero.

De la tabla FICHAS que tiene los campos IdFicha (autonumerico principal), FICHA, Ingrediente1, cantidad1, medida1, medidaExt1, Ingrediente2, cantidad2, medida2, medidaExt2, ingrediente 3, cantidad3, medida3, medidaExt3... 

Los campos de las Medidas 1,2,3,4... son cuadros combinados con los campos "kgs", "grs", "litros", "unds"...

Y los campos de MedidaExt van condicionados  a la selección del campo "Medida 1 ó 2 ó 3, etc

De manera que si el primer registro es

IdFicha             Ficha              Ingrediente1     Cantidad 1  Medida1      MedidaExt1     Ingrediente2...

2                       Bechamel             Harina             100              grs                  GRAMOS               Leche

3                 Patatas revolconas   Patatas               2              kgs                  KILOGRAMOS       Ajo

De manera que cada registro puede tener varias medidas

Medida1     MedidaExt1     Medida2      MedidaExt2    Medida3     MedidaExt3     

      Kg         KILOGRAMOS        litro           LITROS              Unds        UNIDADES

Espero haberme explicado mejor. 

Gracias de nuevo

Más o menos a eso me refería con la instrucción que te puse(luego lo explico). Por lo que parece, el formulario no tiene datos.- Si ese es el caso basta con que pongas en el evento después de actualizar de cada cuadro combinado donde eliges la unidad, puedes poner

Select case medida1

case is="grs"

medidaext1="Gramos"

case is="Kgs"

medidaext1="Kilogramos"

case..

medidaext1=...

End select

Luego todo consiste en copiar y pegar en los diferentes combinados cambiando el 1 por el 2, por el 3, ...

Si lo hicieras como te decía, una tabla con, por ejemplo, IdFicha, Ficha, y otra Ingredientes, con Idficha(numérico), Ingrediente, Cantidad, Medida y MedidaExt, relacionadas ambas por idFicha(UNA ficha VARIOS ingredientes, bástaría con hacerlo una sola vez.

Te decía lo de la instrucción que puse, porque sólo tendrías que añadir, lo mismoque digo de controls("medidaext"&i)

Definir lo mismo para Medida1, medida2, etc...

Respuesta
2

Hay soluciones más simples que las que te proponen, basadas en las relaciones entre las dos tablas.

Primero te explico una forma con la estructura que tienes en tu BD, con prácticamente nada de código, siguiendo este ejemplo: http://www.filebig.net/files/JfhbRJJtD3

Lo que hice fue lo siguiente:

En la tabla TFichas, los campos MedidaExt1 y MedidaExt2 (lo hice solo con dos para abreviar, pero tu hazlo con los que tengas) los configuro con el asistente de búsquedas, de tal forma que coja los dos campos (Medida y MedidaExt) de la tabla TMedidas. Luego le modifico el ancho de la segunda columna (campo MedidaExt) a 0 cm, para que no se vea.

Esto lo puedes hacer también manualmente en la vista diseño de la tabla, sin necesidad de usar el tipo de campo "asistente para búsquedas".

En segundo lugar, hago el formulario sobre la tabla (los campos Medida1 y Medida2 ya están configurados igual que en la tabla). Saco las propiedades del cuadro combinado Medida1 y le genero esta línea de código en el evento "después de actualizar":

Me.MedidaExt1=Me.Medida1.Column(1)

Hago lo mismo con Medida2: Me.MedidaExt2=Me.Medida2.Column(1)

Y así con el resto.

Para que el formulario quede "mejor", y no te pongan MedidasExt que no existen, le modifico las propiedades a esos campos para ponerlos Bloqueado: Sí y Punto de Tabulación: No

Ahora bien, tu BD no tiene una estructura óptima, porque incumple las formas normales de una base de datos relacional, en concreto la que dice que si ya tienes un dato en una tabla, no debes repetirlo. En concreto me refiero a los campos MedidaExt que no deberían figurar en tu tabla Fichas, pues siempre puedes acceder a ellos a través de la relación entre las tablas.

Te adjunto dos formas de hacerlo, sin nada de código: http://www.filebig.net/files/jw9ydrKKXN 

La primera forma es a través de una consulta, en la que cojo todos los campos de TFichas y Tantas veces el campo MedidaExt de la tabla TMedidas como es necesario para crear todos los campos MedidaExtX. (Fíjate cómo está estructurada la consulta, añadiendo a la misma la tabla Medidas tantas veces como campos MedidaExt necesitas). Luego haces el formulario (e Informe) sobre esa consulta, en vez de sobre la tabla como tienes ahora.

Otra forma, sin necesidad de consulta, es añadir a tu formulario (e informe) 9 cuadros de texto independientes, y en su origen de control irles poniendo:

=Medida1.Column(1)

=Medida2.Column(1)

...

Un saludo.


Respuesta
1

Lo mejor forma y no lo dude es como se lo recomiendan separando la información en varias tablas y estableciendo la respectiva relación, no obstante le explico lo siguiente con el fin de mantener su estructura inicial.

Con base en las tablas FICHAS y MEDIDAS se puede preparar el informe, necesitamos:

1 - Una función que retorne el nombre del campo medidaExt1, medidaExt2,... etc con base en el contenido del campo medida1, medida2,,,, etc. Esta es la función:

Para esto debe crear un módulo (si no lo tiene)

2 - En el reporte se debe crear el código que realice la actualización de los campos medidaExt1, mediaExt2,,,, etc. Esto se hace en el evento "Al Cargar", este es el código.

En este ejemplo solo hay 3 medidas de acuerdo con su consulta debe incluir hasta la número 15.

Al abrir el reporte debe quedar algo como:

Lo anterior asume que en el formulario de captura no deben aparecer los campo medidaExt1, medidaExt2,,,, etc.

Bueno esta es una forma, seguro que hay más opciones.

Si lo hacemos mediante el uso de relación de tablas creo la respuesta aún no está completa, no es una base de datos totalmente relacional. He incluido un ejemplo en donde utilizo 4 tablas 1 consulta 2 formularios y 1 reporte, puede descargarlo de este link http://www.filebig.net/files/H6PPYavF4x.

Tablas y relaciones

FORMULARIOS 

Este es el formulario de las Fichas y contiene un subformulario de Componentes, faltaría adicionarle la funcionalidad para agregar, retirar etc. Observe que puede adicionar o editar ingredientes, cantidades y medidas.

INFORME DE FICHAS

El sistema relacional nos permite crear este informe con los ingredientes de cada ficha.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas