PDA

Ver la Versión Completa : Guardar una imagen (TPicture) en un campo de DB


ElDuc
26-01-2011, 10:38:50
Hola a todos,

Estoy liado con un pequeño programa y necesito guardar/recuperar una imagen en un campo de una DB.

Por el momento he creado una Db Access (sólo para pruebas) en la que he creado una tabla que tiene 3 campos:

Id - Autoincremantal - Id del registro
Name - String - Nombre del registro (imagen)
Image - Objeto OLE - Para guardar la imagenEl el programa he definido un objeto Q:=TAdoQuery que enlazo con la tabla comentada.


...
Q.Open;
Q.Insert;
Q.FieldValues['Name']:='Nombre_1';
*** Q.FieldValues['Image']:=MyImage; (Objeto TPicture en el que está la imagen)
Q.Post.
...


Al compilar, en la línea (***) me da el siguiente error:
Incompatible types: 'Variant' and 'TPicture'

Es evidente que no lo esoy haciendo bien.

Por favor, ¿podéis ayudarme?

Gracias de antemano.

Aleca
26-01-2011, 14:33:10
proba de esta forma.

Q.FieldValues['Image']:=MyImage.Picture.Graphic;

otra forma

FieldByName('IMAGE').Assign(MyImage.Picture.Graphic);

ElDuc
27-01-2011, 07:43:02
Hola Aleca, gracias por tu colaboración.

La segunda opción me funciona, pero no soy capaz de recuperar la imagen a un TPicture.

Cuando digo que me funciona es porque no me da ningún error y en la DB observo que se ha almacenado algo, pero tampoco se que información hay ya que, como te digo, no puedo visualizarla posteriormente.

Si puedes hechame una mano, gracias.

Aleca
27-01-2011, 10:47:29
Hola Aleca, gracias por tu colaboración.

La segunda opción me funciona, pero no soy capaz de recuperar la imagen a un TPicture.

Cuando digo que me funciona es porque no me da ningún error y en la DB observo que se ha almacenado algo, pero tampoco se que información hay ya que, como te digo, no puedo visualizarla posteriormente.

Si puedes hechame una mano, gracias.
con access no he trabajado pero probá hacerlo de esta forma.

Image1.Picture.Assign(Q.FieldByName('IMAGE'));

espero que te sirva.:)

Delfino
27-01-2011, 11:21:28
No has dicho q componente estas usando :confused:

A mi (y a muchos) siempre me ha servido el componente TJvDBImage de la suite JVCL (http://jvcl.delphi-jedi.org/) sin ningún problema..

ElDuc
27-01-2011, 13:21:09
Hola Aleca,

Con la opción que me das para cargar el field en el picture me da el error "bitma is not valid"

Hola Delfino,

Trabajo con ADO, nunca he trabajado con la librería que me comentas.

---

De todas formas he conseguido hacerlo pasando el field a un TJpegImage y éste a el picture, pero eso me da el problema que sólo puedo trabajar con imágenes de tipo jpg y no es lo que necesito, pero creo que vamos por buen camino.

Sabéis si puedo saber el timo de imagen que hay en un picture (jpg, gif, png, bmp, etc)

Muchas gracias a ambos por vuestra ayuda.

Delfino
01-02-2011, 23:09:29
Trabajo con ADO, nunca he trabajado con la librería que me comentas.
Pues ya es hora ;)