Salvar Jpg dentro em um bytea no Postgres 9.2 e exibi-la
Olá Pessoal, gostaria de uma ajuda de vocês para resolver uma questão que me intriga, confesso que já procurei na net e testei vários exemplos de como salvar uma imagem jpg no postgres 9.x e exibi-la num timage, só que nenhuma exibe. Salvar até que salva, o problema está em exibir. Vamos ao meu problema:
Na minha aplicação eu capturo uma imagem através de uma camera e salvo em um local no disco no formato .jpg, em seguida, tenho que gravar a imagem em um campo bytea dentro do postgres 9.2.
Eu até que consigo gravar utilizando o código:
query.ParamByName(''imagem'').LoadFromFile(ExtractFileDir(application.ExeName)+''/temp/img001.jpg'',ftGraphic);
query.ExecSQL;
o problema está na hora de exibir, já tentei de tudo, e detalhe, o mesmo código abaixo funcionava quando usava postgres 8.4, só foi mudar para 9.2 que começou a dar o erro #53:
qImagem.SQL.Text:=''select * from imagens.clientes where cliente=''+qClientesid.AsString+'';'';
qImagem.ExecSQL;
Atualizar(qImagem);//
im:=TMemoryStream.Create();
TBlobField(qImagem.FieldByName(''imagem'')).SaveToStream(im);
img:=TJPEGImage.Create;
img.LoadFromStream(im);
Image1.Picture.Assign(img); //TImage
Acredito que esteja dando incompatibilidade com o encoding do banco ''utf8''.
Pensando que o problema poderia estar no procedimento no delphi que faz a inserção da imagem no banco, inseri diretamente no banco um jpg(criado no paint) no campo bytea do postgres e dá a seguinte mensagem "invalid bytea sequence for encoding UTF8: oxff.
Se o problema for em relação a codificação o que posso fazer, pois tenho que utilizar o utf8, se não, como posso inserir uma imagem de tipo jpg em um campo bytea no postgres 9.x.
Alguém pode me ajudar? desde já muito obrigado.
Na minha aplicação eu capturo uma imagem através de uma camera e salvo em um local no disco no formato .jpg, em seguida, tenho que gravar a imagem em um campo bytea dentro do postgres 9.2.
Eu até que consigo gravar utilizando o código:
query.ParamByName(''imagem'').LoadFromFile(ExtractFileDir(application.ExeName)+''/temp/img001.jpg'',ftGraphic);
query.ExecSQL;
o problema está na hora de exibir, já tentei de tudo, e detalhe, o mesmo código abaixo funcionava quando usava postgres 8.4, só foi mudar para 9.2 que começou a dar o erro #53:
qImagem.SQL.Text:=''select * from imagens.clientes where cliente=''+qClientesid.AsString+'';'';
qImagem.ExecSQL;
Atualizar(qImagem);//
im:=TMemoryStream.Create();
TBlobField(qImagem.FieldByName(''imagem'')).SaveToStream(im);
img:=TJPEGImage.Create;
img.LoadFromStream(im);
Image1.Picture.Assign(img); //TImage
Acredito que esteja dando incompatibilidade com o encoding do banco ''utf8''.
Pensando que o problema poderia estar no procedimento no delphi que faz a inserção da imagem no banco, inseri diretamente no banco um jpg(criado no paint) no campo bytea do postgres e dá a seguinte mensagem "invalid bytea sequence for encoding UTF8: oxff.
Se o problema for em relação a codificação o que posso fazer, pois tenho que utilizar o utf8, se não, como posso inserir uma imagem de tipo jpg em um campo bytea no postgres 9.x.
Alguém pode me ajudar? desde já muito obrigado.
Carlos Santana
Curtidas 0
Respostas
Claudia Nogueira
30/10/2012
Pra gravar você pode usar dessa forma:
Utilizar essa função quando for usar pra mostrar a imagem:
Esse código pra mostrar a imagem:
Obs.: Adicionar JPEG nos uses do Form e um componente TImage pra testar.
procedure TForm2.Button1Click(Sender: TObject);
var
Imagem: TFileStream;
begin
Imagem := TFileStream.Create(ExtractFileDir(application.ExeName)+'/temp/img001.jpg', fmOpenRead or fmShareDenyWrite);
//Iniciar transação
qImagem.Close;
qImagem.ParamByName('logotipo').LoadFromStream(Imagem,ftBlob);
qImagem.ExecSQL;
//Commitar transação
end;
Utilizar essa função quando for usar pra mostrar a imagem:
function TForm2.LoadImage(AImage: TImage; ABlobField: TBlobField): Boolean;
var
JpgImg: TJPEGImage;
StMem: TMemoryStream;
begin
if ABlobField.DataSet.IsEmpty then
begin
Result := False;
Exit;
end;
AImage.Picture.Assign(nil);
if not (ABlobField.IsNull) and not (ABlobField.AsString = '') then
begin
jpgImg := TJPEGImage.Create;
stMem := TMemoryStream.Create;
try
ABlobField.SaveToStream(StMem);
StMem.Position := 0;
JpgImg.LoadFromStream(StMem);
AImage.Picture.Assign(JpgImg);
finally
StMem.Free;
JpgImg.Free;
end;
end;
Result := True;
end;
Esse código pra mostrar a imagem:
qImagem.Close;
qImagem.SQL.Text:='select * from imagens.clientes where cliente=' + QuotedStr(qClientesid.AsString);
qImagem.Open;
if not qImagem.IsEmpty then
LoadImage(Image1, TBlobField(qImagem.FieldByName('imagem')));
Obs.: Adicionar JPEG nos uses do Form e um componente TImage pra testar.
GOSTEI 0
Claudia Nogueira
30/10/2012
Cometi um erro de digitação.
Onde estiver 'logotipo' você tem que trocar pelo nome do seu campo.
Onde estiver 'logotipo' você tem que trocar pelo nome do seu campo.
GOSTEI 0
Carlos Santana
30/10/2012
Não funcionou, dá um erro de exceção EJPEG com mensagem : "JPEG error #53" na linha:
JpgImg.LoadFromStream(StMem);
Só para testar eu criei um jpg no MsPaint e salvei no diretório e fiz o delphi gravar no banco conforme a sugestão, e depois tentei carregar e dá o mesmo erro citado acima.
Acredito que o delphi não esteja conseguindo gravar corretamente a imagem como UTF8, será que pode ser isso ? Pois de qualquer forma o delphi não consegue carregar a imagem pois não tem como retorno um jpg válido.
Existe alguma forma de tentar gravar a imagem como UTF8 no banco ?
JpgImg.LoadFromStream(StMem);
Só para testar eu criei um jpg no MsPaint e salvei no diretório e fiz o delphi gravar no banco conforme a sugestão, e depois tentei carregar e dá o mesmo erro citado acima.
Acredito que o delphi não esteja conseguindo gravar corretamente a imagem como UTF8, será que pode ser isso ? Pois de qualquer forma o delphi não consegue carregar a imagem pois não tem como retorno um jpg válido.
Existe alguma forma de tentar gravar a imagem como UTF8 no banco ?
GOSTEI 0
Claudia Nogueira
30/10/2012
O estranho é que antes de te enviar eu criei uma nova base com UTF8 e uma tabela com o campo bytea.
Fiz o projeto do zero e inseri várias imagens e também coloquei um botão pra carregar da tabela e mostrar no TImage.
Tem Jpeg no Uses do Form?
Fiz o projeto do zero e inseri várias imagens e também coloquei um botão pra carregar da tabela e mostrar no TImage.
Tem Jpeg no Uses do Form?
Não funcionou, dá um erro de exceção EJPEG com mensagem : "JPEG error #53" na linha:
JpgImg.LoadFromStream(StMem);
Só para testar eu criei um jpg no MsPaint e salvei no diretório e fiz o delphi gravar no banco conforme a sugestão, e depois tentei carregar e dá o mesmo erro citado acima.
Acredito que o delphi não esteja conseguindo gravar corretamente a imagem como UTF8, será que pode ser isso ? Pois de qualquer forma o delphi não consegue carregar a imagem pois não tem como retorno um jpg válido.
Existe alguma forma de tentar gravar a imagem como UTF8 no banco ?
JpgImg.LoadFromStream(StMem);
Só para testar eu criei um jpg no MsPaint e salvei no diretório e fiz o delphi gravar no banco conforme a sugestão, e depois tentei carregar e dá o mesmo erro citado acima.
Acredito que o delphi não esteja conseguindo gravar corretamente a imagem como UTF8, será que pode ser isso ? Pois de qualquer forma o delphi não consegue carregar a imagem pois não tem como retorno um jpg válido.
Existe alguma forma de tentar gravar a imagem como UTF8 no banco ?
GOSTEI 0
Carlos Santana
30/10/2012
Entendi, mas você está utilizando postgres 9.x ?
Estou fazendo esse teste em um windows 7, com delphi xe2 e zeos 7 e postgres 9.2.
Estou fazendo esse teste em um windows 7, com delphi xe2 e zeos 7 e postgres 9.2.
GOSTEI 0
Bruno Leandro
30/10/2012
carlos nao cheguei a testar o exemplo passado mas aqui tambem tive problema neste cenario que voce colocou, e pra resolver comecei a gravar em campo tipo text
GOSTEI 0
Bruno Leandro
30/10/2012
completando... gravava normalmente, mas na hora de abrir dava um erro.
GOSTEI 0
Claudia Nogueira
30/10/2012
A única diferença no cenário é que eu uso o PgDac no lugar do zeos.
Entendi, mas você está utilizando postgres 9.x ?
Estou fazendo esse teste em um windows 7, com delphi xe2 e zeos 7 e postgres 9.2.
Estou fazendo esse teste em um windows 7, com delphi xe2 e zeos 7 e postgres 9.2.
GOSTEI 0
Claudia Nogueira
30/10/2012
Fiquei pensando o motivo de aqui funcionar e aí não. Testei em duas máquinas diferentes e aqui funciona.
Instalei a última versão do Zeos no meu Delphi XE e fiz o exemplo de uma galeria de fotos com PostgreSQL 9x.
Segue o código fonte.
Testei em duas máquinas esse projeto e funcionou.
[url]http://www.cdnweb.com.br/ExemploFotos.rar[/url]
Instalei a última versão do Zeos no meu Delphi XE e fiz o exemplo de uma galeria de fotos com PostgreSQL 9x.
Segue o código fonte.
Testei em duas máquinas esse projeto e funcionou.
[url]http://www.cdnweb.com.br/ExemploFotos.rar[/url]
GOSTEI 0
Claudia Nogueira
30/10/2012
Tem um backup do banco de dados usado no exemplo no arquivo compactado.
GOSTEI 0
Carlos Santana
30/10/2012
Claudia,
eu acredito que seja a versão do Zeos que estou utilizando!
Quando abri o seu projeto, a primeira coisa que aparece é uma mensagem de Erro em relação ao componente Zconnection, dizendo que a propriedade UTF8StringsAsWideField não existe, e outra coisa, na lista de protocolos do Zconnection aparece postgres-9, no meu só o postgres-8. Então acredito que estou com versão do zeos desatualizada.
Você tem o link de onde baixou/instalou a última versão do zeos? se tiver me manda pois vou fazer o teste.
Desde já agradeço pela ajuda.
eu acredito que seja a versão do Zeos que estou utilizando!
Quando abri o seu projeto, a primeira coisa que aparece é uma mensagem de Erro em relação ao componente Zconnection, dizendo que a propriedade UTF8StringsAsWideField não existe, e outra coisa, na lista de protocolos do Zconnection aparece postgres-9, no meu só o postgres-8. Então acredito que estou com versão do zeos desatualizada.
Você tem o link de onde baixou/instalou a última versão do zeos? se tiver me manda pois vou fazer o teste.
Desde já agradeço pela ajuda.
GOSTEI 0
Carlos Santana
30/10/2012
Claudia,
eu acredito que seja a versão do Zeos que estou utilizando!
Quando abri o seu projeto, a primeira coisa que aparece é uma mensagem de Erro em relação ao componente Zconnection, dizendo que a propriedade UTF8StringsAsWideField não existe, e outra coisa, na lista de protocolos do Zconnection aparece postgres-9, no meu só o postgres-8. Então acredito que estou com versão do zeos desatualizada.
Você tem o link de onde baixou/instalou a última versão do zeos? se tiver me manda pois vou fazer o teste.
Desde já agradeço pela ajuda.
eu acredito que seja a versão do Zeos que estou utilizando!
Quando abri o seu projeto, a primeira coisa que aparece é uma mensagem de Erro em relação ao componente Zconnection, dizendo que a propriedade UTF8StringsAsWideField não existe, e outra coisa, na lista de protocolos do Zconnection aparece postgres-9, no meu só o postgres-8. Então acredito que estou com versão do zeos desatualizada.
Você tem o link de onde baixou/instalou a última versão do zeos? se tiver me manda pois vou fazer o teste.
Desde já agradeço pela ajuda.
Era exatamente isso, removi a versão do zeos 7 que tinha e baixei e instalei a última versão do projeto ZeosLib em http://sourceforge.net/projects/zeoslib/files/Zeos%20Database%20Objects/, daí tudo funcionou perfeitamente....hehehehe
Agradeço a todos pela ajuda.
GOSTEI 0
Luciano Santos
30/10/2012
Olha, "né por nada, não", mas, com esse projeto da devmedia de recompensa$$ar as pessoas que ajudam no fórum, eu acho que deveriam pagar hora extra para Claudinha, vocês não acham, não? rsrsrsrs. E a 100%! Sério, vejo como está garota ajuda e se esforça para solucionar as dificuldades dos outros. Congratulações, Cláudia.
GOSTEI 0
Luciano Santos
30/10/2012
Olha, "né por nada, não", mas, com esse projeto da devmedia de recompensa$$ar as pessoas que ajudam no fórum, eu acho que deveriam pagar hora extra para Claudinha, vocês não acham, não? rsrsrsrs. E a 100%! Sério, vejo como está garota ajuda e se esforça para solucionar as dificuldades dos outros. Congratulações, Cláudia.
GOSTEI 0
Carlos Santana
30/10/2012
Com certeza, apoio total! o que vemos por ai é o pessoal respondendo o forum só para aparecer, e na maioria das vezes nem tenta ajudar de verdade, passa qualquer link encontrado na web e "se vira". A Claudia colocou exemplos da forma mais clara possível! Muito obrigado a todos e Parabéns Claudia...rsrsrsrs
GOSTEI 0
Jorge Amir
30/10/2012
olá...
Bem espero que atenda-me..
Novamente sobre gravação de imagem... poderia verificar o link para que possa tentar fazer a minha rotina funcionar...
Configuração..
Delphi xe7
Postgresql 9.2
e uso procedure para gravar... e recuperar...
Obrigado por enquanto...
Jorge
Bem espero que atenda-me..
Novamente sobre gravação de imagem... poderia verificar o link para que possa tentar fazer a minha rotina funcionar...
Configuração..
Delphi xe7
Postgresql 9.2
e uso procedure para gravar... e recuperar...
Obrigado por enquanto...
Jorge
GOSTEI 0
Jorge Amir
30/10/2012
Fiquei pensando o motivo de aqui funcionar e aí não. Testei em duas máquinas diferentes e aqui funciona.
Instalei a última versão do Zeos no meu Delphi XE e fiz o exemplo de uma galeria de fotos com PostgreSQL 9x.
Segue o código fonte.
Testei em duas máquinas esse projeto e funcionou.
[url]http://www.cdnweb.com.br/ExemploFotos.rar[/url]
Instalei a última versão do Zeos no meu Delphi XE e fiz o exemplo de uma galeria de fotos com PostgreSQL 9x.
Segue o código fonte.
Testei em duas máquinas esse projeto e funcionou.
[url]http://www.cdnweb.com.br/ExemploFotos.rar[/url]
olá...
Bem espero que atenda-me..
Novamente sobre gravação de imagem... poderia verificar o link para que possa tentar fazer a minha rotina funcionar...
Configuração..
Delphi xe7
Postgresql 9.2
e uso procedure para gravar... e recuperar...
Obrigado por enquanto...
Jorge
GOSTEI 0
Jorge Amir
30/10/2012
Fiquei pensando o motivo de aqui funcionar e aí não. Testei em duas máquinas diferentes e aqui funciona.
Instalei a última versão do Zeos no meu Delphi XE e fiz o exemplo de uma galeria de fotos com PostgreSQL 9x.
Segue o código fonte.
Testei em duas máquinas esse projeto e funcionou.
[url]http://www.cdnweb.com.br/ExemploFotos.rar[/url]
Instalei a última versão do Zeos no meu Delphi XE e fiz o exemplo de uma galeria de fotos com PostgreSQL 9x.
Segue o código fonte.
Testei em duas máquinas esse projeto e funcionou.
[url]http://www.cdnweb.com.br/ExemploFotos.rar[/url]
olá...
Bem espero que atenda-me..
Novamente sobre gravação de imagem... poderia verificar o link para que possa tentar fazer a minha rotina funcionar...
Configuração..
Delphi xe7
Postgresql 9.2
e uso procedure para gravar... e recuperar...
Obrigado por enquanto...
Jorge
GOSTEI 0
Fundação Aparecida
30/10/2012
Boa tarde a todos, estou enfrentando problema semelhante aqui ao tentar gravar imagem no postgresql 9.4 com zeoslib 7, ao seguir a rotina citada pela mestra Claudia, dá o seguinte erro: Sql Error: syntaxe error at or near "\" at character 1044, não faço idéia do que possa ser, alguém pode me ajudar ?
GOSTEI 0
Tulio Santana
30/10/2012
Estou enfrentando o mesmo problema, tem como disponibilizar novamente o arquivo rar com projeto pronto.
GOSTEI 0