6 de Abril de 2006
Vincular imágenes a tablas de Access sin "engordar" la base de datos
Autoría: Luis Angel Gil Gambarte
Cuando en una tabla de una base de datos de Access queremos insertar imágenes correspondientes a cada uno de los registros (por ejemplo las fotos de los empleados en una tabla de Empleados o bien las fotos de cada uno de los artículos en una gran tabla de Artículos –pensemos en miles de artículos-), se define en la estructura de la tabla un campo de tipo Objeto OLE para albergar dichas imágenes.
Si cada archivo de imagen ocupa unos cuantos bytes o kbytes (dependiendo de la resolución y calidad de la imagen), el aumento de tamaño de la tabla y en consecuencia de la base de datos es desproporcionada.
¿Cómo solventar esto?
Si en la tabla de clientes definiéramos (como ejemplo en esta estructura mínima) los siguientes campos:
CAMPO |
TIPO |
TAMAÑO |
IdCliente |
Autonumérico (por ejemplo) |
Entero largo |
Nombre |
Texto |
50 |
Foto |
Objeto OLE |
|
Nos “engordaría” la tabla a medida que introdujéramos las imágenes en ese campo FOTO.
Lo que debemos hacer es definir la tabla con esta estructura:
CAMPO |
TIPO |
TAMAÑO |
IdCliente |
Autonumérico (por ejemplo) |
Entero largo |
Nombre |
Texto |
50 |
RutaFoto |
Texto |
50 |
En este campo RutaFoto introduciremos la ruta hacia el archivo de imagen que se encontrará en nuestro disco duro o bien ubicado en una ruta de una unidad de red.
La ruta será de la forma: C:\FOTOS\MARÍA.JPG
Y sería gestionada como un contenido de texto.
Pero, ¿Cómo hacer para que en un formulario o bien en un informe de MS Access veamos, no la ruta de texto que apunta a nuestra imagen sino la imagen dentro de un control de tipo imagen insertado en el formulario o informe?
PARA FORMULARIOS
Insertaremos en el formulario el campo RutaFoto y un control desde la barra de herramientas de la pantalla de diseño de formularios de Imagen. Le asociamos cualquier imagen que tengamos en C: (o bien, después de insertada una imagen, desde sus propiedades de Formato especificamos Imagen = (ninguna), modo de cambiar el tamaño = Extender y le adjudicamos, en nuestro ejemplo el nombre ImagenCliente.
Si ese control de Imagen lo llamamos, por ejemplo, ImagenCliente, deberemos conseguir visualizar en él la imagen que se corresponde con la ruta de texto introducida en el campo RutaFoto.
Para ello, por ejemplo insertaremos en las propiedades del campo RutaFoto, bajo el evento de Después de Actualizar, el siguiente código VBA (Visual Basic Aplications):
Private Sub RutaFoto_AfterUpdate()
If Not IsNull(Me.RutaFoto) Then
Me.ImagenCliente.Picture = Me.RutaFoto
Else
Me.ImagenCliente.Picture = ""
End If
End Sub
Así, llevaremos y por lo tanto visualizaremos en el control de la imagen (ImagenCliente), la imagen (Picture) que corresponde a la ruta introducida en el campo RutaFoto.
De este modo, el archivo de la foto (el de todas las fotos) reside en el disco duro fuera de ningún campo de nuestra tabla de, por ejemplo Clientes.
Sería factible ejecutar este “trozo” de código bajo cualquier otro evento más idóneo bajo nuestro punto de vista (o quizás creando un botón de comando y asociando a su “clic” ese código).
Lo explicado para los formularios, es idéntico para ver las imágenes en un informe.
NOTA: Teclear e introducir la ruta hacia cada archivo de imagen, es más engorroso y también solucionable mediante código, por eso adjunto una base de datos llamada Fotos Vinculadas.mdb para que indagando en los eventos de los controles del formulario Clientes, en el módulo VBA y en la macro puedas conocer o aplicar esto a nuestra base de datos. Observemos como lo único que se guarda en la tabla de clientes es la ruta y no la imagen.
¿Te interesa aprender sobre Access? Empieza a usar Access desde cero o amplía tus conocimientos de Access y conviértete en un experto.