La Web del Programador: Comunidad de Programadores
 
    Pregunta:  268 - GUARDAR IMAGENES EN ACCESS CON CODIGO EN VB
Autor:  Gerardo
Estoy haciendo un programa en Visual Basic y necesito guardar imagenes en una base de datos Access. La quiero guardar utilizando codigo, pero no se como. Me pueden ayudar?

  Respuesta:  Diana Velasco
Hola Busca en internet una libreria que se llama adobinary, o sino mandame un mail y te mando el codigo, con ese modulo ya puedes leer y guardar imagenes en una base de datos, utilizando el control picturebox

  Respuesta:  Jose Jimenez
Lo puedes hacer con la funcion Appendchunck, pero para hacerlo debes tener abierto el registro de la bd, y tener una imagen cargada en un objeto Image

Public Sub GuardarFotoBD(rCedula$, Imagen As Object)
Dim SQL$, ADO As ADODB.Recordset
Dim DataFile As Integer, Fl As Long, Chunks As Integer
Dim Fragment As Integer, Chunk() As Byte, I As Integer
Const ChunkSize As Integer = 16384

Set ADO = New ADODB.Recordset
SQL$ = "SELECT * FROM"
SQL$ = SQL$ & " Estudiante"
SQL$ = SQL$ & " WHERE CedEst = '" & rCedula$ & "'"

ADO.Open SQL$, cPagos, adOpenKeyset, adLockPessimistic

If Not ADO.EOF Then
ADO.Update
DataFile = 1
Open Imagen.Tag For Binary Access Read As DataFile 'ABRE LA RUTA DE LA FOTO PARA ACCEO BINARIO
Fl = LOF(DataFile) 'Devuelve un tipoLong que indica el tamaño, en bytes, de un archivo abierto mediante la instrucción Open.

If Fl = 0 Then Close DataFile: Exit Sub
Chunks = Fl \ ChunkSize 'LE AGISNA ALA VARIABLE Chunks, EL VALOR DE LA DIVISION DEL TAMAÑO DEL ARCHIVO ENTRE EL VALOR DE LA CONSTANTE CHUNKSIZE
Fragment = Fl Mod ChunkSize 'DIVIDE EL TAMAÑO DEL ARCHIVO, POR LA CONSTANTE ChunkSize Y DEVUELVE EL RESTO A LA VARIABLE Fragment
ADO!Foto.AppendChunk Null 'LE AGREGA AL CAMPO FOTO, EL VALOR CHUNK COMO NULO
ReDim Chunk(Fragment) 'REDIMENSIONA CHUNK, CON EL VALOR DE LA VARIABLE Fragment
Get DataFile, , Chunk() 'Lee datos de un archivo de disco abierto (DATAFILE) y coloca la información en una variable (CHUNK())
ADO!Foto.AppendChunk Chunk() 'LE AGREGA AL CAMPO FOTO, EL VALOR DE CHUNK
ReDim Chunk(ChunkSize) 'REDIMENSIONA CHUNK, CON EL VALOR DE LA CONSTANTE ChunkSize
For I = 1 To Chunks
Get DataFile, , Chunk() 'Lee datos de un archivo de disco abierto (DATAFILE) y coloca la información en una variable o arreglo (CHUNK())
ADO!Foto.AppendChunk Chunk() 'LE VA A SIGNANDO AL COMPO FOTO EL VALOR HEXADECIMAL DE LA FOTO
Next I
Close DataFile 'CIERRA EL ARCHIVO ABIERTO
ADO.Update
End If
ADO.Close

Exit Sub
End Sub

Y PARA CARGARLA DE LA BD A UN OBJETO IMAGE ES:
Public Sub CargarFotoBD(rCedula$, Imagen As Object)
Dim SQL$, ADO As ADODB.Recordset
Dim DataFile As Integer, Fl As Long, Chunks As Integer
Dim Fragment As Integer, Chunk() As Byte, I As Integer, Foto&
Const ChunkSize As Integer = 16384
On Error GoTo ErrorCargarFotoBD

Set ADO = New ADODB.Recordset
SQL$ = "SELECT Foto FROM "
SQL$ = SQL$ & " Estudiante"
SQL$ = SQL$ & " WHERE CedEst = '" & rCedula$ & "'"

ADO.Open SQL$, cPagos, adOpenKeyset, adLockPessimistic

If Not ADO.EOF Then
If Not IsNull(ADO("Foto")) Then
DataFile = 1
Open "pictemp" For Binary Access Write As DataFile

Foto& = 0 'es es numero del fields(campo Photo) que contiene la foto
Fl = ADO.Fields.Item(Foto).ActualSize 'SE LE ASIGNA A F1, EL VALOR DEL TAMAÑO ACTUAL DE LA FOTO
Chunks = Fl \ ChunkSize 'LE AGISNA A LA VARIABLE Chunks, EL VALOR DE LA DIVISION DEL TAMAÑO DEL ARCHIVO ENTRE EL VALOR DE LA CONSTANTE CHUNKSIZE
Fragment = Fl Mod ChunkSize 'DIVIDE EL TAMAÑO DEL ARCHIVO, POR LA CONSTANTE ChunkSize Y DEVUELVE EL RESTO A LA VARIABLE Fragment
ReDim Chunk(Fragment) 'REDIMENSIONA CHUNK, CON EL VALOR DE LA VARIABLE Fragment
Chunk() = ADO!Foto.GetChunk(Fragment)
Put DataFile, , Chunk() 'Escribe en un archivo de disco(DataFile) los datos contenidos en una variable o arreglo (Chunk()).
For I = 1 To Chunks
ReDim Buffer(ChunkSize) 'El argumento buffer señala a un búfer asignado el valor sizeofbuffer que indica el número de caracteres que se pueden escribir en el búfer
Chunk() = ADO!Foto.GetChunk(ChunkSize) 'el metodo GetChunk, Devuelve todo el contenido, o una parte, de un objeto Field de datos de gran tamaño o binarios
Put DataFile, , Chunk() 'Escribe en un archivo de disco(DataFile) los datos contenidos en una variable o arreglo (Chunk()).
Next I
Close DataFile 'cierra el archivo DataFile
Imagen.Tag = "pictemp" 'carga la foto del valor pictemp
Imagen.Picture = LoadPicture("pictemp")
End If
END IF
ADO.Close
Exit Sub
End Sub

  Respuesta:  Chistian Roberto Plat
Prueba con el código sisguiente:
Coloca un campo en la base de datos y defínelo como ´objeto OLE´
Luego incluye un cuadro de imagen (como puede ser Image1) y en coloca el siguiente código en la sección del control que dice DblClick, o donde más te guste.
Espero que te sirva...
If Clipboard.GetFormat(vbCFText) Then
MsgBox ("Solo hay texto en el portapapeles")
ElseIf Clipboard.GetFormat(vbCFBitmap) Then
Screen.ActiveForm.Image1.Picture = Clipboard.GetData(vbCFBitmap)
ElseIf Clipboard.GetFormat(vbCFMetafile) Then
Screen.ActiveForm.Image1.Picture = Clipboard.GetData(vbCFMetafile)
ElseIf Clipboard.GetFormat(vbCFDIB) Then
Screen.ActiveForm.Image1.Picture = Clipboard.GetData(vbCFDIB)
End If