Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Manipulación de Imágenes en SQL SERVER desde Delphi (https://www.clubdelphi.com/foros/showthread.php?t=68338)

dunia_lv 08-06-2010 17:21:28

Manipulación de Imágenes en SQL SERVER desde Delphi
 
Hola a todos!!
Estoy en la tarea de insertar imágenes a una tabla Sql Server a través de un procedimiento almacenado desde Delphi. El campo donde inserto las imágenes es de tipo Image. Resulta que no sé de que manera insertar una imagen, he estado buscando ejemplos y los existentes me trabajan utilizando un TAdoTable, pero este no es mi caso, pues como dije anteriormente, necesito hacerlo a golpe de procedimientos almacenados. Además de ello necesito saber cómo puedo luego mostrar esa imagen guardada en la BD en un componente TDBImage o TImage. ¿Alguien conoce de algún ejemplito de mis dos dudas planteadas?

Gracias por su atención y saludos

Dunia

afunez2007 08-06-2010 19:20:37

Yo hace un tiempo hice una aplicacion que tenia un pageframe que capturaba varias fotos correspondientes a un vehiculo que entraba a reparacion en un taller, el codigo que usaba era el siguiente:
Este es para guardar la foto en la base de datos:
Código Delphi [-]
procedure TFotosxEquipo.BitBtn1Click(Sender: TObject);
begin
  if OpenPictureDialog1.Execute then
  begin
    if table1.RecordCount=0 then begin
      dbedit1.Text:=REPARA.HOJA.Text;
      q1.sql.Text:=('insert into FOTOSXREPFB01 (CVE_DOC,'+FOTOS.ActivePage.Caption+') values (:CVE_DOC,:pagina)');
      q1.parambyname('CVE_DOC').AsString:= REPARA.HOJA.Text;
      q1.parambyname('pagina').LoadFromFile(OpenPictureDialog1.filename,ftGraphic       );
      q1.execsql;
      FotosxEquipo.Database1.Commit;
      Table1.Active:=false;
      Table1.Filtered:= FALSE;
      Table1.Filter:='CVE_DOC='+QuotedSTR(REPARA.HOJA.Text);
      Table1.Filtered:= True;
      Table1.Active:=true;
     end else begin
      q1.sql.text:=('update FOTOSXREPFB01 set '+FOTOS.ActivePage.Caption+'=:pagina where CVE_DOC=:CVE_DOC');
      q1.parambyname('CVE_DOC').AsString:= table1.fieldbyname('CVE_DOC').Text;
      q1.parambyname('pagina').LoadFromFile(OpenPictureDialog1.filename,ftGraphic       );
      q1.execsql;
      FotosxEquipo.Database1.Commit;
      Table1.Active:=false;
      Table1.Filtered:= FALSE;
      Table1.Filter:='CVE_DOC='+QuotedSTR(REPARA.HOJA.Text);
      Table1.Filtered:= True;
      Table1.Active:=true;
     end;
  end;
end;

Y este es para guardarla como archivo luego que ya habia sido guardada en la base y por ejemplo requiero guardarla en jpg para enviarla por email:
Código Delphi [-]
procedure TFotosxEquipo.BitBtn2Click(Sender: TObject);
var
  jp: TJPEGImage;  //Requires the "jpeg" unit added to "uses" clause.
begin
  jp := TJPEGImage.Create;
  try
    with jp do
    begin
      jp.LoadFromStream(Table1.CreateBlobStream(table1.FieldByName(FOTOS.ActivePage.Caption),bmread));
      SaveToFile(ExtractFilePath(Application.ExeName)+FOTOS.ActivePage.Caption+'.jpg');
      Messagedlg('Imagen Guardada en:'+#13+ExtractFilePath(Application.ExeName)+FOTOS.ActivePage.Caption+'.jpg',mtWarning, [mbok],1);
    end;
  finally
    jp.Free;
  end;
end;

Y este ultimo sirve para imprimirla a traves de un quick report:
Código Delphi [-]
procedure TFotosxEquipo.BitBtn3Click(Sender: TObject);
var cved:string;
    jp: TJPEGImage;  //Requires the "jpeg" unit added to "uses" clause.
begin
  jp := TJPEGImage.Create;
  try
    with jp do
    begin
      jp.LoadFromStream(Table1.CreateBlobStream(table1.FieldByName(FOTOS.ActivePage.Caption),bmread));
      SaveToFile(ExtractFilePath(Application.ExeName)+FOTOS.ActivePage.Caption+'.jpg');
      //Messagedlg('Imagen Guardada en:'+#13+ExtractFilePath(Application.ExeName)+FOTOS.ActivePage.Caption+'.jpg',mtWarning, [mbok],1);
    end;
  finally
    jp.Free;
  end;
rptImpFoto := TrptImpFoto.Create(Application);
  Try
  cved:=DBEdit1.Text;
  rptImpFoto.Query1.Active:=false;
  rptImpFoto.Query2.Active:=false;
  rptImpFoto.Query1.ParamByName('initialcod').Text:=cved;
  rptImpFoto.Query2.ParamByName('initialcod').Text:=cved;
  rptImpFoto.QRLabel5.Caption:=FOTOS.ActivePage.Caption;
  rptImpFoto.QRImage1.Picture.LoadFromFile(ExtractFilePath(Application.ExeName)+FOTOS.ActivePage.Capti  on+'.jpg');
  //rptImpFoto.QRDBImage1.DataField:=FOTOS.ActivePage.Caption;
  rptImpFoto.Query1.Active:=true;
  rptImpFoto.Query2.Active:=true;
  rptImpFoto.QuickRep1.previewmodal;
  Finally
  rptImpFoto.Release;
  End;
end;

Espero estas ideas te sirvan para resolver tu situacion

Saludos

dunia_lv 09-06-2010 20:05:59

Muchas gracias pero sigo pero no consigo aún lo que busco

afunez2007 09-06-2010 21:26:04

Cita:

Empezado por dunia_lv (Mensaje 366752)
Muchas gracias pero sigo pero no consigo aún lo que busco

Deberias de ponernos algo del codigo que tienes, o indicarnos cual es el metodo o componente que quieres utilizar, de esta forma podriamos ayudarte mejor.

Si ves el ejemplo que te mande, utiliza una query para enviar la foto a la bd y tambien esta el procedimiento para mostrarla en pantalla despues de haber sido guardada.

Saludos


La franja horaria es GMT +2. Ahora son las 22:37:06.

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