Dicho esto os comento que voy a dividir este ejemplo en cuatro partes:
Para que la BD no nos “engorde” lo que vamos a guardar, realmente, es la ruta de la imagen,
dado que para los puntos 1 y 2 utilizaremos rutas absolutas; en los puntos 3 y 4 utilizaremos
rutas relativas.
Creo que la cosa esta clara (¿creo bien?), así que vamos a poner manos a la obra… ¡ya! Pero
antes…
Si estamos indicando que las imágenes están siempre en esa ruta, y de ahí no se van a mover,
estamos trabajando con rutas absolutas. Le estamos diciendo a Access que “búscame siempre
la imagen X que está en la carpeta <<Imagenes>>, que a su vez está en la carpeta
<<DatosRecopilados>>, que a su vez está en la unidad <<C>>”.
Ahora imaginemos que tenemos las imágenes en un pen. Enchufamos ese pen a nuestro PC y
obtenemos la ruta “F:\DatosRecopilados\Imagenes\”.
Si utilizamos rutas absolutas podríamos tener un problema, dado que si ese mismo pen lo
conectamos a otro PC y este nos asigna la letra de unidad “G”, para nuestro pen las imágenes
ya habrán cambiado su ruta por “G:\DatosRecopilados\Imagenes\”
Consecuencia: Access, que buscará en F (y ni siquiera sabe que existe G), no va a encontrar
las imágenes.
1
Visítame en http://neckkito.siliconproject.com.ar
Para soslayar los inconvenientes de este último caso
utilizaremos una ruta relativa, y relativa en relación a dónde
esté situado nuestro Access. Así pues, si tenemos nuestra
base de datos en la carpeta <<DatosRecopilados>> lo que
le diríamos a Access sería “busca la imagen X que está en la
carpeta <<Imagenes>>, que está en la misma carpeta
donde está la base de datos”.
NUESTRA TABLA
La tabla puede ser la que queramos, pero para almacenar la ruta de la imagen vamos a tener
que crear un campo de tipo texto o memo (texto largo) para guardar dicha ruta. Para este
ejemplo yo me he creado esta simple tabla:
PARTE 1
NUESTRO FORMULARIO
Sobre la anterior tabla nos creamos un formulario, que yo llamaré FDatos.
Nos pedirá el asistente que seleccionemos una imagen. Seleccionamos cualquiera que
tengamos a mano.
Sacamos las propiedades de ese control imagen → Formato → Imagen, y borramos el valor que
se haya establecido.
2
Visítame en http://neckkito.siliconproject.com.ar
Siguiendo en las propiedades de ese control imagen → Datos → Origen del control, ahí
seleccionamos en el desplegable el nombre del campo que contiene la ruta de la imagen; esto
es, [RutaImagen]
PARTE 2
¿Fácil, verdad?
3
Visítame en http://neckkito.siliconproject.com.ar
PARTE 3
¿Qué le faltará saber a Access? Pues lo único que le faltará saber, para cada registro, es el
nombre de la imagen y su extensión.
En este ejemplo he duplicado la tabla TDatos, llamándola TDatos2, con los mismos campos.
¿Qué hacemos en FDatos2? Pues seguimos los mismos pasos que explicábamos en la parte 1,
exceptuando el último. Es decir:
Ahora, como origen del control, no le podemos poner el campo [RutaImagen], dado que ahora
ese campos solo va a contener el nombre y extensión de la imagen. Entonces, ¿cómo lo
hacemos?
Vamos a dejar por el momento ese punto como incógnita pasemos a prepararnos el terreno
para poder solventar ese problemilla.
4
Visítame en http://neckkito.siliconproject.com.ar
CREÁNDONOS UN MÓDULO
Lo que haremos será insertar un módulo estándar 2, que
llamaremos mdlRutaImagenes. En ese módulo nos vamos a
crear una función personalizada que nos devolverá la ruta
relativa sólo hasta la carpeta imágenes.
…
Public Function fncRutaCarpetaImg() As String
Const nombreCarpetaImagenes As String = "Imagenes"
'Simplemente creamos la ruta relativa a la carpeta de imágenes, que será
'el valor que nos devolverá la función
fncRutaCarpetaImg = CurrentProject.Path & "\" & nombreCarpetaImagenes & "\"
End Function
…
Si os fijáis he creado la función usando una constante, cuyo valor es el que debéis cambiar si
vuestra carpeta de imágenes se llama de otra manera.
por
deberíais escribir
2 Para insertar un módulo estándar podemos abrir el editor de VB (ALT+F11) y nos vamos a Menú > Insertar > Módulo
5
Visítame en http://neckkito.siliconproject.com.ar
PARTE 4
ELIJO LA IMAGEN “A LO
PROFESIONAL”
Vamos a partir del formulario que nos hemos creado en la
parte 3, que a efectos de este ejemplo yo llamaré FDatos4
(por hacerlo cuadrar con la “parte 4”… je, je…).
…
Public Function fncBuscaImagen() As String
'Requiere registro de la referencia Microsoft Office x.y Object Library
With fDialog
.AllowMultiSelect = False
.ButtonName = "Seleccionar"
.Title = "Seleccionar la imagen"
.InitialFileName = Application.CurrentProject.Path
.InitialView = msoFileDialogViewDetails
.Filters.Clear
.Filters.Add "Archivos de imagen", "*.jpg; *.png; *.bmp"
.Filters.Add "Todos los archivos", "*.*"
If .Show = True Then
imagenSeleccionada = .SelectedItems(1)
Else
MsgBox "La selección de imagen se ha cancelado", vbExclamation, "CANCELADO"
End If
End With
Simplemente destacar que para poder coger sólo el nombre de la imagen más la extensión,
dado que la línea (imagenSeleccionada = .SelectedItems(1)) lo que hace es devolvernos la ruta
completa desde la letra de la unidad, utilizamos las variable “puntoCorte”, a través de la
función InStrRev(), para saber dónde está la última barra invertida y, desde ahí, la función
right() nos permite elegir, de esa ruta, la parte que nos interesa (que es, obviamente, el
nombre de la imagen y su extensión).
3 Para registrar una referencia debemos irnos, en el editor de VB, a Menú > Herramientas > Referencias... Se nos abrirá una
ventana mostrándonos todas las referencias disponibles. Buscamos la que nos interese, marcamos su check y aceptamos.
6
Visítame en http://neckkito.siliconproject.com.ar
puntoCorte = InStrRev(imagenSeleccionada, "\")
fncBuscaImagen = Right(imagenSeleccionada, Len(imagenSeleccionada) - puntoCorte)
fncBuscaImagen = imagenSeleccionada
…
Private Sub cmdBuscaImagen_Click()
Me.RutaImagen.Value = fncBuscaImagen
End Sub
…
Y listos!!!!!
Como nota añadir, simplemente, que si no nos gusta que se vea el nombre del archivo
podemos sacar las propiedades del campo [RutaImagen] → Pestaña formato → Visible, y
situamos esa propiedad en NO.
Un saludo, y…
¡suerte!
4 Para asignar un nombre a un control lo que debemos hacer es sacar las propiedades de ese control e irnos a la Pestaña > Otras >
Nombre. Ahí escribimos el nombre que queramos.
5 Para generar código debemos sacar las propiedades del control > Pestaña Eventos, y nos situamos en la parte “blanca” a la
derecha del evento que queremos programar. Veremos un pequeño botón de puntos suspensivos. Si hacemos clic sobre él nos
aparecerá una ventana que nos pedirá qué operación deseamos realizar. Le indicamos que queremos “generar código”.
7
Visítame en http://neckkito.siliconproject.com.ar