Fórum Salvar Jpg dentro em um bytea no Postgres 9.2 e exibi-la #427609
30/10/2012
0
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
Curtir tópico
+ 0Posts
30/10/2012
Claudia Nogueira
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
30/10/2012
Claudia Nogueira
Onde estiver 'logotipo' você tem que trocar pelo nome do seu campo.
Gostei + 0
30/10/2012
Carlos Santana
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
30/10/2012
Claudia Nogueira
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?
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
30/10/2012
Carlos Santana
Estou fazendo esse teste em um windows 7, com delphi xe2 e zeos 7 e postgres 9.2.
Gostei + 0
30/10/2012
Bruno Leandro
Gostei + 0
30/10/2012
Bruno Leandro
Gostei + 0
31/10/2012
Claudia Nogueira
Estou fazendo esse teste em um windows 7, com delphi xe2 e zeos 7 e postgres 9.2.
Gostei + 0
01/11/2012
Claudia Nogueira
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
01/11/2012
Claudia Nogueira
Gostei + 0
02/11/2012
Carlos Santana
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
02/11/2012
Carlos Santana
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
02/11/2012
Luciano Santos
Gostei + 0
02/11/2012
Luciano Santos
Gostei + 0
02/11/2012
Carlos Santana
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)