Gravar imagem no Banco Firebird com Delphi Xe

Delphi

11/05/2016

Boa Noite,
Preciso Fazer algo muito simples:
01 Pegar uma foto em uma Pasta e Grava-la no Banco de Dados
02 - Pegar esta foto gravada no banco e mostra-la em um TImage.

Já peguei centenas de exemplos na Net mas nenhum funcionou corretamente, alguém tem um exemplo simples de cada uma destas funções que funcione.
Obrigado.

Ambiente: SO - Windows 8.1
Delphi - XE
Banco - Firebird 2
Amauri Alves

Amauri Alves

Curtidas 0

Respostas

Dorivan Sousa

Dorivan Sousa

11/05/2016

certo eu uso FDCommand (Firedac) e MemoryStream, eu pego a imagem diretamente do Image, pra carregar a imagem no Imagem é so usar o loadfromfile

gravando a imagem
try
      AbreTrans(Transacao); //aqui é uma funcao que uso pra iniciar a transação
      Query.Close;
      Query.CommandText.Clear;
      Query.CommandText.Add('Insert Into ALUNOS_ARQUIVOS(ALUNO, LOJA, TIPO, INDICE, ARQUIVO)');
      Query.CommandText.Add('Values (:CODIGO, :LOJA, :TIPO, :INDICE, :ARQUIVO)');
      Query.ParamByName('CODIGO').AsString:=Codigo;
      Query.ParamByName('LOJA').AsString:=gLoja_Padrao;
      Query.ParamByName('TIPO').AsInteger:=Tipo;
      Query.ParamByName('Indice').AsInteger:=Indice;

      Imagem.Picture.Graphic.SaveToStream(st);
      st.Seek(0,0);
      Query.ParamByName('Arquivo').LoadFromStream(St, ftGraphic); //no caso a imagem é um JPG
      Query.Execute;
      SalvaTrans(Transacao);
      Result:=True;
    except
      on E: exception do
      begin
        Result:=False;
        FechaTrans(Transacao);                //tratar de quem
        TraduzException('Erro ao grava Arquivo.'+sLineBreak+e.message,nil);
        Abort;
      end;
    end;


recuperando
      AbreTrans(Transacao);
      Query.Close;
      Query.SQL.Clear;
      Query.SQL.Add('select ARQUIVO from ALUNOS_ARQUIVOS');
      Query.SQL.Add('where ALUNO = '+QuotedStr(Codigo));
      Query.SQL.Add('and LOJA = '+QuotedStr(gLoja_Padrao));
      Query.SQL.Add('and Tipo = '+IntToStr(Tipo));
      Query.SQL.Add('and Indice = '+IntToStr(Indice)); //somente um arquivo por operacao
      Query.Open;
      if not Query.IsEmpty then
      begin
        if not Query.FieldByName('ARQUIVO').isNull then
        begin
          TBlobField(Query.FieldByName('ARQUIVO')).SaveToStream(St);
          St.Position:=0;
          Jpg.LoadFromStream(st);
          Imagem.Picture.Assign(Jpg);

          Result:=True;
        end;
      end;

      FechaTrans(Transacao);
    except
      on E: exception do
      begin
        Result:=False;
        FechaTrans(Transacao); //tratar de quem
        TraduzException('Erro ao Recuperar Arquivo.'+sLineBreak+e.message,nil);
        Abort;
      end;
    end;


detalhe nao funciona com IBX. (paleta interbase)
GOSTEI 0
POSTAR