PDA

Ver la Versión Completa : Base Dato + Imagen


mjjj
16-02-2009, 23:53:16
Se que esta pregunta la han hecho y respondido muchas veces, pero con todo la información que he encontrado no he podido solucionar mi problema.

Necesito guardar y mostrar imagenes en una base de dato, utilizo Firebird 2.1 y Delphi 2006.

Expongo los codigos que utilizo para guardar y mostrar la imagen.

Guardar

var
MS : TMemoryStream;
begin
MS := TMemoryStream.Create;
if (OpenDialog1.Execute) then
begin
MS.LoadFromFile(OpenDialog1.FileName);
with ibsql1 do
begin
ibtransaction1.active:=true;
SQL.Clear;
SQL.Add('update empresa set foto=:foto');
sql.add('where nombre ='+quotedstr(label1.caption));
ParamByName('Foto').LoadFromStream(ms);
execquery;
ibtransaction1.commit;
MS.Free;
end;
end;


Mostrar

var
MemoryStream : TMemoryStream ;
ImageBuffer : tbitmap ;
begin
ibquery3.Close;
ibquery3.sql.clear;
ibquery3.sql.add('select * from empresa where nombre ='+quotedstr(label1.caption));
ibquery3.open;
MemoryStream := TMemoryStream.Create;
TBlobField(ibquery3.FieldByName('foto')).SaveToStream(MemoryStream);
ImageBuffer := TJpegImage.Create;
ImageBuffer.LoadFromStream(MemoryStream);
image1.Picture.Assign(ImageBuffer);
ImageBuffer.free;
ImageBuffer.Free;
end;


Me arroja un error #42, ni idea de lo que puede estar ocurriendo.

Espero me puedan ayudar.... gracias

roman
17-02-2009, 01:00:29
¿En qué línea exactamente se produce el error? Intuyo, pero puede ser que no, que se produce en


ImageBuffer.LoadFromStream(MemoryStream);


ya que no has reembobinado el stream:


MemoryStream.Seek(0, soFromBeginning)
ImageBuffer.LoadFromStream(MemoryStream);


En todo caso, quizá puedas probar la función FieldToPicture que puse aquí (http://clubdelphi.com/foros/showthread.php?t=56916&highlight=FieldToPicture#post290624).

Debería funcionar para cualquier campo de tipo BLOB.

// Saludos