Tu portal de
formación online
United States

Infórmate
Inicio » Artículos » Ofimática » Ofimática » Vincular imágenes a tablas de Access sin "engordar" la base de datos

Suscríbete al boletín

Recibirás información detallada de nuestras ofertas, noticias, etc.

Suscríbete al boletín

Enviar a un amigo

Si crees que este Artículo le puede interesar a un amigo puedes enviarselo desde aquí.

Enviar a un amigo

Descargar archivo Adjunto Vincular imágenes a tablas de Access sin "engordar" la base de datos

06-04-2006 Luis Angel Gil Gambarte

INTRODUCIR EN UNA TABLA EL VÍNCULO A UN ARCHIVO DE IMAGEN DE FORMA QUE NO “ENGORDE” EL TAMAÑO DE NUESTRA BASE DE DATOS

 

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.


   

Luis Angel Gil Gambarte

  

vvv

 

* ¿Necesitas contenido? Puedes usar este artí­culo en tu web, o en tu correo. El único requisito es incluir la siguiente lí­nea: "Artí­culo elaborado por Luis Angel Gil Gambarte e incluir un enlace a nuestra web Adrformación"

 

 

man01-04-2014

Estoy haciendo una pequeña BD, y deseo vincular cada registro con una foto, sin embargo no he podido realizar el proceso.

Se creo el campo imagen en la tabla (texto), luego inserte un marco de objeto dependiente, en eventos Al Actualizar, le pegue el código modificando lo necesario. Al momento de ejecutar el formulario me dice que el objeto ole esta vacio.

Leo en el articulo que se adjunta el ejemplo pero lo he buscado y no lo encuentro.

Javier03-03-2014

Me ha funcionado correctamente tu codigo, podrías ponerme tambien el codigo necesario para que pulsando un boton indique la ruta del explorer donde se encuentra la foto es decir, que al pulsar un boton llamado foto, nos abra el explorador de windows, y al llegar al .jpg o.bmp correspondiente, esta ruta se copie en el campo Ruta Foto quedando algo asi como C:\Users\Recepción\Pictures\Aviary Photos\peroo.jpg

valentí05-01-2014

a mi me ha funcionado correctamente. Ahora bien, me gustaría colgar la BD en INternet. ¿Cómo podría vincular las fotos?

Rosa Alonso24-11-2013

Hola. he seguido todos los pasos, pero me da un error:
file.lpstrInitialDir = ObjForm.RutaOrigen 'Environ$(DirectIni).

podéis ayudarme por favor?.

Oxlo09-01-2013

Muy bueno el artículo y me funciona a la perfección. Gracias por el aporte.
No sé mucho de vba y me gustaría, en este ejemplo, que se pudiera comprobar si el archivo de imagen existe en la carpeta; en caso de que no exista, que devuelva un mensaje "el archivo de imagen no existe" (o algo así). Si escribirlo se confunde una letra devuelve error.
El código que tengo es este:

Private Sub RutaFoto_AfterUpdate()
'Asignación de la ruta al control de imagen llamado
'foto pero como imagen -Picture-
If Not IsNull(rutafoto) Then
foto.Picture = Texto51 + rutafoto
Else
foto.Picture = ""
End If
End Sub

Donde Texto 51 es un cuadro de texto oculto con la ruta de la carpeta de las imágenes y rutafoto es el nombre(y extensión) de la imagen.

Gracias de antemano.

Carlangas19-06-2012

Perdon, pero para el caso de INFORMES, en la propiedades del cuadro de texto RutaFoto no existe ningun Evento posible, en la pestaña EVENTOS, donde introducir el código VBA que indicas ¿?, ni ‘Despues de Actualizar’ ni ningún otro.

No así sucede en el caso de FORMULARIOS donde el código funciona sin problemas. Gracias.

Francisco Javier26-04-2012

Tengo la base del ejemplo y las fotos las veo de lujo en mi Formulario, pero no puedo verlas en un Informe. Como no soy ducho en la materia, sencillamente he copiado los campos del Formulario en un Informe, así como el código VBA ¿Me pueden ayudar? Gracias,

Soria09-02-2012

JOKER: necesitas checar o copiar las macros y eventos que usan los botones de "Buscar Ruta" y "Eliminar Ruta" y modificarlos con los nombres de los campos de tu base de datos

Soria09-02-2012

Alguien me puede decir como puedo abrir esa imagen al darle clic?

jocker05-02-2012

Buenos días,

He intentado hacer funcionar tu aplicación, y no lo consigo. Desde tu base de datos me funciona, pero desde la que tengo hecho yo no. Lo que he hecho es importar mi base de datos desde la tuya para ver si así traga, y no hay manera. He copiado en mi formulario tus botones, asignando las acciones correspondientes y copiando el código que tienes creado pero nada..Al pulsar el botón "buscar ruta" me da error en el código en esta linea:
file.lpstrInitialDir = ObjForm.RutaInicial 'Environ$(DirectIni)
¿me podrías ayudar??

Gracias

Edwin 18-03-2010

Buenas Noches. bueno y como hago para agregar un boton, que me despliegue el cuadro de dialogo de office para abrir y seleccionar la foto que necesito y agregarla.

En informes
ManoloMB16-02-2010

os lo paso con mas detalle:

Private Sub Detalle_Format(Cancel As Integer, FormatCount As Integer)
Dim strRutaFoto As String

strRutaFoto = Nz(Me.Imagen, "")
Me.Image0.Picture = LoadPicture(strRutaFoto)

End Sub

en donde Image0 es un control activeX

ManoloMB16-02-2010

Funciona sin problemas, Para que no aparezca imagen si no existe podeis utilizar un control activex de imagen.

Para informes
Fran28-01-2010

Antes que nada dar las gracias a Luis Angel porque con su ayuda y ejemplo me ha servido y mucho para un trabajo.
para los que no lo lograron en informes Añadir el codigo en Detalle (al imprimir). El problema es cuando no hay fotos en algún registro (entonces se repite la foto anterior) y que tarda un poco cuando hay muchos registros. Yo lo he adaptado un poco y lo he hecho para que la ruta sea relativa a donde tengas la base de datos y el codigo a añadir en informes sería algo así como:
Private Sub Detalle_Print(Cancel As Integer, PrintCount As Integer)
If Not Me.Rutafoto= "" Then
Me.PlanoI.Picture = Application.CurrentProject.Path & "\imagenes\" & Me.Rutafoto
Else
Me.PlanoI.Picture = Application.CurrentProject.Path & "\imagenes\SINIMAGEN.JPG"
End If
End Sub

Juan Carlos13-01-2010

Esto para los que no lograron visualizar, utilicen access 2003. A mi me funcionó perfecto la parte de los formularios.

LuisR.06-01-2010

No sirve... debe haber un error en el comando o en el evento donde se inserta... Funciona a medias, no se actualiza correctamente la foto conforme se pasa de un registro a otro...

FERNANDO14-10-2009

buenas tardes, la explicación me ha venido de miedo y he conseguido que funcione para los formularios, pero necesito hacer un listado y unas etiquetas donde deben de figurar las fotos que salen vinculadas en el formulario y no soy capaz, ¿Podrias hecharme una mano?, Gracias
te dejo mi correo por si lo consideras necesario fernando.c@vieco.es

Yeni06-07-2009

Hola que tal, esta buenisimo este ejemplo, gracias por la ayuda, sin embargo no he podido hacerlo dentro del INFORME, **** ayudarme, este es mi correo shalom13c@hotmail.com gracias nuevamente.

Camila02-07-2009

Hola que tal me sirvio bastante esta información y lo pude aplicar en lo que necesitaba, gracias.

vilma21-05-2009

PUES GRACIAS POR TU INFORMACION PERO A MI NO ME SIRVIO.

JESUS04-04-2009

Pues después de muchas horas con el tema, resulta que access 2007 tiene un nuevo tipo de campo Datos Adjuntos, que para los paletos como yo nos permite hacer todo esto. Snif

JESUS04-04-2009

Hola bancarrota: No sé como pasarte el archivo, pero si te descargas la base de Gil Gambarte podrás empezar a adaptarla a tu base. Es lo que he hecho yo y no tengo mucha idea

bancarota02-04-2009

Hola, a todos me podrían pasar la aplicación
Saludos

JESUS28-03-2009

Pues muchas gracias también a Norberto, pues al introducir su código, adaptado, en mi informe, consigo imprimir las fotos.

JESUS28-03-2009

Muchas gracias Luis, como soy un poco paleto (lo había intentado con la ayuda de access), he descargado tu base de datos, y ahora intentaré adaptarla a la mía......espero que me funcione.

javier11-03-2009

Muchas gracias Luis por esta aportación, pero debo estar haciendo algo mal ya que al poner la ruta de la foto me sale la misma foto en todos los registros. Puedes aydarme? jfpototo@gmail.com
Gracias

Luciano13-02-2009

Ha sido fantástico. Muchísimas gracias Luis Angel.

Maycold Duarte03-09-2008

Buenas Luis, ya lo he probado y esta buenisimo pero sabes no conozco mucho de la programacion en acces y cuando le doy Vista Preliminar me aparece una sola foto para todos los registros, sabes como solucionar esto y si no es mucho pedir podrias hacer la modificacion al archivo que tienes adjunto en la web para descargarlo mi e-mail es mduarte@amairca.com puedes visitar mi website www.amairca.com para que veas un poco de lo que trabajo y necesito hacer el catalogo del inventario. Esperando tu comentarion Muchas Gracias

Jaime16-04-2008

Me funciona en formularios pero no logro hacerlo en los informes. El código es el siguiente:
Private Sub Detalle_Format(Cancel As Integer, FormatCount As Integer)
Dim strRutaFoto As String
If IsNull(Me.foto) Or Me.foto = "" Then Exit Sub
strRutaFoto = Me.foto
Me.Imagen16.Picture = strRutaFoto
End Sub
Me indique que access no puede encontrar el campo foto (es el campo de la tabla en el cual se guarda la dirección y el nombre de la foto).
El informe esta basado en una consulta

Vincular imágenes a tablas de Access sin "engordar" la base de datos
Carlos Martínez20-11-2007

Para informes y formularios con varios registros sugiero ver el siguiente enlace: http://support.microsoft.com/kb/210100/es

Vincular imágenes a tablas de Access sin "engordar" la base de datos
Miguel Angel15-11-2007

Ya sé que funciona. pero sólo funciona con formularios únicos. No funciona con formularios continuos para visualizar más de una foto

Vincular imágenes a tablas de Access sin "engordar" la base de datos
jaimecasas@terra.es14-11-2007

Muy interesante tu artículo, pero te agradecería para uel poco experto como yo, me clarificases un poco esta expresion del texto:

Private Sub RutaFoto_AfterUpdate()

If Not IsNull(Me.RutaFoto) Then etc etc etc

¿Que se considera imagen cliente y picture? La rutafoto ya la entiendo y donde se coloca en access la formula
Gracias mil.

Vincular imágenes a tablas de Access sin "engordar" la base de datos
Iñigo04-10-2007

Ya lo he puesto en marcha para informes y formularios. Para informes individuales sin problemas pero cuando se incluyen más fotos, unas 10, comienza a tardar mucho en generarse el informe y no digo ya imprimir. ¿Alguna idea?
Salu2

Vincular imágenes a tablas de Access sin "engordar" la base de datos
maju01-10-2007

Bien pensado Luís, es la perfecta solución para trabajar con imágenes sin engordar la BD.
Muy práctica y fácil de aplicar.
saludos

Vincular imágenes a tablas de Access sin "engordar" la base de datos
konquemus19-09-2007

Despues del esfuerzo y la satisfacción de haberlo conseguido, me encuentro con que voy de cabeza, y sin posibilidad de freno, al ACCESS 2007 ¿¿¿¿alguien sabe que pasará con nuestras estupendas BD con fotos vinculadas del Access 2003???

Vincular imágenes a tablas de Access sin "engordar" la base de datos
antperlop15-08-2007

Esto vale para BMP pero cuando intento poner un jpg da este mensaje:
Microsoft Office Access no admite el formato de este archivo..... (la ruta etc...) o el archivo es demasiado grande, intente convertirlo a formato BMP o GIF.

Vincular imágenes a tablas de Access sin "engordar" la base de datos
Mariano07-08-2007

Estupendo, si ademas le añadimos al codigo la parte de
Dim P_Ruta As String

P_Ruta = Application.CurrentProject.Path
P_Ruta = P_Ruta & "\" & Me.Nombre & ".jpg"

teniendo las fotos en la misma ruta que la Base de Datos se muestran en el formulario e incluso en un informe.

Vincular imágenes a tablas de Access sin "engordar" la base de datos
sankade05-08-2007

Echo a faltar un botón que abriera en un editor de fotos la miniatura del registro del formulario.

Vincular imágenes a tablas de Access sin "engordar" la base de datos
xaviercuerpo24-07-2007

Felicidades Luis Angel. Es genial. Funciona a la perfección y es una idea muy imaginativa. Está muy bien explicado paso por paso. Muchas gracias.
xaviercuerpo@hotmail.com

Vincular imágenes a tablas de Access sin "engordar" la base de datos
Gutti18-07-2007

Muy interesante esta aplicación pero no consigo ponerlo en marcha......... no sé si se podría explicar de un modo más detallado para toda aquella gente (parece que somos más de uno) que se nos resiste..... Gracias.

Vincular imágenes a tablas de Access sin "engordar" la base de datos
shishio450713-07-2007

muchas gracias por el articulo, yo tengo de hace un buen tiempo una base que adjunta las fotos al formulario de la misma forma lo que quisiera hacer es que las rutas fueran relativas asi podria quemar la base de datos en un cd y las fotos se mirarian de igual manera, si alguien me pudiera ayudar se los agradeceria mucho

Vincular imágenes a tablas de Access sin "engordar" la base de datos
ELJOSESOY10-07-2007

Lo siento pero no consigo que funcione, y me interesa mucho, que tipo de campo de imagen se coloca?

Vincular imágenes a tablas de Access sin "engordar" la base de datos
SERGIO GONZALEZ07-07-2007

ERES MU IDOLO LUIS ANGEL ESTO ES LO QUE BUSCABA PARA UNA APLICACION ERES UN AS GRACIAS POR TU CONOCIMIENTO

Vincular imágenes a tablas de Access sin "engordar" la base de datos
Uziel Chavez Huaman09-05-2007

Me parace muy bueno tu articulo sobre todo entendible claro y presiso.

Vincular imágenes a tablas de Access sin "engordar" la base de datos
Uziel Chavez Huaman09-05-2007

Me parace muy bueno tu articulo sobre todo entendible claro y presiso.

Vincular imágenes a tablas de Access sin "engordar" la base de datos
Jose06-04-2007

Después de darle vueltas al final lo conseguí. Ahora lo queno consigo es que me imprima la imagen del formulario. ¿es aguna de las propiedades del control de imagen?, cuando lo paso a pdf y lño imprimo no hay problema, pero drectamente a la impresora la imagen no aparece. Gracias y saludos.

Vincular imágenes a tablas de Access sin "engordar" la base de datos
konquemus26-03-2007

perdón el lapsus: gracias a Gil Gambarte

Vincular imágenes a tablas de Access sin "engordar" la base de datos
konquemus26-03-2007

conseguí tambien el informe con fotos. Os animo a seguir, es latosillo pero el esfuerzo merece la pena. Os aseguro que funciona. (Gracias a G.Lombarte)

RE: Vincular imágenes a tablas de Access sin "engordar" la base de datos
Patty13-03-2007

Me parece muy interesante sobre todo que a muchos ya les funcionó, pero a mi no me sale... cuando le pongo (ninguno) en las propiedades de formato de la imagen me marca error y no me deja continuar... A ver si alguien pudiera ayudarme porque estoy atrasada en la impresión de credenciales de socios de la empresa donde trabajo porque voy insertando una por una la foto y las mando imprimir también de una por una, si lo logro se me agilizaría muchísimo el trabajo... Gracias

RE: Vincular imágenes a tablas de Access sin "engordar" la base de datos
Sara y Olga03-03-2007

Buenísimo el artículo. Nos ha venido fenomenal tu explicación. Muchas gracias.

* Los comentarios son propiedad de quien los envió, adrformación no se hace responsable de su contenido.