LER STRING COMPLETA DO CAMPO BLOB - DELPHI

10/06/2022

0

Fala galera!

Pessoal, gostaria de pedir a ajuda de vocês em uma questão que estou batendo a cabeça e não consigo achar uma solução.

É o seguinte, estou desenvolvendo um sistema de cadastro de produtos em Delphi.
Esse sistema tem somente um form, pois é apenas para cadastro mesmo. E nesse form, tenho alguns campos, buttons e um TImage.

O Banco de dados está hospedado em um data center, e ele é Firebird na versão 2.5.
Dentro deste banco tenho uma tabela (Tab_Produtos) que contendo os seguintes campos:

> CODIGO - Integer
> EAN - Char (13)
> NOMEPRODUTO - Varchar (100)
> FOTO - Blob SubType(Text)
> PRECO - Decimal(15,2)

A comunicação é feita tranquilamente, os dados são enviados e recebidos também via JSON.
Converto a imagem em Base64, para salvar no campo FOTO, e a String da foto chega completa no banco, assim como todos os outros dados também.

A questão é que, preciso em um determinado momento retornar essas informações, inclusive a string da foto para converte-la de Base64 para JPGE, PNG ou Bitmap.

Porém, nesse momento a consulta não retorna a string inteira e a imagem acaba ficando incompleta.

Os dados da consulta de retorno eu estou armazenando em um MemTable.

Segue código que faz a consulta:

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
procedure TDmProdutos.ListarProdutos;

  var

  Resp : IResponse;

  Begin

    Resp := TRequest.New.BaseURL(URL)
            .Resource('produtos')
            .Accept('application/json')
            .BasicAuthentication(USER,PASSWORD)
            .DataSetAdapter(TabProdutos)
            .Get;

    if (Resp.StatusCode = 0) then
      raise Exception.Create('Não foi possível acessar o servidor!')
    else if (Resp.StatusCode <> 200) then
      raise Exception.Create(Resp.Content);

  End;


Ex.: Quando envio a string da foto ela tem um size de 25000 caracteres. E quando faço o retorno, a string vem com 4500 caracteres.

Obs.: Não tenho muita experiência na área ainda.

Alguém sabe como posso fazer para recuperar a string inteira?

Vou deixar abaixo o códiog que estou fazendo a leitura dentro da MemTable após fazer a consulta.

Obrigado desde já, galera! ;)

procedure TFrm_ProdutoCadastro.Btn_BuscarRegistrosClick(Sender: TObject);

  var

  Foto64 : string;
  Texto : TStream;

  Begin

    With DmPRodutos.TabProdutos do
    Begin

      if FieldByName('situacao').value = 'A' then
        Cb_Ativo.Checked := True
      else
        Cb_Ativo.Checked := False;

      Caixa_Codigo.Text         := FieldByName('codigo').value;
      Caixa_Ean.Text            := FieldByName('ean').value;
      Caixa_NomeProduto.Text    := FieldByName('produto').value;
      Caixa_Gramatura.Text      := FieldByName('gramatura').value;
      Caixa_Unidade.Text        := FieldByName('unidade').value;
      Caixa_IDSetor.Text        := FieldByName('idsetor').value;
      Caixa_Setor.Text          := FieldByName('setor').value;
      Caixa_Marca.Text          := FieldByName('marca').value;
      Caixa_PrecoGondola.Text   := FieldByName('precogondola').value;
      Caixa_PrecoPromocao.Text  := FieldByName('precopromocao').value;
      Caixa_Descricao.Text      := FieldByName('descricao').value;

      Texto := CreateBlobStream(FieldByName('foto'),bmRead);

      Memo1.Lines.LoadFromStream(Texto);

    End;

  End;
Jonas Gonçalves

Jonas Gonçalves

Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar