¿Cómo guardar una imagen?

Soy inexperto y estoy haciendo un programa en el que doy la opción de cambiar la imagen de fondo del formulario padre, pero quiero que en un momento dado, dándole a un botón de guardar, me guarde la imagen esa en la base de datos, para que cuando lo abra de nuevo, me aparezca esa imagen y no la que pongo yo por defecto. Tengo un campo en la base de datos de tipo OLE donde pretendía guardar la imagen, pero parece que no se hace asi, o por lo menos como lo intento guardar yo, que es: 'rs.fields("FONDOPANTALLA") = MDIForm.picture'. Algo está mal, me puedes decir como se hace?

3 respuestas

Respuesta
1
De entrada debes hacer una conexión ADO. (Es más fácil).
'En el evento Load
Dim db As Connection
Set db = New Connection
db.CursorLocation = adUseClient
'/////////////
db.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & App.Path & "\Tubase.mdb;"
'/////////////
Set adoPrimaryRS = New Recordset
adoPrimaryRS.Open "tbl_images", db, adOpenStatic, adLockOptimistic
Set Image1.DataSource = adoPrimaryRS
O el control donde tengas para cargar la imagen.
'Y por ultimo en un boton pones este codigo
With adoPrimaryRS
If Not (.BOF And .EOF) Then
mvBookMark = .Bookmark
End If
.AddNew
End With
Y listo... No debes de tener problemas.
Respuesta
1
Las imágenes y objetos guardados se denominan BLOB (Binary Large OBject - objetos binarios grandes) y no se enlazan directamente al control picturebox para ello debes sacarlo de la DB a un archivo temporal binario y cargarlo mediante el método load picture del control Picture Box y de este asignarlo a la propiedad picture de la ventana, para guardarlo y sacarlo de la DB utilizas las funciones de GetChunk y AppendChunk, para guardar lo en el archivo
Aquí tiene las funciones que utilizo si quieres buscar más te recomiendo
www.freevbcode.com
www.planet-source-code.con
'Funciones para guardar y obtener archivos BLOB en VB
'SAMUEL PEÑA JUN 2002
Public Function ImgToFld(fldDestino As ADODB.Field, Optional sRutaImg As String) As Boolean
Dim iOffset As Long
Dim iSizeFile As Long
Dim iArchivoImg As Integer
Dim VectorChunk() As Byte
Dim iFragmentOffset As Integer
Dim i As Integer
Dim lChunks As Long
FldToImg = False
On Error GoTo lblError
iArchivoImg = FreeFile
Open sRutaImg For Binary Access Read As iArchivoImg
iSizeFile = LOF(iArchivoImg)
If iArchivoImg = 0 Then
Close iArchivoImg
End If
lChunks = iSizeFile \ ciSizeChunk
iFragmentOffset = iSizeFile Mod ciSizeChunk
'Copia el ultimo pedazo
ReDim VectorChunk(iFragmentOffset)
Get iArchivoImg,, VectorChunk()
FldDestino. AppendChunk VectorChunk()
ReDim VectorChunk(ciSizeChunk)
iOffset = iFragmentOffset
For i = 1 To lChunks
Get iArchivoImg, , VectorChunk()
fldDestino.AppendChunk VectorChunk()
Next
ImgToFld = True
Exit Function
lblError:
End Function
Public Function FldToImg(fldOrigen As ADODB.Field, sRutaImg As String) As Boolean
Dim iOffset As Long
Dim iSizeFld As Long
Dim iArchivoImg As Integer
Dim VectorChunk() As Byte
Dim iFragmentOffset As Integer
Dim i As Integer
Dim iChunks As Long
FldToImg = False
On Error GoTo lblError
iArchivoImg = FreeFile
Open sRutaImg For Binary Access Write As iArchivoImg
iSizeFld = fldOrigen.ActualSize
iChunks = iSizeFld \ ciSizeChunk
iFragmentOffset = iSizeFld Mod ciSizeChunk
ReDim Buffer(iFragmentOffset) As Byte
VectorChunk() = fldOrigen.GetChunk(iFragmentOffset)
Put iArchivoImg, , VectorChunk()
For i = 1 To iChunks
ReDim VectorChunk(ciSizeChunk) As Byte
VectorChunk() = fldOrigen.GetChunk(ciSizeChunk)
Put iArchivoImg, , VectorChunk()
Next
Close iArchivoImg
FldToImg = True
Exit Function
lblError:
End Function
Respuesta
1
Se te haría más fácil si en vez de guardar la imagen solo guardarías la ruta del archivo y así no se te complicria tanto y ademas ahorrarías espacio en la bd

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas