Eduardo,
En algunos casos se requiere forzosamente la utilizacón de imagenes en la
base de datos. Piensa en una base de datos compartida vía internet en la que
diversas sucursales afecten la misma base de datos,por ejemplo: Clientes y
en ella grabes la fotografía del cliente, o la firma digitalizada para que
puedadn corroborar la identidad del cliente al realizar ventas de crédito.
Bueno en tales casos te paso unas rutinas que talvez te sirvan, utilizan
conexíones ADO, lo cual no especificas en tu mensaje, pero te ayudaran para
darte una ide de por donde comenzar.:
Este código lo copié de algún lado (la verdad no recuerdo) y tienen una
leyenda:
'--------------------------------------------
' Este procedimiento no es necesario usarlo
' si el Picture está ligado a un data control
'--------------------------------------------
Lo que no se es como se hace para tu caso específico... Cuando esta enlazado
a un data control.
Saludos
Alejandro
**********************************
Option Explicit
Private nFile As Long
Private Chunk() As Byte
Private Const mBuffer As Long = 16384&
Public Sub LeerBinary(ADOField As ADODB.Field, unPicture As PictureBox)
' Leer la imagen del campo de la base y asignarlo al Picture
'--------------------------------------------
' Este procedimiento no es necesario usarlo
' si el Picture está ligado a un data control
'--------------------------------------------
Dim nChunks As Long
Dim nSize As Long
Dim Fragment As Long
Dim i As Long
'
' Se usa un fichero temporal para guardar la imagen
nFile = FreeFile
Open "pictemp" For Binary Access Write As nFile
'
' Calcular los trozos completos y el resto
nSize = ADOField.ActualSize
nChunks = Int(nSize / mBuffer)
Fragment = nSize Mod mBuffer
Chunk() = ADOField.GetChunk(Fragment)
Put nFile, , Chunk()
For i = 1 To nChunks
Chunk() = ADOField.GetChunk(mBuffer)
Put nFile, , Chunk()
Next
Close nFile
Erase Chunk
' Ahora se carga esa imagen en el control
unPicture.Picture = LoadPicture("pictemp")
' Ya no necesitamos el fichero, así que borrarlo
On Error Resume Next
If Len(Dir$("pictemp")) Then
Kill "pictemp"
End If
Err = 0
End Sub
Public Sub GuardarBinary(ADOField As ADODB.Field, unPicture As PictureBox)
' Guardar el contenido del Picture en el campo de la base
Dim i As Long
Dim Fragment As Long
Dim nSize As Long
Dim nChunks As Long
'
' Guardar el contenido del picture en un fichero temporal
SavePicture unPicture.Picture, "pictemp"
' Leer el fichero y guardarlo en el campo
nFile = FreeFile
Open "pictemp" For Binary Access Read As nFile
nSize = LOF(nFile) ' Longitud de los datos en el archivo
If nSize = 0 Then
Close nFile
Exit Sub
End If
'
' Calcular el número de trozos y el resto
nChunks = nSize \ mBuffer
Fragment = nSize Mod mBuffer
ReDim Chunk(Fragment)
'
Get nFile, , Chunk()
ADOField.AppendChunk Chunk()
ReDim Chunk(mBuffer)
For i = 1 To nChunks
Get nFile, , Chunk()
ADOField.AppendChunk Chunk()
Next i
Close nFile
'
' 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
Post by AdrianoEn realidad no es una buena idea almacenar imágenes dentro de la base datos,
puesto que hace crecer su tamaño rápidamente y esto afecta el rendimiento de
las operaciones con los registros.
Sugerencia: Destiná un campo de la base de datos para almacenar la dirección
del archivo de imagen que pretendas mostrar. Entonces, muestres el registro
podés cargar la imagen asociada a éste.
Ej. Set Picture1.picture=LoadPicture("dirección del archivo")' Acá va la
dirección que guardaste.
El único problema con este método es la seguridad. Si el directorio donde se
guardan los archivos de imagen están al alcance del usuario, cualquier
acción sobre ellos que modifique su nombre o su ubicación afectará la
posibilidad de mostrarlo en la aplicación.
Saludos.
--
...................................
Bruno Adriano Pestoni
"Hecho en Argentina"
Viedma - Río Negro
-----------------------------
Nunca sabremos la verdad...
"En Microsoft nada es gratis"
-----------------------------
Post by Eduardohola amigos, se que este tema se habra tocado en algun lugar y talves
tengo una base de datos creada en access 97 enlazada a mi aplicacion en
visual basic 6.
la tabla de productos tiene un campo llamado foto
como saben, para presentar imagenes en la tabla, el tipo de campo debe
ser OLE, pero en vb6, ni el control Image ni el PictureBox, acepta ese
tipo de archivos..
ya intente poniendo el campo como tipo hipervinculo, como tipo texto
(poniendo la ruta en el campo)
en fin, ya no se que hacer.. se que la solucion debe estar ahi con unas
horas de programacion pero tengo que trabajar en otros modulos de la
aplicacion :)
alguien me podria dar una idea?
ah...se me olvidaba decir que los registros los presento a traves de un
DataControl y me muevo entre ellos con un DbCombo, usando la propiedad
bookmark, para presentar los campos en textBox y bueno pretendo que la
foto salga en un image o PictureBox...
gracias por tomarse el tiempo de leer esto.