Salvar imagem no banco de dados e exibir no timage
20/02/2020
0
Tenho um projeto onde o usuário pode salvar as imagens de seus produtos, estou salvando as imagens no banco de dados.
Como faço para exibir estas imagens no TImage ou outro componente do delphi?
Eu já pesquisei em alguns fórum e imagem do tipo PNG não exibe.
Alguém poderia ajudar?
Elpidio Baberge
Posts
20/02/2020
Emerson Nascimento
21/02/2020
Emerson Nascimento
Pergunta: qual versão do Delphi você está utilizando?
21/02/2020
Elpidio Baberge
Bom dia Emerson, conforme me orientou eu coloquei a PNGImage nas uses, porém não funcionou.
Este é o meu Código
ClientDataSet1.Open; Image1.Picture.Assign( TGraphicField(ClientDataSet1PROFOTO) );
Retorna o seguinte erro.
"Bitmap image is not valid."
Estou utilizando o Delphi XE10 Seattle
21/02/2020
Emerson Nascimento
Image1.Picture.Graphic.Assign( TGraphicField(ClientDataSet1PROFOTO) )
ou ainda
Image1.Picture.Graphic.Assign( ClientDataSet1PROFOTO )
21/02/2020
Elpidio Baberge
Image1.Picture.Graphic.Assign( TGraphicField(ClientDataSet1PROFOTO) )
ou ainda
Image1.Picture.Graphic.Assign( ClientDataSet1PROFOTO )
Testei as duas forma, me retorna Access Violation
Debugger Exception Notification
---------------------------
Project Project2.exe raised exception class $C0000005 with message 'access violation at 0x0079a439: read of address 0x00000000'.
---------------------------
Break Continue Help
---------------------------
21/02/2020
Emerson Nascimento
para colocar a imagem no campo:
ClientDataSet1F001_IMAGEM.Assign( Image1.Picture.Graphic );
para exibir a imagem do campo no TImage:
Image2.Picture.Assign( ClientDataSet1F001_IMAGEM );
21/02/2020
Elpidio Baberge
para colocar a imagem no campo:
ClientDataSet1F001_IMAGEM.Assign( Image1.Picture.Graphic );
para exibir a imagem do campo no TImage:
Image2.Picture.Assign( ClientDataSet1F001_IMAGEM );
Desculpa minha falta de conhecimento mas olha só minha unit.
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DBXFirebird, Data.DB, Data.SqlExpr, Data.FMTBcd, Vcl.StdCtrls, Vcl.ExtCtrls, Datasnap.Provider, Datasnap.DBClient, PNGImage; type TForm1 = class(TForm) SQLConnection1: TSQLConnection; SQLQuery1: TSQLQuery; DataSource1: TDataSource; ClientDataSet1: TClientDataSet; DataSetProvider1: TDataSetProvider; SQLQuery1PROCODIGO: TIntegerField; SQLQuery1PROFOTO: TBlobField; Image1: TImage; Button1: TButton; ClientDataSet1PROCODIGO: TIntegerField; ClientDataSet1PROFOTO: TBlobField; Image2: TImage; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin ClientDataSet1.Open; ClientDataSet1.append; ClientDataSet1PROCODIGO.AsInteger := 1; ClientDataSet1PROFOTO.Assign( Image1.Picture.Graphic ); ClientDataSet1.Post; Image2.Picture.Assign( ClientDataSet1PROFOTO ); end; end.
nessa linha ak
Image2.Picture.Assign( ClientDataSet1PROFOTO );
da o erro
---------------------------
Project2
---------------------------
Bitmap image is not valid.
---------------------------
OK
---------------------------
21/02/2020
Emerson Nascimento
Testei com Firebird 3.0, campo BLOB subtype 0 (Binary)
segue exemplo:
https://www.4shared.com/rar/fiStRyR-ea/Project7_Binarios.html
https://www.4shared.com/rar/IYWH19oriq/Project7_Fontes.html
para testar, extraia o conteúdo de Project7_Binarios numa pasta qualquer.
você pode incluir um novo registro ou pode alterar um registro existente.
para alterar a imagem de um registro existente, deixe-o em modo de edição (altere o conteúdo de algum campo)
para selecionar a imagem, dê um duplo-clique no objeto imagem.
após selecionar a imagem, clique no botão 'TRANSFERIR IMAGEM PARA O CAMPO'. Quando tudo estiver pronto, clique no botão 'SALVAR REGISTRO NO BANCO DE DADOS'.
se você navegar entre os registros, verá que a imagem é carregada automaticamente. há imagens PNG, JPEG e BMP.
você poderá selecionar qualquer um dos três tipos de imagem.
OBS.: O executável exemplo só funciona se você tiver o Firebird 3.0 instalado e rodando.
21/02/2020
Elpidio Baberge
Testei com Firebird 3.0, campo BLOB subtype 0 (Binary)
segue exemplo:
https://www.4shared.com/rar/fiStRyR-ea/Project7_Binarios.html
https://www.4shared.com/rar/IYWH19oriq/Project7_Fontes.html
para testar, extraia o conteúdo de Project7_Binarios numa pasta qualquer.
você pode incluir um novo registro ou pode alterar um registro existente.
para alterar a imagem de um registro existente, deixe-o em modo de edição (altere o conteúdo de algum campo)
para selecionar a imagem, dê um duplo-clique no objeto imagem.
após selecionar a imagem, clique no botão 'TRANSFERIR IMAGEM PARA O CAMPO'. Quando tudo estiver pronto, clique no botão 'SALVAR REGISTRO NO BANCO DE DADOS'.
se você navegar entre os registros, verá que a imagem é carregada automaticamente. há imagens PNG, JPEG e BMP.
você poderá selecionar qualquer um dos três tipos de imagem.
OBS.: O executável exemplo só funciona se você tiver o Firebird 3.0 instalado e rodando.
Obrigado pela ajuda, vou seguir suas orientações e dou um retorno.
Banco Firebird 2.5
Campo BLOB SUB_TYPE 0
24/02/2020
Florisvaldo
Tenho um projeto onde o usuário pode salvar as imagens de seus produtos, estou salvando as imagens no banco de dados.
Como faço para exibir estas imagens no TImage ou outro componente do delphi?
Eu já pesquisei em alguns fórum e imagem do tipo PNG não exibe.
Alguém poderia ajudar?
Amigo não coloque imagens em banco de dados é melhor salvar em uma pasta.
26/02/2020
Elpidio Baberge
vou levar sua dica em consideração. Obrigado.
Clique aqui para fazer login e interagir na Comunidade :)