Fórum Gravar imagem em campo blob usando stored procedure firebird #52551
30/08/2005
0
Estou querendo gravar uma imagem jpg num campo BLOB usando STORED PROCEDURE mas não to conseguindo.
Segue abaixo o codigo de exemplo:
private
{ Private declarations }
Procedure manutencao( Acao:integer );
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
Procedure TForm1.manutencao(Acao:integer);
begin
IBTransaction1.Active := true;
try
IBStoredProc1.ParamByName(´PACAO´).AsInteger := Acao;
IBStoredProc1.ParamByName(´PTEXTO´).asstring := DBEdit1.Text;
TBlobField(IBStoredProc1.ParamByName(´PFIGURA´)).LoadFromFile(OpenPictureDialog1.FileName);
IBStoredProc1.ExecProc;
IBTransaction1.Commit;
except on e:exception do
begin
IBTransaction1.Rollback;
ShowMessage( e.Message );
end;
end;
end;
procedure TForm1.CarregafiguraClick(Sender: TObject);
begin
OpenPictureDialog1.Execute;
DBImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
end;
procedure TForm1.SalvarClick(Sender: TObject);
begin
manutencao(1);
end;Estou usando o DBIMAGE ... como passo a figura que ta nele para o procedure??? devo usar alguma variavel pra isso???
Att
Armando
[color=green:f41acfecb6]Movido de Delphi para Interbase/Firebird[/color:f41acfecb6]
Armando.boza
Curtir tópico
+ 0Posts
30/08/2005
Gigatel
veja estes códigos e adapte ao seu sistema..
Procedure T_FormCliente.GravaFoto( NomeCampo, FileName: String ); Var stImagem: TFileStream; Begin stImagem := TFileStream.Create( FileName, fmOpenRead Or fmShareDenyWrite ); Try TBlobField( DS_CLIENTES.DataSet.FieldByName( NomeCampo ) ).LoadFromStream( stImagem ); Finally stImagem.Free; End;
e depois
Procedure T_FormCliente.ObtemFoto( NomeCampo: String; Var imgDestino: TImage ); Var jpgImg: TJPEGImage; stMem: TMemoryStream; begin If TBlobField( DS_CLIENTES.DataSet.FieldByName( NomeCampo ) ).IsNull or (TBlobField(DS_CLIENTES.DataSet.FieldByName( NomeCampo)).BlobSize = 0) Then Begin imgDestino.Picture := Nil; Exit; End; jpgImg := TJPEGImage.Create; stMem := TMemoryStream.Create; try TBlobField( DS_CLIENTES.DataSet.FieldByName( NomeCampo ) ).SaveToStream( stMem ); stMem.Position := 0; jpgImg.LoadFromStream( stMem ); imgDestino.Picture.Assign( jpgImg ); finally stMem.Free; jpgImg.Free; end; end;
Para capturar a foto...
If Not OpenPictureDialog1.Execute Then Exit; Image3.Picture.LoadFromFile( OpenPictureDialog1.FileName ); If DS_CLIENTES.DataSet.State = dsBrowse Then DS_CLIENTES.DataSet.Edit; GravaFoto( ´GS_CLI_FIGURA´, OpenPictureDialog1.FileName );
Para visualizar a foto ..no meu caso coloquei esta função no evento ONDATACHANGE do datasouce
ObtemFoto( ´GS_CLI_FIGURA´,Image3 );
Estude o código esta do jeito q vc prescisa...flw..
Gostei + 0
30/08/2005
Armando.boza
Gostei + 0
30/08/2005
Armando.boza
Gostei + 0
30/08/2005
Afarias
IBStoredProc1.ParamByName(´PFIGURA´).LoadFromFile(OpenPictureDialog1.FileName, ftBlob);
T+
Gostei + 0
31/08/2005
Armando.boza
Perfeito mais uma vez.... muito obrigado [b:f7fb14f963]afarias[/b:f7fb14f963].
Achon que ja é a décima vez que vc me socorre ... kkkkkkkkkkkkk
Valew
Gostei + 0
31/08/2005
Armando.boza
estou usando o DBIMAGE, estou conseguindo gravar JPG, BMP etc .. tudo normal.
mas quando vou editar o registro, os que possuem BMP blz .. a imagem aparece do DBIMAGE legal, mas os que são JPG dá erro ao trazer a imagem pro DBIMAGEM.
[b:8b9ce1098f]mas como dá erro ao trazer a imagem do banco se quando vou gravar ele aceita normal o JPG??????[/b:8b9ce1098f]
Gostei + 0
31/08/2005
Afarias
|ele aceita normal o JPG??????
quando vc grava está acessando a imagem direto do arquivo, o banco não quer saber o q é! Vc pode gravar o q quiser no BLOB.
Mas o componente padrão do Delphi TDBImage é feito apenas para suportar arquivos BMP, sendo assim vc não pode usá-lo para mostrar outra coisa.
Se deseja mostrar JPG entre outros formatos, utilize um componente tipo o DBImage de terceiros q suporte outros formatos ou faça o carregamento do arquivo manualmente usando um TImage comum.
T+
Gostei + 0
31/08/2005
Sandra
Uma dica de componente fornecida pela Lucania (aqui mesno no fórum) é o [url=http://cc.borland.com/Item.aspx?id=22742]EDBImage 1.6 JPG in your DB[/url] no tópico [url=http://forum.clubedelphi.net/viewtopic.php?t=61529&highlight=edbimage]Gravar imagem JPG[/url].
Obs.: Está disponível para as versões 4, 5, 6 ou 7. Faça o download e instale de acordo com a sua versão do Delphi.
Boa sorte!
Gostei + 0
31/08/2005
Armando.boza
valew ... fiz um esquema com Stream e ta funcionando .... mas vou realizar mais alguns testes pra ver.
Gostei + 0
31/08/2005
Armando.boza
Uma dica de componente fornecida pela Lucania (aqui mesno no fórum) é o [url=http://cc.borland.com/Item.aspx?id=22742]EDBImage 1.6 JPG in your DB[/url] no tópico [url=http://forum.clubedelphi.net/viewtopic.php?t=61529&highlight=edbimage]Gravar imagem JPG[/url].
Obs.: Está disponível para as versões 4, 5, 6 ou 7. Faça o download e instale de acordo com a sua versão do Delphi.
Boa sorte![/quote:49b96761bb]
Muito obrigado .. ja to baixando e testando...
Gostei + 0
01/09/2005
Armando.boza
Valew pessoal, muito obrigado mesmo.
private
{ Private declarations }
Procedure manutencao( Acao:integer );
public
{ Public declarations }
end;
var
Form1: TForm1;
stm : TStream;
implementation
{$R *.dfm}
Procedure TForm1.manutencao(Acao:integer);
begin
IBTransaction1.Active := true;
try
IBStoredProc1.ParamByName(´PACAO´).AsInteger := Acao;
IBStoredProc1.ParamByName(´PTEXTO´).asstring := DBEdit1.Text;
IBStoredProc1.ParamByName(´PFIGURA´).LoadFromStream(stm,ftblob);
//pode ser assim tb mas dai vc tem que usar somente bmp com dbimage.
//IBStoredProc1.ParamByName(´PFIGURA´).LoadFromFile(OpenPictureDialog1.FileName,ftBlob);
IBStoredProc1.ExecProc;
IBTransaction1.Commit;
stm.Free;
except on e:exception do
begin
IBTransaction1.Rollback;
ShowMessage( e.Message );
end;
end;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if OpenPictureDialog1.Execute then begin
DBImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
end;
stm := nil;
stm := TMemoryStream.Create;
DBImage1.Picture.Graphic.SaveToStream(stm);
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
if IBQuery1.State = dsinsert then begin
manutencao(1);
end;
if IBQuery1.State = dsedit then begin
manutencao(2);
end;
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
IBQuery1.close;
IBQuery1.sql.Clear;
IBQuery1.params.clear;
IBQuery1.sql.add(´SELECT * FROM TESTE WHERE TEXTO IS NULL´);
IBQuery1.open;
IBQuery1.Insert;
end;
procedure TForm1.BitBtn4Click(Sender: TObject);
var
jpg : TJPEGImage;
begin
jpg := nil;
IBQuery1.close;
IBQuery1.sql.Clear;
IBQuery1.params.clear;
IBQuery1.sql.add(´SELECT * FROM TESTE WHERE TEXTO = ´´maria´´´); //maria é a pessoa que tem foto JPG
IBQuery1.open;
stm := IBQuery1.CreateBlobStream(IBQuery1.FieldByName(´FIGURA´),bmRead);
jpg := TJPEGImage.Create;
jpg.LoadFromStream(stm);
dbImage1.Picture.Assign(jpg);
IBQuery1.Edit;
end;
end.Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)