Ver Mensaje Individual
  #4 (permalink)  
Antiguo 01/04/2004, 01:56
Anubis5
 
Fecha de Ingreso: marzo-2004
Mensajes: 2
Antigüedad: 20 años, 1 mes
Puntos: 0
De acuerdo Ahí va lo que hice...

Hola, primero comentaros que el objetivo es un campo OLE de una BD Access. Para las dudas, pues que MiBufer() lleva paréntesis para poder dimensionarlo a tu gusto, si no lo haces meterás datos en blanco que te fastidiarán la imagen/animación/cosa que estés metiendo :).
¿Qué hacemos? Pos mu sencillo booo :( . Pues definimos un tamaño de bufer (const TamBufer). Por ahí leí que debía ser múltiplo de 1024, aunque yo probé con distintas cifras y no hubo diferencia, quizá porque utilicé fotos pequeñas.
Calculamos número de ¿trozos? (¿como leche se traduce chunk?), y como quieras, antes o después, metes el espacio sobrante. Después, el número de chunks. Y ya lo tienes.
Para sacar las imágenes pues igual. No necesité hacer la función porque sólo me interesaba sacar el campo imagen por Crystal. Simplemente en vez de la función AppendChunck pues utilizas GetChunk, y saber que necesitarás un archivo temporal donde volcar la imagen, después la utilizas donde quieras y borras el archivo.


Sub InsertarBLOB(MIRegistro As ADODB.Recordset, _
MINombreCampo As String, MIRutaArchivo As String)

Dim TamTotal As Long
Dim TamRestante As Integer
Dim NumeroChunks As Long
Dim MIBufer() As Byte
Dim Archivo As Integer
Dim i As Integer

Const TamBufer = 8192

'On Local Error GoTo ControlError

'Abrimos el archivo y le calculamos el tamaño y numero
'de "chunks" que tenemos que añadir a la BD

Archivo = FreeFile
Open MIRutaArchivo For Binary Access Read As Archivo

TamTotal = LOF(Archivo)
NumeroChunks = TamTotal \ TamBufer
TamRestante = TamTotal Mod TamBufer

'Añadimos primero el trozo restante, redimensionando el
'bufer al tamaño que necesitamos

ReDim MIBufer(TamRestante)
Get Archivo, , MIBufer
MIRegistro(MINombreCampo).AppendChunk MIBufer

'Redimensionamos el bufer al tamaño establecido y añadimos
'el numero de "chunks" que establecimos antes

ReDim MIBufer(TamBufer)
For i = 1 To NumeroChunks
Get Archivo, , MIBufer
MIRegistro(MINombreCampo).AppendChunk MIBufer
Next i

'Terminado. Ahora a casita que llueve ...

Close Archivo
MIRegistro.Update
Exit Sub

ControlError:
Close Archivo

End Sub

Lo de la calidad de la imagen, después de investigar, creo que se debe a redimensionar la imagen en el informe de Crystal, para entendernos, la propiedad Stretch de las PictureBox. Curioso, pero en los informes/formularios de Access pasa exactamente lo mismo.
Si alguien quiere añadir algo a la historia esta, pues mejor, que yo aquí sólo soy un mandao y mucho muchito me queda que aprender. Y para dudas, mi dir. es [email protected] .
Un saludo, agradecimiento, felicitación, etc. a todos los mostros que participan en los foros.

Anubis