Como insertar una imagen en un objeto ole

Utilizo Access 2007 y tengo una serie de campos OLE en el formulario. Cuando intento rellenarlos con una imagen haciendo clic en el botón derecho y en la opción "inserta objeto", en vez de aparecerme la foto, me aparece su nombre y un dibujito. Me lo hace correctamente SOLO con imágenes PNG pero resulta que la mayoria de mis fotos son JPG. Por favor, decidme que hago para que funciona también con JPG, BMP, etc.

3 Respuestas

Respuesta

Esta es la tercera parte del video que indica Eduardo.

https://www.youtube.com/watch?v=3-O1mxfJSvU&t 

Te dejo mi canal de YouTube talvez algún video te sea útil.
https://www.youtube.com/c/VBAAccess?sub_confirmation=1 

Si tienes alguna duda me puedes escribir al siguiente correo:
[email protected]

Respuesta

Sería algo largo si te dijera lo que opino de los campos OLE( que dicho sea de paso engordan la base de datos), de los campos hipervínculo, de datos adjuntos y calculados, pero para resumir opino que son una mierda. Mira, si por ejemplo, tengo las imágenes en una carpeta, basta con poner en un campo texto llamado foto lo que ves en la imagen( aunque incluso sería mejor usar MSOFiledialog para "buscar" las imágenes.

Puedes ver que en foto hay archivos JPG y y png.

En un formulario( te dejo a la vista el campo Foto, pero no sería necesario

Cuando me voy al registro 2

Etc.

Y lo único es que le he añadido un control imagen Imagen9 y en las propiedades del formulario, en el evento Al activar registro le tengo puesto

Private Sub Form_Current()
If Not IsNull([Foto]) Then
Imagen9.Picture = "C:\Users\gonza\Documents\ImagenesUsar\" & "" & Me.Foto & ""
Else
Imagen9.Picture = ""
End If
End Sub

Donde "C:\.....es la ruta a la carpeta donde guardo dichas imágenes

Pero como te decía, si usas la función MSOFiledialog puedes hacer que te aparezca un "explorador" para, desde el propio formulario, localizar dichas imágenes.

Y te olvidas de los objetos OLE que te los pone en un marco de objeto dependiente, con activación por doble clic.

Respuesta

La recomendación que le dan es lo mejor para manejar archivos en Access pero no es la respuesta a su pregunta. Puede extraer los archivos OLE a disco como Binarios Largos, puede ver este video que explica para traerlos a disco, falta es el proceso para traerlo a formulario.

(434) Extraer archivos de un campo OLE mediante código | Binarios Largos🎤 - YouTube

En este link le explican como Guardar y Cargar la imagen, le sirve :

Cómo insertar imagen en Access por código VBA

3 maneras fáciles de insertar imágenes en base de datos de Access (accessrepairnrecovery.com)

Si le gusta el código VBA acá le dejo esta función de Daniel Pineault, CARDA Consultants Inc.

Public Enum wiaFormat
    BMP = 0
    GIF = 1
    JPEG = 2
    PNG = 3
    TIFF = 4
End Enum
'---------------------------------------------------------------------------------------
' Procedure : WIA_ConvertImage
' Author    : Daniel Pineault, CARDA Consultants Inc.
' Website   : http://www.cardaconsultants.com
' Purpose   : Convert an image's format using WIA
' Copyright : The following is release as Attribution-ShareAlike 4.0 International
'             (CC BY-SA 4.0) - https://creativecommons.org/licenses/by-sa/4.0/
' Req'd Refs: Uses Late Binding, so none required
'
' Windows Image Acquisition (WIA)
'             https://msdn.microsoft.com/en-us/library/windows/desktop/ms630368(v=vs.85).aspx
'
' Input Variables:
' ~~~~~~~~~~~~~~~~
' sInitialImage : Fully qualified path and filename of the original image to resize
' sOutputImage  : Fully qualified path and filename of where to save the new image
' lFormat       : Format to convert the image into
' lQuality      : Quality level to be used for the conversion process (1-100)
'
' Usage:
' ~~~~~~
' Call WIA_ConvertImage("C:\Users\Public\Pictures\Sample Pictures\Chrysanthemum.jpg", _
'                       "C:\Users\MyUser\Desktop\Chrysanthemum_2.jpg", _
'                       JPEG)
'
' Revision History:
' Rev       Date(yyyy/mm/dd)        Description
' **************************************************************************************
' 1         2017-01-18              Initial Release
' 2         2018-09-20              Updated Copyright
'---------------------------------------------------------------------------------------
Public Function WIA_ConvertImage(sInitialImage As String, _
                                 sOutputImage As String, _
                                 lFormat As wiaFormat, _
                                 Optional lQuality As Long = 85) As Boolean
    On Error GoTo Error_Handler
    Dim oWIA                  As Object    'WIA.ImageFile
    Dim oIP                   As Object    'ImageProcess
    Dim sFormatID             As String
    Dim sExt                  As String
    'Convert our Enum over to the proper value used by WIA
    Select Case lFormat
        Case 0
            sFormatID = "{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}"
            sExt = "BMP"
        Case 1
            sFormatID = "{B96B3CB0-0728-11D3-9D7B-0000F81EF32E}"
            sExt = "GIF"
        Case 2
            sFormatID = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"
            sExt = "JPEG"
        Case 3
            sFormatID = "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}"
            sExt = "PNG"
        Case 4
            sFormatID = "{B96B3CB1-0728-11D3-9D7B-0000F81EF32E}"
            sExt = "TIFF"
    End Select
    If lQuality > 100 Then lQuality = 100
    'Should check if the output file already exists and if so,
    'prompt the user to overwrite it or not
    Set oWIA = CreateObject("WIA.ImageFile")
    Set oIP = CreateObject("WIA.ImageProcess")
    oIP.Filters.Add oIP.FilterInfos("Convert").FilterID
    oIP.Filters(1).Properties("FormatID") = sFormatID
    oIP.Filters(1).Properties("Quality") = lQuality
    oWIA.LoadFile sInitialImage
    Set oWIA = oIP.Apply(oWIA)
    'Overide the specified ext with the appropriate one for the choosen format
    oWIA.SaveFile Left(sOutputImage, InStrRev(sOutputImage, ".")) & LCase(sExt)
    WIA_ConvertImage = True
Error_Handler_Exit:
    On Error Resume Next
    If Not oIP Is Nothing Then Set oIP = Nothing
    If Not oWIA Is Nothing Then Set oWIA = Nothing
    Exit Function
Error_Handler:
    MsgBox "The following error has occurred" & vbCrLf & vbCrLf & _
           "Error Number: " & Err.Number & vbCrLf & _
           "Error Source: WIA_ConvertImage" & vbCrLf & _
           "Error Description: " & Err.Description & _
           Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _
           , vbOKOnly + vbCritical, "An Error has Occurred!"
    Resume Error_Handler_Exit
End Function

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas