PDA

Ver la Versión Completa : Tratamiento de base de datos con Imagenes


zugazua2001
07-06-2005, 21:21:41
Hola, yo trabajo con delphi 5 y base de datos paradox.
Tengo una tabla con tres campos: un campo alfanumerico, uno autoicrementable, y un campo de tipo graphic. Bien yo quiero asignarle a ese campo un archivo de tipo JPG. ¿Cómo puedo hacer para grabar fotos en la base de datos? Yo intente con lo siguiente utilizo el motor de base de datos de borland BDE.
tabla.DataSource.DataSet.FieldByName('Imagen').Assign(imagen1.picture.graphic) y me tira errores.
Esta bien esa sentencia ¿?
Desde ya muchas gracias.

Neftali [Germán.Estévez]
08-06-2005, 10:23:01
Acabo de sunirlo como truco a la Web, pero mientras está, éstan son las rutinas para grabar y recuperar un JPEG de una tabla Paradox:


// Cargar el contenido de un campo GRAPHIC de paradox a un TImage
procedure TForm1.JpegBlobToImage();
var
Stream: Tblobstream;
img: Tjpegimage;
begin
// Cargar el campo Blob en un Stream
Stream := Tblobstream.Create(TBlobField(Table1.fieldbyname('Imagen')), bmRead);
// Crear la Imagen
img := Tjpegimage.Create();
// Cargar la imagen con el Stream
img.loadfromstream(Stream);
// Pasarla a un control IMage
image1.picture.assign(img);
// Liberar
img.free;
Stream.free;
end;

// Cargar el contenido de un TImage a un campo GRAPHIC de Paradox
procedure TForm1.ImageToJpegBlob();
var
Stream: Tblobstream;
img: Tjpegimage;
begin
// Crear un Stream "apuntando" al campo Blob
Stream := Tblobstream.Create(TBlobField(Table1.fieldbyname('Imagen')), bmReadWrite);
// Crear la imagen
img := tjpegimage.create;
// Asignar el TImage a la Imagen
img.Assign(image1.picture);
// Guardarlo en el Stream
img.savetostream(Stream);
// Liberar
img.free;
Stream.Free;
end;


Para utilizarlos aquí un ejempo:


procedure TForm1.btGrabarClick(Sender: TObject);
begin
// Grabar el registr
Table1.Edit;
Table1.FieldByName('Nombre').AsString := DBEdit1.Text;
ImageToJpegBlob();
Table1.Post;
end;

procedure TForm1.btLoadClick(Sender: TObject);
begin
JpegBlobToImage();
end;

zugazua2001
08-06-2005, 16:23:52
Andaba bien. Gracias nuevamente

mcasso
25-03-2012, 19:40:59
Saludos a todos, me disculpo si el tema esta muy visto. En el foro encontré como mostrar imagen en TImage
desde mi base de datos MySQL, pero solo consigo mostrar la imagen del primer registro.
Tengo 2 campos: ID y Bandera->blob. Uso Delphi XE2. Por favor una idea de como podría mostrar la bandera de cada usuario al desplazarme por el DBGrid.

Ej. del codigo.

procedure TForm1.SQLTable1AfterScroll(DataSet: TDataSet);
var
Stream : TSQLBlobStream;
Png : TPNGImage;
begin
if not SQLTable1.FieldByName('BANDERA').IsNull then
begin
Stream := TSQLBlobStream.Create(TBlobField(SQLTable1.FieldByName('BANDERA')),bmRead);
Stream.Seek(0, soFromBeginning);
Png := TPNGImage.create;
Png.LoadFromStream(Stream);
Image1.Picture.Assign(Png);
Png.Free;
Stream.Free;
end;
end;

Muchas Gracias.

Casimiro Notevi
25-03-2012, 19:44:58
Recuerda usar los 'tags' para el código fuente, ejemplo:

http://neftali.clubdelphi.com/images/UtilizarTAGs.png




.

mcasso
25-03-2012, 21:12:31
Si, gracias lo tomaré siempre en cuenta.