Ruta relativa de imágenes en Access

Hace años que empecé a usar Access, y aunque aún no sé de código, me manejo con soltura en otras cuestiones del programa (siempre con ayuda). Tengo numerosas bases de datos creadas con este software. Ahora que tengo más tiempo he vuelto a retomar mi última base, la cual es una galería de fotos. Tengo creados los campos necesarios, las relaciones, etc.

Como insertaré miles de fotos, he añadido una código para ello, pero aunque no salta error alguno, el caso es que cuando intento añadir una foto, no aparece en el registro, sino que éste campo se queda vacío.

La intención es que sea una ruta relativa porque suelo cambiar de unidad porque me quedo sin espacio. Después de varios años, he intentado retomarla pero no funciona. En mi ordenador tengo las imágenes organizadas de esta manera:

C:\MIS IMÁGENES\CARPETA 1 (tb carpeta 2, carpeta 3, etc. También en este nivel he puesto la base de datos)\CATEGORÍA 1 (tb categoría 2, 3, etc.), ...

C:

- MIS IMÁGENES (y aquí también la base de datos):

      -- CARPETA 1:

          --- CATEGORÍA 1:

               ---- SUBCARPETA 1 (aquí las fotos)

               ---- SUBCARPETA 2

               ---- ...

          --- CATEGORIA 2...

      -- CARPETA 2...

Llevo días intentando averiguar por qué ahora no me funciona cuando sí hace un tiempo... Gracias


Private Sub Form_AfterUpdate()

Form.Refresh
On Error Resume Next
showErrorMessage
showImageFrame
If (IsRelative(Me!ImagePath) = True) Then
Me![ImageFrame].Picture = path & Me![ImagePath]
Else
Me![ImageFrame].Picture = Me![ImagePath]
End If
End Sub


Private Sub Form_Current()
Dim res As Boolean
Dim fName As String

On Error Resume Next

ErrorMsg.Visible = False
If Not IsNull(Me![Foto]) Then

Call ImagePath_AfterUpdate

showImageFrame
Me.PaintPalette = Me![ImageFrame].ObjectPalette
If Dir(path & Me.Foto) = "" Then
hideImageFrame
ErrorMsg.Caption = "No se encuentra la imagen"
ErrorMsg.Visible = True
End If
Else
hideImageFrame
ErrorMsg.Caption = "Hacer clic en Obtener para agregar o cambiar imagen "
ErrorMsg.Visible = True
End If

End Sub


Respuesta
2

Vamos a suponer que tienes una tabla Alumnos con Idaumno, nombre,... y un campo Ruta, En el formulario, si quieres puedes poner el cuadro de texto Ruta como oculto. Añádele un control imagn que supondremos que se llama imagen8. En el editor de VB pega esta función

Public Function buscaruta() As String
Dim fDialog As Office.FileDialog
Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
With fDialog
.AllowMultiSelect = False
.ButtonName = "Seleccionar"
.Title = "Seleccionar la ruta"
.InitialFileName = Application.CurrentProject.Path
.InitialView = msoFileDialogViewDetails
.Filters.Clear
.Filters.Add "All Files", "*.*"
If .Show = True Then
buscaruta = .SelectedItems(1)
Else
MsgBox "Ha pulsado el botón <Cancelar>."
End If
End With
End Function

algún evento del formulario, por ejemplo, al hacer clic de un botón, pon

Me.Ruta.Value = buscaruta
Me.Imagen8.Picture = Ruta

Y n el evento Al activar el registro

if not isnull([ruta]) then

me.imagen8.picture=ruta

end if

Me explico, cundo pulsas el botón, se abre un buscador para que localices la imagen. Al aceptar te inserta la ruta en el campo y en el control imagen te la muestra. Luego cuando te desplaces por lo registros, si el campo ruta no es nulo, te muestra la imagen.

Acuérdate de activar la referencia Microsoft office xx. object library

El xx depende de la versión de Office que tengas instalada.

En primer lugar, mil gracias por tu tiempo! 

Respecto a lo que me indicas, ya tengo un módulo para buscar la imagen, y me va perfecto:


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

Sub test()
Debug.Print fncRutaCarpetaImg
End Sub


En cuanto al código que me indicas, no va. No entiendo de códigos pero intento entender de qué va, y no sólo copio y pego. Pensé que todos debían depender de un evento, pero me has dicho que lo inserte directamente en el editor. Me dices también que añada otro botón para seleccionar una imagen (aunque ya te comenté que tenía otro, he hecho lo que me has pedido para validar tu código), pero no estoy segura si Imagen8, en tu ejemplo, es el botón (en mi caso sería Comando128). No obstante, lo he probado pero nada :(

Te comento, la librería la tengo activada ;)

El caso es que mi código me funcionaba y ahora no sé por qué (llevo sin usarlo 1 año, y desde entonces he formateado, cambiadas las rutas, etc).

En la tabla (añado las fotos desde el formulario), en el campo foto (texto) sí aparece el nombre y extensión de la foto elegida (sólo el nombre, no sé si es correcto, porque no aparece la ruta, no sé si es porque es relativa).

En el formulario (aparte de los botones agregar imagen/eliminar imagen), tengo un campo Imagen (sin origen de control) denominado ImageFrame (probablemente el ejemplo lo haya cogido de Northwind). Pero no hay referencia al campo foto (y eso me ha mosqueado, así que he añadido este campo no visible y detrás de ImageFrame) para que, junto con el código (no sé cómo lo voy a hacer) me pueda añadir la imagen. No sé por qué, pero recuerdo algo como que tenía este campo ahí, y desapareció... pero es solo una ilusión jejeje

Un diseño simple del formulario

El control imagen es el cuadrado de la derecha y en sus propiedades-otras-nombre tiene lo de imagen8

El editor de VB

Al abrir el formulario y pulsar el botón

En este caso he seleccionado la que tiene un reborde azul y pulso abrir

Y me queda como

Hola de nuevo,

Lo que me explicaste en un primer momento lo entendí y así lo hice, tal como muestras en tus imágenes posteriores. No obstante, salta un error cuando pulso en el Comando5 (mi botón, que por cierto, en tu primera exposición me dices que añada el código en cualquier evento del formulario, pero yo he entendido que había que añadírselo al evento "hacer clic" de un botón) y salta Error de compilación. No se ha definido la variable. No entiendo qué quiere decir. He puesto tu código, lo que no sé es de dónde proviene "buscaruta".

Gracias por todo tu tiempo

Disculpa, pero sigo sin conseguirlo.

Buscaruta es una función pública que declaro yo. Lo mismo que si hiciera

Dim a as string( en este caso es una variable, pero es lo mismo)

Y lo de ponerlo en cualquier evento, es porque podrías ponerlo, en el evento Al hacer doble clic en el cuadro de texto, o en el evento Al recibir el enfoque de otro, o en el evento Después de actualizar de lo que sea.

¿Porque te da error no puedo decirlo al no saber que has puesto, pero si está tal como lo hice yo, te tiene que funcionar, lo mismo que me funciona a mí.

1 respuesta más de otro experto

Respuesta

Everything is quite transparent, with a very detailed explanation of the difficulties. It is unquestionably useful knowledge. ¿Is my website extremely profitable? Please visit here: nytimes crossword

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas