Gravar Foto no Banco
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
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
Curtidas 0
Respostas
Afarias
24/01/2004
INSERTS não tem WHERE!!
o q vc quer fazer é um UPDATE (eu acho!)
T+
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
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;
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
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+
|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