Gravar e Ler imagen em SQL com Delphi
Boa noite amigos, sou novo aqui no forum, e gostaria da ajuda de voces, pois pesquisei e nao consegui achar um meio de gravar
Imagens no banco de Dados SQL server,2000, 2005, etc.. Utilizando o delphi, se alguem tiver alguma dica de como fazer
o procedimento para gravar o mesmo no banco, e como eu devo fazer para reler essa imagem em um Timage, ficaria agradecido..
Obrigado desde ja.
Imagens no banco de Dados SQL server,2000, 2005, etc.. Utilizando o delphi, se alguem tiver alguma dica de como fazer
o procedimento para gravar o mesmo no banco, e como eu devo fazer para reler essa imagem em um Timage, ficaria agradecido..
Obrigado desde ja.
Douglas Michelino
Curtidas 0
Melhor post
Thebluemonkey
01/06/2012
Cara, não sei o procedimento para gravar a imagem no banco, mas não sei se isso é bem adequado. Dependendo do uso seu banco vai ficar inchado para caramba.
Eu mesmo gravo apenas o caminho para a pasta que contem as imagens e faço o componente buscar deste endereco.
Eu mesmo gravo apenas o caminho para a pasta que contem as imagens e faço o componente buscar deste endereco.
GOSTEI 1
Mais Respostas
Douglas Michelino
01/06/2012
Tambem concordo com o banco de dados inchado, porem o sistema trabalha por conexao remota, do SQL server, no caso
as fotos deveriam ficar no banco de dados, assim todo ou qualquer cliente que for utilizar o sistema, nao precisará fica colocando as pastas com fotos nas maquinas...
Outro Detalhe achei algumas coisas, porem meu caso é que sao imagens Png, e as possiveis soluções que econtrei com LoadStream
o pessoal usava BMp ou JPEG, intaum eu nao sei como devo proceder neste caso...
Ou se alguem souber como puxar uma imagem de um link, para o componente Timage direto, sem precisar fazer o download da imagem, tambem seria util...
Fico grato desde ja.
as fotos deveriam ficar no banco de dados, assim todo ou qualquer cliente que for utilizar o sistema, nao precisará fica colocando as pastas com fotos nas maquinas...
Outro Detalhe achei algumas coisas, porem meu caso é que sao imagens Png, e as possiveis soluções que econtrei com LoadStream
o pessoal usava BMp ou JPEG, intaum eu nao sei como devo proceder neste caso...
Ou se alguem souber como puxar uma imagem de um link, para o componente Timage direto, sem precisar fazer o download da imagem, tambem seria util...
Fico grato desde ja.
GOSTEI 0
Douglas Michelino
01/06/2012
Bom como consegui resolver meu problema, vou postar a solução do mesmo, aqui assim pode ser que sirva para outras pessoas.
Gravar no Banco de Dados SQL,
obs: Estou rodando uma tabela pegando os codigos para realizar a gravação das imagens, por isso duas conexoes.
Para Ler de volta a Imagem em um Componente timage, fiz da seguinte forma
Lendo a Imagem do Banco, SQL
Como estou trabalhando sempre com imagens png, nao me atentei em achar o tipo de imagem do banco de dados, por isso usei
a classe pngFoto: TPNGObject;, direto, mas se voce for trabalhar com diversos tipos de imagens ai, precisa criar uma função para descobrir qual o tipo da imagem.
Isso ai me resolveu o problema, espero que resolva o de alguem tambem, rs, abraços.
Gravar no Banco de Dados SQL,
obs: Estou rodando uma tabela pegando os codigos para realizar a gravação das imagens, por isso duas conexoes.
procedure TForm1.Button2Click(Sender: TObject);
var
Qry : Tsqlquery;
wtipo,windex,wcaminho:string;
begin
Qry:= TsqlQuery.Create(Self);
Qry.SQLConnection:=SqlConnection1;
adoconnection1.Connected:=true;
SqlConnection1.Connected:=true;
adoquery1.Close; adoquery1.SQL.Clear;
adoquery1.SQL.Add(Select *from Items);
adoquery1.Open;
while adoquery1.Eof = false do begin
wtipo:=formatfloat(00,adoquery1.fieldbyname(TP).asfloat);
windex:=formatfloat(00,adoquery1.fieldbyname(ID).asfloat);
wcaminho:=C:\EditorBeta\Images\Items\Geral\+wtipo+windex+.png;
if fileexists(wcaminho) = false then begin
wcaminho:=C:\EditorBeta\Images\Items\Geral\semphoto.png;
end;
edit1.Text:=wcaminho;
edit1.Update;
with Qry do begin
close;
Sql.Clear;
Sql.Add( Insert into ItemsImage (id,tp,image) values ();
sql.Add(:id,:tp,:image));
Params.ParamByName(id).AsInteger:=strtoint(windex);
Params.ParamByName(tp).AsInteger:=strtoint(wtipo);
Params.ParamByName(image).LoadFromFile(wcaminho,FtBlob);
ExecSQL;
end;
adoquery1.Next;
end;
FreeandNil(Qry);
showmessage(Pronto!);
end;
Para Ler de volta a Imagem em um Componente timage, fiz da seguinte forma
Lendo a Imagem do Banco, SQL
procedure TForm1.Button3Click(Sender: TObject);
var
pngFoto: TPNGObject;
msFoto: TMemoryStream;
Qry : Tsqlquery;
begin
msFoto:=TMemoryStream.Create;
Qry := Tsqlquery.Create(self);
Qry.SQLConnection:=SqlConnection1;
adoconnection1.Connected:=true;
SqlConnection1.Connected:=true;
with Qry do
begin
close;
Sql.Clear;
Sql.Add(Select image From ItemsImage Where id = + QuotedStr(editwid.Text));
sql.Add( and tp =+quotedstr(editwtp.Text));
open;
end;
if Qry.RecordCount = 0 then
begin
exit;
end;
TGraphicField(Qry.FieldByName(image)).SaveToStream(msFoto);
msFoto.Position:=0;
pngFoto:=TPNGObject.Create;
pngFoto.LoadFromStream(msFoto);
image1.Picture.Graphic:=pngFoto;
msFoto.Free;
end;
Como estou trabalhando sempre com imagens png, nao me atentei em achar o tipo de imagem do banco de dados, por isso usei
a classe pngFoto: TPNGObject;, direto, mas se voce for trabalhar com diversos tipos de imagens ai, precisa criar uma função para descobrir qual o tipo da imagem.
Isso ai me resolveu o problema, espero que resolva o de alguem tambem, rs, abraços.
GOSTEI 0
Marcos Silva
01/06/2012
Olá pessoal
USO DELPHI 7 - MSSQL SERVER 2008
GOSTARIA DE SALVAR IMAGENS *.JPG, DIRETO NO BANCO, Mesmo ja sabendo do Tamanho.
UTILIZO BDE C/STORE PROC.-
NO DELPHI - PARAMETRO '@IMAGEM' - TIPO ftGraphic
PRC_CLIENTE_IMAGEM_INCLUIR.Close;
PRC_CLIENTE_IMAGEM_INCLUIR.ParamByName('@IMAGEM').LoadFromFile('D:\SAIDA\FOTO.JPG',FtBlob);
PRC_CLIENTE_IMAGEM_INCLUIR.ExecProc;
// *** NA PROCEDURE ****
CREATE PROC PRC_CLIENTE_IMAGEM_INCLUIR
@IMAGEM varbinary(max)
INSERT INTO IMAGEM(IMAGEM) VALUES (@IMAGEM)
ESTA GRAVANDO NO BANCO -->> O PROBLEMA É NAO CONSIGO LER DE VOLTA, EM UM DBIMAGE, Só aparace 10% da Imagem.
E NAO SEI SE O TIPO DE IMAGEM ESTA SENDO GRAVADA CORRETAMENTE.
ALGUEM ja fez isso ?
[09:12:39] >> la pessoal
USO DELPHI 7 - MSSQL SERVER 2008
GOSTARIA DE SALVAR IMAGENS *.JPG, DIRETO NO BANCO, Mesmo ja sabendo do Tamanho.
UTILIZO BDE C/STORE PROC.-
NO DELPHI - PARAMETRO '@IMAGEM' - TIPO ftGraphic
PRC_CLIENTE_IMAGEM_INCLUIR.Close;
PRC_CLIENTE_IMAGEM_INCLUIR.ParamByName('@IMAGEM').LoadFromFile('D:\SAIDA\FOTO.JPG',FtBlob);
PRC_CLIENTE_IMAGEM_INCLUIR.ExecProc;
// *** NA PROCEDURE ****
CREATE PROC PRC_CLIENTE_IMAGEM_INCLUIR
@IMAGEM varbinary(max)
INSERT INTO IMAGEM(IMAGEM) VALUES (@IMAGEM)
ESTA GRAVANDO NO BANCO -->> O PROBLEMA É NAO CONSIGO LER DE VOLTA, EM UM DBIMAGE, Só aparace 10% da Imagem.
E NAO SEI SE O TIPO DE IMAGEM ESTA SENDO GRAVADA CORRETAMENTE.
ALGUEM ja fez isso ?
USO DELPHI 7 - MSSQL SERVER 2008
GOSTARIA DE SALVAR IMAGENS *.JPG, DIRETO NO BANCO, Mesmo ja sabendo do Tamanho.
UTILIZO BDE C/STORE PROC.-
NO DELPHI - PARAMETRO '@IMAGEM' - TIPO ftGraphic
PRC_CLIENTE_IMAGEM_INCLUIR.Close;
PRC_CLIENTE_IMAGEM_INCLUIR.ParamByName('@IMAGEM').LoadFromFile('D:\SAIDA\FOTO.JPG',FtBlob);
PRC_CLIENTE_IMAGEM_INCLUIR.ExecProc;
// *** NA PROCEDURE ****
CREATE PROC PRC_CLIENTE_IMAGEM_INCLUIR
@IMAGEM varbinary(max)
INSERT INTO IMAGEM(IMAGEM) VALUES (@IMAGEM)
ESTA GRAVANDO NO BANCO -->> O PROBLEMA É NAO CONSIGO LER DE VOLTA, EM UM DBIMAGE, Só aparace 10% da Imagem.
E NAO SEI SE O TIPO DE IMAGEM ESTA SENDO GRAVADA CORRETAMENTE.
ALGUEM ja fez isso ?
[09:12:39] >> la pessoal
USO DELPHI 7 - MSSQL SERVER 2008
GOSTARIA DE SALVAR IMAGENS *.JPG, DIRETO NO BANCO, Mesmo ja sabendo do Tamanho.
UTILIZO BDE C/STORE PROC.-
NO DELPHI - PARAMETRO '@IMAGEM' - TIPO ftGraphic
PRC_CLIENTE_IMAGEM_INCLUIR.Close;
PRC_CLIENTE_IMAGEM_INCLUIR.ParamByName('@IMAGEM').LoadFromFile('D:\SAIDA\FOTO.JPG',FtBlob);
PRC_CLIENTE_IMAGEM_INCLUIR.ExecProc;
// *** NA PROCEDURE ****
CREATE PROC PRC_CLIENTE_IMAGEM_INCLUIR
@IMAGEM varbinary(max)
INSERT INTO IMAGEM(IMAGEM) VALUES (@IMAGEM)
ESTA GRAVANDO NO BANCO -->> O PROBLEMA É NAO CONSIGO LER DE VOLTA, EM UM DBIMAGE, Só aparace 10% da Imagem.
E NAO SEI SE O TIPO DE IMAGEM ESTA SENDO GRAVADA CORRETAMENTE.
ALGUEM ja fez isso ?
GOSTEI 0
Fábio Roell
01/06/2012
Poderia postar o codigo fonte todo, para analizarmos?
Att...
Att...
GOSTEI 0
Thiago Jesus
01/06/2012
Boa noite amigos, sou novo aqui no forum, e gostaria da ajuda de voces, pois pesquisei e nao consegui achar um meio de gravar
Imagens no banco de Dados SQL server,2000, 2005, etc.. Utilizando o delphi, se alguem tiver alguma dica de como fazer
o procedimento para gravar o mesmo no banco, e como eu devo fazer para reler essa imagem em um Timage, ficaria agradecido..
Obrigado desde ja.
Imagens no banco de Dados SQL server,2000, 2005, etc.. Utilizando o delphi, se alguem tiver alguma dica de como fazer
o procedimento para gravar o mesmo no banco, e como eu devo fazer para reler essa imagem em um Timage, ficaria agradecido..
Obrigado desde ja.
O ideal é você gravar o endereço da imagem do banco exibir a imagem em um objeto do tipo TImage. Dessa forma você ganha performance, e o seu banco fica mais leve.
GOSTEI 0
Thiago Jesus
01/06/2012
Boa noite amigos, sou novo aqui no forum, e gostaria da ajuda de voces, pois pesquisei e nao consegui achar um meio de gravar
Imagens no banco de Dados SQL server,2000, 2005, etc.. Utilizando o delphi, se alguem tiver alguma dica de como fazer
o procedimento para gravar o mesmo no banco, e como eu devo fazer para reler essa imagem em um Timage, ficaria agradecido..
Obrigado desde ja.
Imagens no banco de Dados SQL server,2000, 2005, etc.. Utilizando o delphi, se alguem tiver alguma dica de como fazer
o procedimento para gravar o mesmo no banco, e como eu devo fazer para reler essa imagem em um Timage, ficaria agradecido..
Obrigado desde ja.
O ideal é você gravar o endereço da imagem do banco exibir a imagem em um objeto do tipo TImage. Dessa forma você ganha performance, e o seu banco fica mais leve.
"gravar o endereço da imagem NO banco".
GOSTEI 0