PDA

Ver la Versión Completa : acerca de los campos blob


anubis
14-03-2012, 15:32:02
Buenas,

Aqui seguimos dando algo de guerra :)
Estoy usando sqlite y lazarus, además del sqlmanager a través del firefox.

Estaba leyendo (creo que erróneamente) que si tengo un campo blob, le puedo añadir la ruta donde está la imagen que quiero para ese campo, pero evidentemente no funciona bien al meter un dbimage e intentar verla (out of memory).

Mi pregunta, a ver si me arrojais algo de luz a este tema, es como puedo añadir una imagen a cada registro y despues poder ver cada imagen asociada a cada registro.

He visto un ejemplo que habeis publicado pero no me aclara mucho.
Y la otra gran pregunta, si es que esto al final me sale, si es posible guardar archivos pdf en esos campos blob.

Gracias a todos

Casimiro Notevi
14-03-2012, 15:39:16
En los campos blob puedes guardar lo que quieras.
Exactamente ¿qué problema tienes?.

anubis
14-03-2012, 15:42:09
gracias por contestar,

Bueno, desde sqlite manager he guardado una imagen (ya lo cambie con respecto a la anterior pregunta que quite el enlace).

Aohra mismo es, si pongo un dbimage apuntando al campo blob, como la visualizo.

Y la otra sería como desde programa meto una imagen.
gracias de nuevo.

Casimiro Notevi
14-03-2012, 19:03:05
Haz una búsqueda por los foros, es un tema que se ha tratado bastantes veces, a ver si te sirve alguno de estos enlaces escogidos al azar: 1 (http://www.clubdelphi.com/foros/showthread.php?t=44076&highlight=timage+blob), 2 (http://www.clubdelphi.com/foros/showthread.php?t=77447&highlight=imagen+blob), 3 (http://www.clubdelphi.com/foros/showthread.php?t=51184&highlight=imagen+blob), 4 (http://www.clubdelphi.com/foros/showthread.php?t=63140&highlight=timage+blob) y 5 (http://www.clubdelphi.com/foros/showthread.php?t=54714&highlight=timage+blob)

anubis
15-03-2012, 01:32:07
Gracias de verdad.

Encontre varias cosas que me pudieran servir, pero tengo un problema con esto:

BlobStream:=form1.zquery1.CreateBlobStream(form1.zquery1.FieldByName('factur'),bmRead);

Me dice que bmRead indentificador no encontrado,

El resto si esta bien declarado, BlobStream es un TStream, así no se que me falta o que unidad tengo que añadir al uses para que me reconozca el bmRead.

Gracias mil

anubis
15-03-2012, 03:08:40
Perdon por duplicar, pero no pude editar el mensaje.

Mi error estaba en que no tenia la unit db, que es la que hace que me de error el bmread, perdon.

Casimiro Notevi
15-03-2012, 09:36:49
Entonces, ¿lo has solucionado?

anubis
15-03-2012, 15:33:53
hola de nuevo.

Bueno, parece que no quiere funcionar.

tengo un blob con una imagen jpg almacenada y, en funcion de este código:


procedure TForm2.FormCreate(Sender: TObject);
begin
jpg := TJPEGImage.Create;

end;
procedure TForm2.Button1Click(Sender: TObject);

var
Stream: TStream;
begin

Stream := form1.ZQuery1.CreateBlobStream(form1.ZQuery1.FieldByName('factur'),bmread); // Lo mismo que el anterior caso pero ahora en modo de escritura.
jpg.LoadFromStream(Stream); // Cargamos el BLOB al objeto JPEG
Stream.Destroy; // liberamos...
Image1.Picture.Assign(jpg);
end;

Me da el siguiente error:

Jpeg error.

La unidad jpeg no la tengo en lazarus asi que no la puedo asignar, pero viene de la unidad graphics, sino el tjpegimage me habria dado error de compilacion.

mightydragonlor
15-03-2012, 16:30:30
No te sirve el TDBImage enlazandolo directamente al control de Zeos?

anubis
15-03-2012, 16:42:16
Gracias ya probe a ponerlo, pero no sale la imagen.

O hay que añadirle algo mas?

edito:

Acabo de crear un programa nuevo para probar la carga de imagen y me sale violacion de acceso.



jprocedure TForm1.Image1Click(Sender: TObject);

var bmp: TBitmap; Stream: TStream;
begin
if not OpenPictureDialog1.Execute then Exit;
jpg.LoadFromFile(OpenPictureDialog1.FileName);
end;

Si abre el dialog, si me deja elegir y cuando le doy a aceptar me sale ese error de violación de acceso

mightydragonlor
15-03-2012, 16:46:34
Pues no que yo sepa, un TZQuery, un TDataSource y ya, eso es lo que hago normalmente.

anubis
15-03-2012, 19:25:50
Hola.
Ya he conseguido guardar y recuperar.

form1.zquery1.edit;
JPG:=TJPEGImage.Create;
if not OpenPictureDialog1.Execute then Exit;
jpg.LoadFromFile(OpenPictureDialog1.FileName);
Image1.Picture.Assign(JPG);
Stream := form1.ZQuery1.CreateBlobStream(form1.zquery1.FieldByName('factur'), bmWrite); // Asignamos el BLOB a un stream
jpg.SaveToStream(Stream); // y guardamos la imagen como JPEG (convertido), en el stream
Stream.Destroy;// liberamos.
form1.ZQuery1.ApplyUpdates;


Me faltaría saber si se puede hacer lo mismo con un pdf en vez de un jpg

Gracias a todos