La Web del Programador: Comunidad de Programadores
 
    Pregunta:  573 - COMO GUARDAR IMAGENES EN VISUAL BASIC
Autor:  Hugo Cardenas Riojas
Por Favor, estoy trabajando en Visual Basic usando RDO con una base de datos en SQL server 6.0.
Grabo datos numericos, textos, fechas mas mi gran problema es como grabar una imagen o foto en esta base de datos, sin utilizar RDC o el Data Control
Estoy utilizando el control Image con su propiedad Picture pero me sale un error " Numero de Parametro Incorrecto".

PD. Si me ayuda para trabajar Con DAO, estaria mas que agradecido


  Respuesta:  Fernando morales
Hola definitivamente yo tambien te aconsejo que no las guardes en la base de datos, simplemente utiliza un campo varchar en una tabla donde guardes el nombre de la imagen, y luego cuando vayas a hacer referencia a esa imagen o quieres que aparesca en el picture, utilizas el siguiente codigo:

Picture1.Picture = LoadPicture("E:\Proyecto\Imagenes\" & consulta!Foto_u)

dentro de loadPicture, va la ruta donde guardas la imagen, y le concatenas el nombre el cual lo tienes guardado en la base de datos, para esto primero tienes que extraer el nombre de la base de datos, si no sabes como hacer eso me dices y yo te mando el codigo, espero te sirva saludos desde michoacan

  Respuesta:  Jose Andres Mosquera Ramos
Hola, amigo yo te sugiero una forma mas facil, no hagas un campo en la base de datos para guradar imagenes ya q esto hace q la base de datos se torne muy pesada.... crea una carpeta alterna para guardar las imagenes.. como las vas a guardar muy facil cuando le des guardar la imagen la salvaras en la carpeta con un nombre... cuando desees cargarla para consultarla solo le haces referencia al nombre y colocarla en el picture... eso es todo.... el codigo no te lo envio porq esta de tu parte investigar y hacerlo... espero te sirva... cualquier duda escribeme...

  Respuesta:  Juan Pablo Crossley
Este es un metodo más estandar:

'Grabar recibe un picture y genera el campo
Public Function Grabar(picImagen As PictureBox) As Variant
On Error GoTo ErrorHandler

Dim n As Integer
Dim X As Long
Dim tb() As Byte
n = FreeFile
If Dir$(App.Path & "\tmp.bmp") <> "" Then
Kill App.Path & "\tmp.bmp"
End If
If picImagen.Picture.Handle <> 0 Then
SavePicture picImagen.Picture, App.Path & "\tmp.bmp"
Open App.Path & "\tmp.bmp" For Binary As n
For X = 0 To LOF(n)
ReDim Preserve tb(X + 1)
Get #n, , tb(X)
Next X
Close #n
Grabar = tb
Else
Grabar = Null
End If
Exit Function
ErrorHandler:
End Function

Public Function Recuperar(Imagen As ADODB.Field) As IPictureDisp
On Error GoTo ErrorHandler

Dim n As Integer
Dim X As Long

Dim tb() As Byte 'Variable a almacenar en bmp
Dim varImagen As Variant 'Variable para de donde viene el arreglo

If TypeOf Imagen Is Field Then
varImagen = Imagen.Value
Else
varImagen = Imagen
End If

For X = LBound(varImagen) To UBound(varImagen)
ReDim Preserve tb(X + 1)
tb(X) = varImagen(X)
Next X

If Dir$(App.Path & "\tmp.bmp") <> "" Then
Kill App.Path & "\tmp.bmp"
End If

n = FreeFile
Open App.Path & "\tmp.bmp" For Binary As n
X = 0
For X = LBound(tb) To UBound(tb)
Put #n, , tb(X)
Next X
Close #n

Set Recuperar = LoadPicture(App.Path & "\tmp.bmp")
If Dir$(App.Path & "\tmp.bmp") <> "" Then%0

  Respuesta:  Rodrigo Treviño
primero lo primero, no esplicas todo lo que has hecho para tratar de hacerlo, pero hay te va todo lo que necesitas.

crear un campo objeto Ole(binario), que te permite guardar imagenes o cosas como hojas de calculo o procesadores de texto que sean servidores ole
para manegarlo necesitas "AppendChunk" y "GetChunk", puedes consultar la ayuda de VB para saber como usarlo, y sus restricciones. que en si son de solo poder manejar mas que 16kb de vez en vez, pero hay te dicen como manejar esto

Saludos y espero haber podido ayudarte