Le doy una idea como lo hago en PostgreSQL, pero es lo mismo para SQL SERVER
IMAGEN A CARGAR
Formulario para cargar la imagen
Utilizo este formulario para adicionar la imagen en la tabla (campo OLE en Access pero BLOB en SQL SERVER) hago clic en botón Insertar y se guarda la imagen, observe que también lo puedo hacer con una función de PostgreSQL y por medio de un link en la web. Ahora verifico que la imagen este registrada.
Formulario para ver la imagen
Del cuadro de lista seleccioné TodExpertos campo BLOB y efectivamente tengo la imagen el control. Observe que si hago clic en Extraer puedo descargar la imagen al PC.
Formulario para editar (reemplazar una imagen)
Se requieren las siguientes funciones
Código para leer del campo OLE (BLOB SQL SERVER) al disco y es la imagen para el control imagen de Access.
Public Function OleADisco(id As Long) As String
Dim rst As DAO.Recordset, SQL, Ruta As String, Aux As Boolean
Dim Matrix() As Byte
Dim NumArchivo As Byte
On Error GoTo ManipularError
SQL = "SELECT * FROM FingerprintDB WHERE Id = " & id & " "
Set rst = CurrentDb.OpenRecordset(SQL, dbOpenForwardOnly)
With rst
NumArchivo = FreeFile
Ruta = CurrentProject.Path & !Nombre & ""
Matrix = !fingerprintimg
End With
rst.Close: Set rst = Nothing
Aux = True: Open Ruta For Binary Access Write As #NumArchivo
Put #NumArchivo, 1, Matrix
Close #NumArchivo: Aux = False
OleADisco = Ruta
Salir:
Exit Function
ManipularError:
If Aux Then: Close #NumArchivo
If Not rst Is Nothing Then rst.Close: Set rst = Nothing
MsgBox "Error al descargar la imagen" & vbCrLf & vbCrLf & Err.Description, vbCritical, "Atención"
Resume Salir
End Function
Código para insertar la imagen en el campo OLE (BLOB en SQL SERVER)
Public Function DiscoAOle()
Dim rst As DAO.Recordset, SQL, Ruta As String, NumArchivo As Byte, Aux As Boolean
Dim Matrix() As Byte
On Error GoTo ManipularError
SQL = "SELECT * FROM FingerprintDB"
Set rst = CurrentDb.OpenRecordset(SQL, dbOpenDynaset)
NumArchivo = FreeFile
Ruta = Me.txtArchivo
Aux = True: Open Ruta For Binary Access Read As #NumArchivo
ReDim Matrix(LOF(NumArchivo) - 1)
Get #NumArchivo, , Matrix
Close #NumArchivo: Aux = False
With rst
.AddNew
![first_name] = Me.txtDescripcion
!Nombre = Dir(Ruta)
!fingerprintimg = Matrix
.Update
End With
rst.Close: Set rst = Nothing
MsgBox "Registro agregado correctamente", vbInformation, "Aviso"
Me.txtDescripcion = Null: Me.txtArchivo = Null
Salir:
Exit Function
ManipularError:
If Aux Then: Close #NumArchivo
If Not rst Is Nothing Then rst.Close: Set rst = Nothing
MsgBox Err.Description, vbCritical, "Atención"
Resume Salir
End Function
En la web hay bastante código sobre esto, asumo que hay otras alternativas