GARANTIR DESCONTO

Fórum Gravar e Ler imagen em SQL com Delphi #417907

01/06/2012

0

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.
Douglas Michelino

Douglas Michelino

Responder

Post mais votado

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.

Thebluemonkey

Thebluemonkey
Responder

Gostei + 1

Mais Posts

01/06/2012

Douglas Michelino

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.
Responder

Gostei + 0

02/06/2012

Douglas Michelino

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.


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.
Responder

Gostei + 0

19/02/2013

Marcos Silva

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 ?

Responder

Gostei + 0

06/03/2013

Fábio Roell

Poderia postar o codigo fonte todo, para analizarmos?

Att...
Responder

Gostei + 0

06/03/2013

Thiago Jesus

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.


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.
Responder

Gostei + 0

06/03/2013

Thiago Jesus

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.


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".
Responder

Gostei + 0

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

Aceitar