Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Base Dato + Imagen (https://www.clubdelphi.com/foros/showthread.php?t=63486)

mjjj 16-02-2009 23:53:16

Base Dato + Imagen
 
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
Código Delphi [-]
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
Código Delphi [-]
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

Código Delphi [-]
ImageBuffer.LoadFromStream(MemoryStream);

ya que no has reembobinado el stream:

Código Delphi [-]
MemoryStream.Seek(0, soFromBeginning)
ImageBuffer.LoadFromStream(MemoryStream);

En todo caso, quizá puedas probar la función FieldToPicture que puse aquí.

Debería funcionar para cualquier campo de tipo BLOB.

// Saludos


La franja horaria es GMT +2. Ahora son las 18:01:29.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi