LER STRING COMPLETA DO CAMPO BLOB - DELPHI

Delphi

Firebird

10/06/2022

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

Curtidas 0
POSTAR