Fórum Gravar e Ler imagen em SQL com Delphi #417907
01/06/2012
0
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
Curtir tópico
+ 0Post mais votado
01/06/2012
Eu mesmo gravo apenas o caminho para a pasta que contem as imagens e faço o componente buscar deste endereco.
Thebluemonkey
Gostei + 1
Mais Posts
01/06/2012
Douglas Michelino
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
02/06/2012
Douglas Michelino
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
19/02/2013
Marcos Silva
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
06/03/2013
Fábio Roell
Att...
Gostei + 0
06/03/2013
Thiago Jesus
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
06/03/2013
Thiago Jesus
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
Clique aqui para fazer login e interagir na Comunidade :)