Soluciones integrales de e-learning para instituciones y empresas
Curiosidades, comentarios, opiniones para estar al día de las últimas novedades.
Prueba gratis cualquiera de nuestros cursos, sin compromiso y con todas las herramientas.
Recibirás información detallada de nuestras ofertas, noticias, etc.
Si crees que este Artículo le puede interesar a un amigo puedes enviarselo desde aquí.
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
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
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
Para informes y formularios con varios registros sugiero ver el siguiente enlace: http://support.microsoft.com/kb/210100/es
Ya sé que funciona. pero sólo funciona con formularios únicos. No funciona con formularios continuos para visualizar más de una foto
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.
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
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
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???
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.
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.
Echo a faltar un botón que abriera en un editor de fotos la miniatura del registro del formulario.
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
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.
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
Lo siento pero no consigo que funcione, y me interesa mucho, que tipo de campo de imagen se coloca?
ERES MU IDOLO LUIS ANGEL ESTO ES LO QUE BUSCABA PARA UNA APLICACION ERES UN AS GRACIAS POR TU CONOCIMIENTO
Me parace muy bueno tu articulo sobre todo entendible claro y presiso.
Me parace muy bueno tu articulo sobre todo entendible claro y presiso.
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.
perdón el lapsus: gracias a Gil Gambarte
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)
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
Buenísimo el artículo. Nos ha venido fenomenal tu explicación. Muchas gracias.
lo he probado con los formularios, pero lo q no consigue saber es como puedo hacer para q en un informe se vean las imagens de cada campo , ej. nombre de un empleado y su fotografia, o un listado de articulos con una foto de cada uno, si alguien lo ha conseguido le agradeceria mucho la ayuda, ya q estoy empezando en esto y me he quedado ahi atascado y menuda rabia, gracias
Estuvo genial la solución, en Informes si funcionó el codígo para Detalles
Muy bien.... muchas gracias.... tengo mucho tiempo buscando esto.... mi nombre es Ana Valenzuela y tengo algunos sistemas corriendo en access... y si lo necesitaba.... gracias
EXCELENTE EXPLICACION, GRACIAS
Gracias, me ha sido de gran utilidad, esto es justo lo que buscaba.
Gracias de nuevo
ayudenme estoy algun tiempo por realizar esto, no tengo conocimiento pero quiero realizarlo por necesidad,les rogaria paso a paso enviarme esta informacion
me podrian ayudar en este tema vincular imagenes a tablas de access,por favo paso a paso mi correo es orlynata@yahoo.es
escriba aquí su comentario...En primer lugar, decir que la solución para los formularios es fantástica y yo llevaba meses buscando algo parecido.
Pero no consigo que me funcione para formularios. alguien ha escrito un código que hay que escribir, pero no se en donde hay que ponerlo.
Si alguien pudiera ser un poco más claro para los torpes como yo, estaría muy agradecido.
kenomgfw pthxqvafo hopk pevcm cvxwuho ioql ewibjfl
Muchas gracias por tu ayuda!
es fantástico!!
...
Ayuda me sale la direccion de la foto pero no la foto
Muy buen artículo, es genial, a mí sí que me funciona. Muchas gracias
No he podido hacer funcionar el ejemplo que expones en la pagina, pero me he bajado el que proporcionas en el enlace, funciona y contiene mas de lo que pensaba.
Sin embargo me gustaria que leyese muchas mas fotos de manera que al mismo tiempo pudiese tener en pantalla 16 fotos de un catalogo leidas de un directorio mucho mas amplio.
Me dieron una base en access la cual tiene unos 1500 registros en una tabla con fotografias, el problema es que la foto no esta como dato bynario largo si no como msphoed3, y con vb6 no puedo visualizar la imagen, con access se visualiza de maravilla COMO LE AGO, HELP!!!
A mi me va bien, pero
como puedo hacer para que las fotos aparezcan en un informe???'
Me ha servido muchoas gracias pero tengo el mismo problema al hacer el informe que me llamen las imagen no me reconocen el codigo, he tratado de cambiar a load en vez de afterupdate pero no me ha resultado si alguien me pudiera ayudar con esto Gracias.
Si alguien pudiera ayudarme a solucionar este pequeño inconveniente, sería una maravilla.-... muchas gracias.
el artículo está muy bueno pero tengo el siguiente problema:
Tengo un formulario de jugadores donde salen 7 jugadores por equipo, pero me sale la muisma foto para todos,,.... alguno sabe porque peude pasar?? que debo hacer?
Tal y como esta definido, el código asociado al evento AfterUpdate, solo funciona cuando se cambia el contenido del campo texto que contiene la ruta a la foto (al menos es lo que me pasa y lo lógico puesto que ese evento solo se dispara al actualizar el campo en la bd).
Lo adecuado sería hacerlo con el evento form_current.
en realidad agradezco tu aportacion pues me ha sido muy util, he buscado una herramienta o un codigo como este, gracias, Xalapa, Ver.
Funciona y muy bien. Me ha costado un poco porque no se nada de VB pero con ayuditas de aquí y de allá lo he conseguido (ni yo me lo creo). Aún está por mejorar que se queda una imagen en el campo foto y engorda un poco la BD (poquisimo) y tengo que volver a introducir el (ninguna) en el campo de RutaFoto, pero no afecta para ver los registros, es solo en Diseño. Ahora voy a intentar lo del informe con las indicaciones que habéis dado porque, efectivamente, no hay posibilidad de hacer nada porque no hay nada en propiedades de evento. Me habéis solucionado la B de D y no se como agradeceroslo. A los que no lo habéis conseguido: copiad los códigos de propiedades del formulario y los módulos. ¡¡¡suerte!!!
Funciona perfectamente!!!, sin embargo, habría alguna forma de eliminar el molesto cuadro de proceso de importación de la imagen?, me aparece cada vez que cambio de registro y se hace muy pesado...
Mil gracias por el truco!!!
Despues de probarlo mucho no funciona, ocurre lo que dicen el el primer comentario.
En informes se ha de introducir este codigo
-----------------------------------------------------------------
Private Sub Detalle_Format(Cancel As Integer, FormatCount As Integer)
If Not IsNull(IdPhoto1) Then
Me.Imagen1.Picture = IdPhoto1
Else
Me.Imagen1.Picture = ""
End If
End Sub
donde IdPhoto1 es el campo donde esta el path de la fotografia
En primer lugar agradecer la información del articulo pues me ha resultado muy útil.
En los formularios todo funciona perfectamente pero en los informes no soy capaz de hacer que aparezcan las imágenes vinculadas, pues el campo "RutaFoto" no permite ningún tipo de evento. Necesito que "Despues de actualizar" permita ejecutar el código que muestra la imagen. ¿Alguien puede ayudarme?
Gracias.
Llevo intentando eso hace "siglos" y no lo consigo. ¿podríais explicarlo paso a paso para los torpes?
Gracias
Realmente exelente. Me salvaste la vida. Tenemos que generar una base de datos de unos 6000 registros con 2 imágenes por registro. Como imaginarás, es imposible hacerlo con objetos OLE incrustados con el filtro del Photo Editor (como lo propone Microsoft en su KB).
Muy bueno, sigan así.
Copyright 2008© ADRInfor S.L. Logroño | Tel: 941250116 Fax: 941236805 | Email | Politica de Privacidad | Aviso Legal