Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cómo leer una imagen de una tabla en sql server... (https://www.clubdelphi.com/foros/showthread.php?t=68872)

ronimaxh 12-07-2010 18:15:01

Cómo leer una imagen de una tabla en sql server...
 
Buenas tarde amigos del club, quiero presentar una foto en Timage, la foto se encuentra en una tabla como puedo leer esa imagen uso:
Delphi 7 y Sql Server 2005 y componentes Ado.

Neftali [Germán.Estévez] 13-07-2010 10:53:09

Estaría bien saber qué tipo de imagen es (JPG, BMP,...) y cómo la has guardado previamente.

ronimaxh 13-07-2010 14:19:41

jpg y es una data que nos han suministrado del padron.

ronimaxh 19-07-2010 17:05:52

Disculpa por la respuesta anterior, el tipo de dato que esta guardado ne la db es binario.

ronimaxh 21-07-2010 15:05:10

ni con el dbimagen he podido presentar la foto favor amigos de dar una mando con esto.

Mystery 21-07-2010 16:34:00

re...
 
bueno si es un jpg... primero pon en uso la unit jpeg...y luego has algo asi....

Código Delphi [-]
procedure TForm1.btn1Click(Sender: TObject);
var
  jpg:TJPEGImage;
  stream:TMemoryStream;
begin
  stream:=TMemoryStream.Create;
  jpg:=TJPEGImage.Create;
  TBlobField(tbl1.FieldByName('Foto')).SaveToStream(stream);
  stream.Seek(0, soFromBeginning);
  jpg.LoadFromStream(stream);
  img1.Picture.Assign(jpg);
end;
espero te sirva...
chaooo sin mas...
Mystery

Mystery 21-07-2010 16:38:52

a por supuesto se me olvido decirte que img1 es un timage... jejejejejeje sorry...
chaooo
sin mas

Mystery

ronimaxh 21-07-2010 20:41:12

Código Delphi [-]
// de donde sacas esta parte, TBlobField, dime que es.
TBlobField(tbl1.FieldByName('Foto')).SaveToStream(stream);

Mystery 21-07-2010 21:09:04

Bueno discúlpame que no te haya explicado un poco más al detalle... de todas formas ese método esta un poquito incompleto pues no liberaba los objetos después de terminar...
Aquí te dejo una solución mejor explicada..
Ante todo debo decirte que debes tener lo mínimo, una conexión a tu BD, un objeto del tipo TADODataSet o TADOTable, etc… un timage y un botón jejejejeje…
Después en el evento onclick del botón pones este código… calro debes estar parado en el registro correcto o sea en un registro donde el campo tuyo (en el ejemplo el campo es foto) tenga un valor valido…
Código Delphi [-]
procedure TForm1.btn1Click(Sender: TObject);
var
  jpg:TJPEGImage;
  stream:TMemoryStream;
begin
  img1.Picture:=nil;//Limpio el TImage...
  stream:=TMemoryStream.Create;//creo el stream para guardar la foto que esta en el campo de mi BD SQL
  jpg:=TJPEGImage.Create; //Creo el objeto de tipo jpg... a cual le voy a asignar el contenido del stream...
  try
//==============================================================================
// tbl1 => ADOTable1
// TBblogField se refiere a un campo de tipo BLOB o image, MEMO, etc...
// los cuales tienen la propiedad de salvar su contenido en memoria con el metodo SaveToStream...
// tambien tienen el metodo loadtostream que se usa para salvar binarios casi de la misma manera en campos blob...
//==============================================================================
    TBlobField(tbl1.FieldByName('Foto')).SaveToStream(stream);//salvo el contenido del campo en memoria...
    stream.Seek(0, soFromBeginning);//Pongo el cursor al inicio del stream...
    jpg.LoadFromStream(stream);//cargo el contenido del stream en mi objeto jpg...
    img1.Picture.Assign(jpg);//asigno el objeto a la propiedad picture de mi timage... y ya esta...
  finally
    stream.Free;//libero el stream...
    jpg.Free;//libero mi objeto jpg...
  end;
end;


bueno sin mas



Mystery

ronimaxh 21-07-2010 21:35:34

Gracias amigos por la ayuda me da un error:
Código Delphi [-]
 [Error] Consulta_Padron.pas(164): Missing operator or semicolon

Este es el código:
Código Delphi [-]
procedure TfrmConPadron.Button1Click(Sender: TObject);
var
  jpg:TJPEGImage;
  stream:TMemoryStream;
begin
  stream:=TMemoryStream.Create;
  jpg:=TJPEGImage.Create;
  frmConPadron.Image1.Picture:=nil;
  try
   // en esta linea es que me da el error
   frmdata.blofield(frmdata.st_foto.fieldbyname('imagen')).SaveToStream(stream);
   stream.Seek(0, soFromBeginning);
   jpg.LoadFromStream(stream);
   frmConPadron.Image1.Picture.Assign(jpg);
  finally
   stream.Free;
   jpg.Free;
  end;
end;

ronimaxh 23-07-2010 16:08:55

Distinguidos amigos, sólo me falta la solución de ese error anterior, agradezco a cualquier colega que me de una ayuda con esto.

olbeup 23-07-2010 23:09:34

Cita:

procedure TfrmConPadron.Button1Click(Sender: TObject);
var
jpg:TJPEGImage;
stream:TMemoryStream;
begin
stream:=TMemoryStream.Create;
jpg:=TJPEGImage.Create;
frmConPadron.Image1.Picture:=nil;
try
// en esta linea es que me da el error
frmdata.blofield(frmdata.st_foto.fieldbyname('imagen')).SaveToStream(stream);
stream.Seek(0, soFromBeginning);
jpg.LoadFromStream(stream);
frmConPadron.Image1.Picture.Assign(jpg);
finally
stream.Free;
jpg.Free;
end;
end;
Utiliza mejor una función como esta
Código Delphi [-]
function GetFieldToJPG(FieldName: String): TJPEGImage;
var
  Stream: TMemoryStream;
begin
  Stream := TMemoryStream.Create;
  Result := TJPEGImage.Create;

  with frmData do
  begin
    try
      TBlobField(FieldByName(FieldName)).SaveToStream(Stream);
      Stream.Position := 0;
      if (Stream.Size > 0) then
        Result.LoadFromStream(Stream)
      else
        Result := nil;
    finally
      Stream.Free;
    end;
  end;
end;


procedure TfrmConPadron.Button1Click(Sender: TObject);
begin
  frmConPadron.Image1.Picture.Assign(GetFieldToJPG('IMAGEN'));
end;
Un saludo

P.D.: A la hora de escribir código en delphi me gusta que sea elegante y atractiva.

ronimaxh 24-07-2010 21:09:49

Gracias amigo, lo tomare encuenta sobre el código atractivo, probare la función y luego les comentaré

ronimaxh 26-07-2010 17:40:46

He resuelto el problema elegí la funcion del colega, gracias a todos por la ayuda.


La franja horaria es GMT +2. Ahora son las 13:45:01.

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