Insertar imagen en Access 2007 mediante formulario

Tengo una base de datos con una tabla que guarda registros que corresponden a datos de personas, uno de los campos tiene el tipo de dato "Datos Adjuntos", ahí guardo el path que corresponde a la foto de la persona. Luego en un formulario tengo un control imagen con la propiedad "origen del control" que indica el nombre del campo en el que guardo la imagen. Hasta ahí todo bien, el formulario me muestra la imagen que corresponde según el registro en el que me posiciono. Lo que necesito es insertar un botón que me permita adjuntar la imagen si es que no existe o cambiarla si es que es incorrecta, supongo que no debe ser algo muy complicado.

1 Respuesta

Respuesta
1

Supongamos que en la tabla tienes un campo llamado ruta. Y supongamos que en el formulario tienes un cuadro de texto Ruta dependiente del campo de la tabla.

Abre el formulario en vista diseño y pulsa el botón de código y pega

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

Y en el botón Localizaruta, en sus propiedades-eventos-al hacer clic

Private Sub localizaruta_Click()
    Dim localiza As String
    localiza = buscaruta()
    If IsNull(localiza) Or localiza = "" Then
        Exit Sub
    Else
        Me.Ruta.Value = localiza
    End If
End Sub

Asi cuando pulses el botón, se abrirá "un explorador para que localices el archivo. Cuando pulses aceptar, en el cuadro de texto Ruta, te pondrá la misma.

Gracias por tu respuesta, hay cosas que evidentemente no estoy haciendo bien y ocurren los siguientes errores:

  • Cuando presiono el botón me dice error de compilación: No se ha definido el tipo definido por el usuario y en el código pinta la línea fDialog As Office.FileDialog
  • En el cuadro de texto si hago click también me tira un error que dice se esperaba End Sub y pinta la línea Private Sub Texto49_Click

No se si necesitas algún otro dato, en realidad el botón me tiene que permitir agregar o cambiar el path que está en el campo que en mi tabla se llama "Foto"; recordá que el tipo de dato de ese campo es "Datos Adjuntos."

Muchas gracias por la buena onda y la ayuda, me va a servir mucho.

Ya lo pude resolver, solo tenía que hacer referencia a una librería que no tenía habilitada (Office 12 Object Library) y cambíe el tipo de dato del campo, en lugar de datos adjuntos puse texto y todo funciona a la perfección, agradezco mucho tu ayuda porque me permitió poder investigar y aprender. Saludos.

El problema de los Datos Adjuntos es que sólo los puedes abrir "desde su programa".

Efectivamente, hay que activar Microsoft Office 16 object Library. Es que tengo el office 16, no se cual es el del 2007.

De todas formas, yo te aconsejaría que si tienes una carpeta para las fotos, por ejemplo

C:|users\,,,,\albumfotos

En la tabla crea un campo llamado Foto(original eh) y ahí pongas en cada registro un nombre, Grupo, Reunión amigos, castillo, etc. Sin extension

Luego en el formulario pones ese campo, y creas un control Imagen, peros sin ponerle Origen del control y llamarle Imagenfoto.

En las propiedades del formulario, en el evento al activar registro le pones

If Not IsNull(Me.Foto) Then

   Me.Imagenfoto.Picture = "c:\users\...\documents\albumfotos\" & [Foto] & ".jpg"

 Else

    Me.Imagenfoto.Picture = ""

End If

Así cuando se abra el registro, el control imagen te mostrará la foto que tienes en el control foto y con la ruta que le has puesto en el código.

Me sirvió mucho toda esta información. Ahora tengo otra consulta respecto de este tema, necesitaría saber si hay alguna forma de que al abrir el explorador que busca la foto, la dirección donde va a buscar la foto sea solo una y que no pueda navegar hacia otras carpeta, por ej que busque la foto en "c:\Fotos" y que no pueda ir a ningún otro directorio. Logré que busque en una carpeta cambiando la linea InitialFileName = application.CurrentProject.Path, el único inconveniente es que no puedo evitar que el usuario pueda cambiar de directorio. Espero haber sido claro.

Si has puesto lo del principio, te diré honestamente que no lo sé, no me lo había planteado nunca, pero puedes hacer una cosa, guardar todas las fotos en una única carpeta y cambiar la línea de código

.Filters.Add "All Files", "*.*"

Por esta

. Filters.Add "All files", "*.jpg"

Así cuando abra el "explorador" solo puede encontrar fotos en esa única carpeta.

Si lo que has puesto es la segunda, la de

Me.imagenfoto...

Te diré que la única forma de que no te puedan trastear nada es convertirla a formato accde, que es el antiguo mde, es decir, se borra el código y no te deja abrir los formularios, etc. en vista diseño. Para eso, con la base de datos abierta pulsa Archivo-Guardar como

Otra cosa no se me ocurre.

Gracias pero no es eso lo que busco, con lo que me pusiste lo que hace es buscar archivos con extensión .JPG pero lo que yo busco es que los archivos solo pueda buscarlos en una única carpeta; a ver si me explico mejor... yo como administrador de laBD voy a guardar fotos en una carpeta que tengo oculta; el usuario no sabe cual es esa carpeta, entonces cuando apreta el botón el explorador se tiene que abrir en esa carpeta (eso ya lo tengo resuelto) pero no debe permitirle cambiar a otra carpeta para buscar las fotos.

Como te había dicho antes, no me lo había planteado nunca. Lo siento

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas