Fórum Zeos + Firebird + Image #424866

27/09/2012

0

Olá.
Não tenho conhecimento de como salvar uma imagem de um Image ou DBImage num campo BLOB do firebird usando ZEOS.
Gostaria de saber como salvar a imagem,carregada num TImage ou DBImage,no banco de dados.
O campo da imagem é 'FOTO'.
Obrigado.
Vtrx

Vtrx

Responder

Posts

28/09/2012

William

Colega segue um link sobre como gravar o caminho das imagens no banco de dados, dependendo da aplicação pode se tornar inviável gravar imagens direto, o banco pode aumentar e consequentemente ocorrer uma perda de performance.
[url]https://www.devmedia.com.br/como-gravar-caminho-de-imagens-no-banco-de-dados-e-exibi-las-depois/25003[/url]
Responder

Gostei + 0

28/09/2012

Vtrx

Consegui achar o meio de gravar.
O código teste esta em C++,mas é fácil alterar para o delphi.
if (OpenPictureDialog1->Execute()) {Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);}
   DataModule2->ZQuery1->Close();
   DataModule2->ZQuery1->SQL->Clear();
   DataModule2->ZQuery1->SQL->Text = "insert into PRODUTOS (COD,FOTO) VALUES (456,:ThePicture)" ;
   DataModule2->ZQuery1->Params->Clear();
   DataModule2->ZQuery1->Params->CreateParam(ftBlob,"ThePicture", ptInput);
   DataModule2->ZQuery1->ParamByName("ThePicture")->LoadFromFile(OpenPictureDialog1->FileName,ftBlob);
   DataModule2->ZQuery1->ExecSQL();
//=====================================


Agora preciso saber como carregar a imagem.
Alguem?
Responder

Gostei + 0

29/09/2012

Alisson Santos

Amigo uma dica, acho um metodo ruim esse de ficar salvando imagem no banco, pois o seu banco torna ficar um pouco lento para abrir as tabelas e assim por diante, sem contar que ele acaba ficando grande.
O ideal é salvar o caminho que está a imagens e copiar para uma posta especifica.
Responder

Gostei + 0

29/09/2012

Vtrx

A quem interessar,fiz a rotina para salvar.
Está em C++,para Delphi a alteração é mínima.
Dou um Select normalmente escolhando os campos que preciso e o campo BLOB.
Usando um TImage;
  TStream *stream = DataModule2->ZQuery1->CreateBlobStream(DataModule2->ZQuery1->FieldByName("FOTO"),bmRead);
	if (stream->Size < 50) {return;}
	TImage* img = new TImage(this);
	stream->Position = 0;
	Image1->Picture->Graphic->LoadFromStream(stream);
	stream->Free();

Estava dando erro no Image quando o campo continha poucos bytes,então fiz o teste do tamanho do Stream antes de abrir a imagem.
Responder

Gostei + 0

29/09/2012

Vtrx

Correção!
A rotina é para CARREGAR a imagem e não salvar como postei acima!
Lembrando tambem ,que fiz essas mesmas perguntas em 2006(usando ZEOS) e ninguem respondeu,me obrigando na época a salvar o caminho das imagens.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar