Ver imagen en formulario dependiente del valor del un campo

Estoy creando una base de datos para la gestión de muestras de un laboratorio.

En esta base hay un formulario donde veo el detalle de cada muestra solicitada. Uno de los datos que quiero que de este formulario son los pictogramas de seguridad de cada producto, el cual puede tener un maximo de 3 pictogramas.

Estos pictogramas son normalizados por el sistema GHS, y por tanto solo existen 9 posibilidades para mostrar.

Tengo una tabla llamada GHS donde he incrustado las 9 imagenes como objeto OLE cada una con su IDGHS

Asimismo tengo una tabla llamada MATRIZ donde se encuentran todos los productos, con campo clave IDProducto, y donde las columnas Picto1, Picto2 y Picto3 contienen el IDGHS correspondiente.

La idea es que cuando abra el formulario del detalle de la muestra, esta busque en la MATRIZ los Pictos1, 2 y 3 correspondientes al IDProducto que haya abierto, y a su vez cargue los Pictogramas correspondientes incrustados como OLE en la tabla GHS

Ahora mismo estoy cargando estos pictogramas siguiendo el mismo razonamiento pero mediante un hipervinculo en la tabla GHS.

Sin embargo, esta DB funcionará en red para toda la empresa, y no todos los ordenadores tienen los mismo accesos, por lo que la idea de poner las imágenes en alguna carpeta en red y que acceda a ella cada vez que se abre el formulario no acaba de convencerme. Puesto que tan solo son 9 archivos pequeños, creo que seguramente seria mejor incrustarlos en la base ya que no deberían "engordarla" demasiado.

No tengo experiencia previa trabajando con campos OLE y no se como debería relacionarlos para funcionar de esta manera.

Como siempre, se agradece toda la ayuda que facilitáis.

1 respuesta

Respuesta
3

Tu razonamiento tiene un error de base, y es que los campos OLE que contienen las imágenes no son directamente recuperables; es decir, no puedes directamente decir "quiero la imagen del campo OLE 1" y cargarla en otra parte. Para hacer eso tendrías que, primero, extraer la imagen del campo OLE, llevártela al disco duro y, de ahí, leerla para cargarla en tu formulario... un rollo, vamos, y, además, de compleja programación.

¿Qué te recomiendo yo? Pues que en el mismo directorio donde tengas la base de datos pongas, en una carpeta, directamente las imágenes con el nombre del identificador + extensión. Y, utilizando por programación la ruta relativa, cargarlos en controles de imagen.
Si sigues lo explicado en este ejemplo (http://bit.ly/2HDtCxP), en concreto en su parte 3, creo que no deberías tener ningún tipo de problema.
Saludos,

Neckkito (http://bit.ly/NckAccess)

Muchas gracias Neckkito!!

Desconocía esto. 

De esta manera seguiré como estaba haciéndolo hasta ahora, cargándolo desde un archivo externo.

Quería aprovechar para agradecerte la ayuda. Especialmente vuestro curso online de access. Lo he seguido de pe a pa, y aunque me quede todavía mucho por aprender, ha sido una introducción sobresaliente!

Siguiente: El curso VBA de tu web!

Por una de esas casualidades de la vida me han hecho una pregunta similar en el foro NkSvAccessolutions, y, al responderla, he mirado con mayor detenimiento el ejemplo del formulario evolution y me he dado cuenta de que la sistemática de ese ejemplo no es adecuada si tienes la base dividida (es decir, si tienes backend y frontend), que no sé si es tu caso.

De cualquier manera, y para no perder más tiempo, te pongo aquí una función que te devuelve la ruta donde se encuentra el backend. Simplemente hay que crear un módulo estándar del frontend, escribir la función y, cuando lo necesites, hacer una llamada a dicha función. En el mismo código está el "método de uso". Así que... ahí va:

'Uso de la función:
'La función devuelve el directorio donde se halla el backend. Por ejemplo, si tenemos
'la carpeta de imágenes en ese directorio, en una carpeta llamada "Imgs", la construcción
'de la ruta a la imagen a través de la variable rutaImgs (String) sería:
'rutaImgs = fncRutaBackEnd & "Imgs\"
Public Function fncRutaBackEnd() As String
    Dim tdfs As Object
    Dim tdf As DAO.TableDef
    Dim laConexion As String
    Dim numCaract As Integer
    Set tdfs = CurrentDb.TableDefs
    For Each tdf In tdfs
        laConexion = Nz(tdf.Connect)
        If laConexion = "" Then
            'No hago nada
        Else
            GoTo Sigo_calculando
        End If
    Next tdf
        fncRutaBackEnd = "No existen tablas vinculadas en esta base de datos"
        GoTo Salida
Sigo_calculando:
    laConexion = Mid(laConexion, InStr(laConexion, "=") + 1)
    numCaract = InStrRev(laConexion, "\")
    fncRutaBackEnd = Left(laConexion, numCaract)
Salida:
    Exit Function
End Function '-------------------------------------------------------------FIN FUNCTION

A quien pueda interesar ;-)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas