Imagen según valor de un campo

Tengo una tabla con muchos productos químicos, con un campo "tipo de peligro", ("corrosivo","inflamable"... Etc.)
Quisiera que al ir seleccionando un determinado producto en un formulario, se mostrase el pictograma (dibujito del peligro correspondiente, o sea, una imagen), sin tener que introducir cada imagen como dato adjunto en el correspondiente campo de cada registro de la tabla.
Es decir: mostrar una imagen (o varias, si fuese posible, pues un producto puede ser p.e. "tóxico e inflamable") en función del valor de un campo.
No necesito que esa imagen se guarde en la tabla: tan sólo que se muestre en el formulario.
(Mi nivel de access es básico. Access 2007).

1 respuesta

Respuesta
2
Lo que me comentas, teniendo en cuenta que indicas que tu nivel de Access es básico, va a ser un poco laborioso de explicar. Intentaré explicártelo poco a poco y procuraré no dar nada por supuesto. De todas maneras, si te atascas en algún paso, me lo comentas e intentaré ser más explícito.
Como dices que no necesitas guardar el pictograma en la BD y que sólo quieres que se te muestre en el formulario no necesitas utilizar el tipo de campo "Datos adjuntos". Es mejor utilizar una imagen. Te lo voy a explicar creando una imagen en el formulario.
Vamos allá:
A) Pasos previos
Tienes que coger todos los pictogramas que tengas y guardarlos en una carpeta. Es muy importante que te apuntes bien:
- La ruta de la carpeta (por ejemplo, "c:\pictogramas\...")
- El nombre con la extensión del pictograma (por ejemplo, "corrosivo.jpg")
Debes tener en cuenta que los formatos de imagen deberían ser o .bmp o .jpg (que son bastante comunes). Los formatos .tif o .tga, por ejemplo, no funcionarían.
B) En el formulario
Creas una imagen en el formulario. Para ello te pones con el formulario en vista diseño y en los botones le das al botón de imagen (a la izquierda del clip). Dibujas lo que sería el marco de una imagen y cuando sueltes el botón izquierdo del ratón te aparecerá el asistente. Lo cancelas.
Sacas las propiedades de esa imagen (seleccionas la imagen y le das al botón de arriba a la derecha "Hoja de propiedades") y haces lo siguiente:
- Pestaña "Otras"->Nombre: le escribes aquí (sin las comillas) "img1"
Ahora repites el proceso anterior creando una segunda imagen. Tienes que hacer exactamente lo mismo pero a esta le pones de nombre "img2"
C) En el VBE
Para sacar el editor de VBA pulsas la combinación de teclas "Alt+F11".
Te explico cómo va a funcionar el código para que puedas acabar de escribirlo tú (porque tú tienes toda la información y yo no). Vamos a decirle que el valor que muestra el campo "tipo de peligro" se almacene en la variable "tipoPeligro". Una vez almacenado el código va a mirar qué tipo es y va a asignar al cuadro de imagen (o a los dos) la imagen o imágenes correspondientes. Eso lo haremos a través de un procedimiento que se llama SELECT CASE. Tú tendrás que rellenar todos los casos posibles. Yo sólo te pondré un ejemplo con dos opciones.
En el código tienes que sustituir, si procede:
- La palabra "Form1" por el nombre de tu formulario. Si el nombre del formulario contiene espacios debes ponerlo entre corchetes (ejemplo: [Formulario de productos]
- La palabra "Nombre" (casi al final del código) por el nombre de un campo de tu formulario que no sea "[Tipo de peligro]".
- Las palabras "Corrosivo" y "Muerte" me las he inventado. Tú tienes que poner tus valores (siempre entre comillas)
- La ruta donde tengas almacenados los pictogramas, con el nombre de la imagen
De todas maneras te las marcaré en negrita
1.- Te vas al menú del VBE-> Insertar->Módulo
2. En la pantalla que te sale escribes este código:
---
Public Sub subPictograma(tipoPeligro As Variant)
        'Si no hay valor sale del procedimiento
    If IsNull(tipoPeligro) Then
        Forms!Form1.img1.Visible = False
        Forms!Form1.img2.Visible = False
    Else
        Select Case tipoPeligro
                'Si el valor es "corrosivo"
            Case "Corrosivo"
                'Asignamos la imagen correspondiente
                Forms!Form1.img1.Picture = "D:\Pictos\Corrosivo.jpg"
                'Hacemos visible la imagen
                Forms!Form1.img1.Visible = True
                'Si img2 ha quedado visible la oculta
                'porque no es necesaria
                Forms!Form1.img2.Visible = False
                'Si el valor es "muerte" y necesita dos pictogramas
            Case "Muerte"
                'Asignamos la imagen al primer cuadro de imagen
                'y lo hacemos visible
                Forms!Form1.img1.Picture = "D:\Pictos\Muerte.jpg"
                Forms!Form1.img1.Visible = True
                'Asignamos la imagen al segundo cuadro de imagen
                'y lo hacemos visible
                Forms!Form1.img2.Picture = "D:\Pictos\Corrosivo.jpg"
                Forms!Form1.img2.Visible = True
                'Si no se encuentra el valor avisa ysale del procedimiento
            Case Else
                MsgBox "No hay pictograma para este tipo de peligro"
                Forms!Form1.img1.Visible = False
                Forms!Form1.img2.Visible = False
                Forms!Form1.[Nombre].SetFocus
                Exit Sub
        End Select
    End If
End Sub
---
   En definitiva, tú solo tendrás que escribir, siempre por encima de "Case Else" (y adaptarlo a una o dos imágenes, según el ejemplo que te he puesto):
Case "Tu valor"
Forms!Form1.img1.Picture = "Ruta pictograma"
Forms!Form1.Visible = True
Etc.
Puedes guardar el módulo con el nombre que te sale por defecto
D) Volvemos al formulario en vista diseño
Nos volvemos al formulario en vista diseño. Necesitamos ahora un código en los controles que nos llame al procedimiento. Para ello
1.- Seleccionamos el campo "Tipo de peligro". Sacamos sus propiedades y en el evento "Después de actualizar" le escribes este código:
---
Private Sub Tipo_de_peligro_AfterUpdate()
    Dim tipoPeligro As Variant
    tipoPeligro = Me.[Tipo de peligro].Value
    Call subPictograma(tipoPeligro)
End Sub
---
2.- Ahora sacamos las propiedades del formulario y en el evento "Al activar registro" le copias este código:
---
Private Sub Form_Current()
    Dim tipoDanger As Variant
    tipoDanger = Me.[Tipo de peligro].Value
    Call subPictograma(tipoDanger)
End Sub
---
Y eso es todo. Ánimo, a ver si te sale. Si no me lo comentas y veremos cómo arreglarlo.
Hola.
Ante todo muchísimas gracias por tu esfuerzo a la hora de explicarme todo paso a paso.
Aunque ya te dije que soy novato en Access, tengo una mínima experiencia en excel, donde meto alguna Macro sencilla. Así pues, creo haber seguido correctamente tus instrucciones, y "comprendo" la teoría del procedimiento.
Sin embargo... no lo he conseguido. Incluso he creado una nueva BD con una sola tabla y formulario, con los mismos nombres que tú has utilizado, (cambiando sólo las rutas de las imágenes y los valores de "Case"), pero no me funcionó.
Quiero puntualizar si es posible que el campo "tipo de peligro" se introduzca selccionando opciones de una lista desplegable.
De todos modos, a la espera de nuevas sugerencias, sigo intentándolo.
Muchas gracias de nuevo por tu tiempo.
Si te parece bien haz una cosa. Pásame, comprimido en un zip, esa BD nueva que has creado y un par de pictogramas y yo le hecho un vistazo a ver dónde está "el pequeño inconveniente" para que no funcione ;)
Si lo pillo te lo explico.
Respecto a lo que me comentas del cuadro combinado sí es posible. Te explico una manera de hacerlo:
1. Creas una tabla auxiliar y la llamas, por ejemplo, "TTipoPeligro" (yo suelo identificar los objetos de Access con una inicial. Por eso ves la doble T en el nombre. Si fuera un formulario le pondría FTipoPeligo, y si fuera un informe RTipoPeligro -R por Report-. Pero evidentemente esto es una manía mía ;)
2. En esa tabla le pones un sólo campo que tenga por nombre, por ejemplo, "TPeligro", tipo texto. La guardas, la pones en vista hoja de datos y rellenas esa tabla con todos los tipos de peligro (o algunos si sólo quieres hacer una prueba, que escribir mucho cansa! ;)
3.- En tu formulario de trabajo (donde quieres los pictogramas) tienes que hacer lo siguiente:
3.1.- Borras el campo "Tipo de peligro"
- Creas un cuadro combinado. Te saldrá el asistente
- Le dices que quieres buscar los valores en una tabla o consulta
- Seleccionas la tabla TTipoPeligro
- Le añades el único campo que hay
- Lo ordenas como quieras (lo lógico sería ascendente)
- Le pones el ancho que creas oportuno (como en Excel, "arrastras" el borde derecho hasta conseguir la anchura deseada)
- Le dices que almacene el valor en el campo que corresponda al tipo de peligro (que no sé cómo lo habrás llamado, pero yo en el código lo he llamado [Tipo de peligro]
- Le pones como nombre "Tipo de peligro", por ejemplo. Este nombre que te pide es el que saldrá en la etiqueta asociada al control.
- Tendrás que revisar el orden de tabulación de los controles (te pones, en el formulario en vista diseño, sobre el combo que has creado, click con el botón derecho del ratón, orden de tabulación).
Y ya está. Ahora podrás ver todos los tipos de peligro que has dado de alta en la tabla TTipoPeligro. Si en un futuro te aparece uno nuevo tendrás que darlo de alta primero en esa tabla y ya lo tendrás preparado para que te salga. También tendrás que añadir un poco más de código para el pictograma correspondiente, pero por ahora lo dejamos aquí.
¡Ah! Mi mail es [email protected]
No te preocupes, que con esto de VBA lo raro es que salga a la primera. Ya me dirás cosas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas