Crear botón para insertar imágenes en access

Resulta que tengo una base de datos protegida y convertida en aplicación (le he quitado el ribbon, la cinta de menús y tablas) por lo que he tenido que ir colocando diferentes botones con macros para poder por ejemplo eliminar registros o desplazarme por las fichas.

Pues el único problema que no he conseguido solucionar es a la hora de subir una imagen en una ficha (objeto ole) ya no puedo hacerlo mediante el botón derecho de ratón y en insertar objeto ya que esta deshabilitado, la única opción que tengo es abrir la base de datos manteniendo presionada la tecla mayúscula para entrar en modo diseño y entonces si puedo subir mis imágenes.

Bien mi pregunta es ¿hay alguna forma de crear un botón en mi formulario ya sea macro o mediante código vba que me permita subir un objeto o imagen sin tener que entrar a mi base de datos en modo diseño?

1 respuesta

Respuesta
2

Primero de todo, yo no pondría la imagen en un campo OLE, porque lo único que hace es "engordar" la base de datos. Supongamos que en la carpeta Imágenes tienes la fotos de los alumnos, guardadas como Jose Garcia.jpg, carlos sala.jpg, etc.

En la tabla Alumnos crea un campo Foto como texto corto. Y en el pondrás únicamente Jose García, Carlos Sala, etc.

En el formulario Alumnos, en vista diseño añádele un control imagen y en sus propiedades-otras-nombre ponle Imagenfoto y añádele el cuadro de texto Foto.

En cualquier evento, por ejemplo, en el de hacer clic de un botón(pero puede ser en cualquier otro) pones

Dim Ruta As String
Ruta = "c:\users\cabarcos\documents\borrar\" & [Foto] & ".jpg"
Me.Imagenfoto.Picture = Ruta

Lógicamente, tendrás que cambiar la ruta por la tuya a la carpeta Imágenes

Es conveniente que en el evento Al activar registro del formulario le pongas

If not isnull([foto]) then

Dim Ruta As String
Ruta = "c:\users\cabarcos\documents\borrar\" & [Foto] & ".jpg"
Me.Imagenfoto.Picture = Ruta

end if

Así, cuando abras el formulario en algún registro que tenga valor en el cuadro Foto, te mostrará la imagen

En el caso de que las fotos tengan diferentes formatos como jpg, png, bmp tendrías que poner en el campo Foto de la tabla Carlos Sala.png y en el código quitar lo de

[foto]&".jpg y dejarlo sólo como [foto]

Otra alternativa es poner en la tabla y en el formulario el campo Ruta y en un botón poner

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

Y en el mismo editor poner 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

Acuérdate de activar la referencia Microsoft Office. XX object library, en función del Office que tengas instalado.

Así, al pulsar el botón, se abre un "explorador" para que localices el archivo que quieras, y una vez localizad aceptas y te traslada la ruta al cuadro de texto Ruta, y con ello ya puedes hacer lo de la respuesta anterior.

Hola muy buenas, gracias por tus soluciones, me gusta más la segunda opción de buscar en una ruta la imagen que quiera subir, pero tengo alguna dudas, ¿si quiero usar ese método tengo que hacer algún paso de la primera solución que me has dado?

Y cuando dices que en un botón tengo que poner código "Dim localiza As String..." no se como se añade código a un botón.

Saludos.

No es necesario, es que hay muchas formas de hacerlo( a gusto del consumidor)

Supongamos por ejemplo que has elegido la segunda, que te localice la ruta y ya la tienes puesta en el cuadro de texto Ruta. En algún evento, por ejemplo, al hacer clic de un botón(pero como te dije no es necesario que sea en él), puedes poner

Application. FollowHyperlink Ruta

Así, suponiendo que el documento fuera, por ejemplo consultas.docx, te abriría Word en ese documento. Si fuera Mario.jpg te abriría el visor predeterminado en esa imagen, etc.

He seguido los pasos de la ultima opción y nme da error al pulsar el botón. Seguramente hay algo en el código que tengo que sustituir por alguna ruta mía, es que estoy algo verde en esto.

Los pasos que he seguido son:

He creado un campo en tablar llamado "Ruta" tipo texto y en el formulario he insertado otro campo "Ruta" y en opciones en origen de control lo he asociado con la tabla.

Después he creado un botón en el formulario y en evento he puesto "al hacer clic" y ya he copiado esto tal cual:

------------------------

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

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 cuando hago la prueba me da el siguiente error: "Error de compilación No se ha definido el tipo definido por el usuario"

De todas formas gracias por tu ayuda

Siempre he creído que es mejor un ejemplo, que todo lo que se pueda hablar. Si quieres, repito, si quieres, mándame un mensaje(no mandes nada, solo el mensaje) a [email protected]

Y te mando un ejemplo. Si lo haces, en el asunto del mensaje pon tu alias Mario, ya que si no sé quien me escribe ni los abro.

¡Gracias! Te he mandado el mensaje al correo.

Muchas gracias me ha servido tu ejemplo para solucionar lo de los botones que abren otros formularios.

Me falta solo un ejemplo de como subir imágenes ubicadas en mi pc a la base de datos al pulsar un botón. Serias tan amable de pasarme un ejemplo, yo creo que es mejor opción que usar los objetos OLE.

Gracias!!

Enviado ejemplo. Creía que ya te lo había mandado.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas