Gravar Foto no Banco

Firebird

24/01/2004

Pessoal Boa Tarde, preciso urgente gravar a foto do produto no cadastro de produto, já efetuei várias pesquisa tanto no Forum do Interbase / Firebird como no Delphi e apesar de encontrar vários exemplos não consegui fazer nenhum funcionar pois nunca trabalhei com imagem no banco, gostaria que um botão acessase um openDialog para selecionar a figura e depois eu gravar, minha estrura de banco é a colocada abaixo agora falta a rotina para selecionar a imagem

Dmprincipal.qry_Produto.close;
Dmprincipal.qry_Produto.sql.clear;
Dmprincipal.qry_Produto.Sql.Add(´Insert into Produto´);
Dmprincipal.qry_Produto.Sql.Add(´(Mem_ImagemProduto´);
Dmprincipal.qry_Produto.Sql.Add(´Values (:Mem_ImagemProduto´);
Dmprincipal.qry_Produto.Sql.Add(´Where Str_CodigoProduto = :Str_CodigoProduto´);
Dmprincipal.qry_Produto.Parambyname(´Mem_ImagemProduto´).AsBlob := [color=red:d4f3e75f79]Imagem[/color:d4f3e75f79];
Dmprincipal.qry_Produto.Parambyname(´Str_CodigoProduto).Asstring := [color=red:d4f3e75f79]Codigoproduto[/color:d4f3e75f79];
Dmprincipal.qry_Produto.execsql;

Espero contar com a colaboração de vcs mais uma vez


Ari

Ari

Curtidas 0

Respostas

Afarias

Afarias

24/01/2004

INSERTS não tem WHERE!!

o q vc quer fazer é um UPDATE (eu acho!)

with DMPrincipal.qry_Produto do
begin
  Sql.Clear; 
  Sql.Add(´UPDATE PRODUTO SET mem_ImagemProduto = :IMG´); 
  Sql.Add(´WHERE Str_CodigoProduto = :COD´); 
  ParamByName(´IMG´).LoadFromFile(´arquivo´); // ou LoadFromStream()
  Parambyname(´COD´).AsString := CodigoProduto; 
  ExecSql; 
end;




T+


GOSTEI 0
Ari

Ari

24/01/2004

Desculpa Foi Mal realmente neste caso o Where não Existe

Agora porque esta dando o seguinte erro ao compilar o programa na linha [color=red:fcef6438d8]ParamByName(´Mem_ImagemProduto´).LoadFromStream(Stm);[/color:fcef6438d8], coloquei a unit JPEG na Uses


Not enough actual parameters

procedure TFrmCadProduto.Button1Click(Sender: TObject);
var
Stm: TStream;
begin
Stm := TMemoryStream.Create;
try
(ImagemProduto.Picture.Graphic as TJpegImage).SaveToStream(Stm);
Stm.Position := 0;
with Dmprincipal.qry_Produto do
try
SQL.Text := ´INSERT INTO Produto (Str_CodigoProduto, Mem_ImagemProduto) VALUES (:Str_CodigoProduto, :Mem_ImagemProduto)´;
//Transaction.StartTransaction;
ParamByName(´Str_CodigoProduto´).Asstring := ´1111´;
ParamByName(´Mem_ImagemProduto´).LoadFromStream(Stm);
ExecSql;
finally
DmPrincipal.transacao.CommitRetaining;
end;
finally
Stm.Free;
end;
end;


GOSTEI 0
Afarias

Afarias

24/01/2004

|Agora porque esta dando o seguinte erro ao compilar o programa na
|linha ParamByName(´Mem_ImagemProduto´).LoadFromStream(Stm);,
|coloquei a unit JPEG na Uses

pq vc está usando um IBQuery para fazer o processo!

como o IBQuery deriva de TDataSet, vc tem o Params padrão do Delphi, sendo assim, no LoadFromStream vc tem q passar o Stream e o tipo do Blob.

ex::


ParamByName(´Mem_ImagemProduto´).LoadFromStream(Stm, ftBlob);




T+


GOSTEI 0
POSTAR