Otra solución puede ser mediante ADO.
Hace tiempo vengo usando algo similar, y la imagen se guarda directamente en la Base dde Datos, en un campo de tipo OLE.
A continuación les dejo un ejemplo, el cual descargué hace años de la Web del Guille.
Agrega un Módulo (. Bas) en VBasic, y pega el código siguiente:
'------------------------------------------------------------------
'Código para grabar y leer imagenes en campos de bases ( 9/Abr/98)
'
'Adaptado de un par de ejemplos de la ayuda de VB5
'
'©Guillermo 'guille' Som, 1998 <[email protected]>
'------------------------------------------------------------------
Option Explicit
Dim DataFile As Integer
Dim Chunk() As Byte
Const conChunkSize As Integer = 16384
Public Sub LeerBinary(campoBinary As Field, unPicture As PictureBox)
'Leer la imagen del campo de la base y asignarlo al Picture
Dim lngCompensación As Long
Dim lngTamañoTotal As Long
'Se usa un fichero temporal para guardar la imagen
DataFile = FreeFile
Open "pictemp" For Binary Access Write As DataFile
lngTamañoTotal = campoBinary.FieldSize
Do While lngCompensación < lngTamañoTotal
Chunk() = campoBinary.GetChunk(lngCompensación, conChunkSize)
Put DataFile, , Chunk()
lngCompensación = lngCompensación + conChunkSize
Loop
Close DataFile
'Ahora se carga esa imagen en el control
On Local Error GoTo sigue
unPicture.Picture = LoadPicture("pictemp")
sigue:
If (Err.Number = 481) Then unPicture.Picture = LoadPicture()
'Ya no necesitamos el fichero, así que borrarlo
On Local Error Resume Next
If Len(Dir$("pictemp")) Then
Kill "pictemp"
End If
Err = 0
End Sub
Public Sub GuardarBinary(campoBinary As Field, unPicture As PictureBox)
'Guardar el contenido del Picture en el campo de la base
Dim i As Integer
Dim Fragment As Integer, Fl As Long, Chunks As Integer
'
'NOTA:
' El recordset debe estar preparado para Editar o Añadir
'
'Guardar el contenido del picture en un fichero temporal
On Local Error Resume Next 'Err 380: El valor de la propiedad no es válida
SavePicture unPicture. Picture, "pictemp"
'Leer el fichero y guardarlo en el campo
DataFile = FreeFile
Open "pictemp" For Binary Access Read As DataFile
Fl = LOF(DataFile) ' Longitud de los datos en el archivo
If Fl = 0 Then Close DataFile: Exit Sub
Chunks = Fl \ conChunkSize
Fragment = Fl Mod conChunkSize
ReDim Chunk(Fragment)
Get DataFile,, Chunk()
CampoBinary. AppendChunk Chunk()
ReDim Chunk(conChunkSize)
For i = 1 To Chunks
Get DataFile,, Chunk()
CampoBinary. AppendChunk Chunk()
Next i
Close DataFile
'Ya no necesitamos el fichero, así que borrarlo
On Local Error Resume Next
If Len(Dir$("pictemp")) Then
Kill "pictemp"
End If
Err = 0
End Sub
Para guardar la imagen en la BD, dentro del procedimiento para actualizarla, pega el código siguiente:
Call GuardarBinary(Nombre del campo Foto, Control Picture donde está la imagen)
Para Leer la imagen de la BD y mostrarla en un control (PictuteBox), usa el sigte código:
Call LeerBinary(Nombre del campo Foto, Control Picture donde se mostrará la imagen)