Ler campo Blob no Firebird 2.5

Delphi

09/12/2010

Utilizo o Delphi 7 e estou tendo problemas com campos Blob do Firebird 2.5.

Na versão 1.5 do Firebird eu usava assim:
Para salvar
TabelaCampoBlob.Assign(Memo1.Lines);


Para mostrar as informações

Memo1.Lines.Text:=TabelaCampoBlob.AsString;


e funcionava normalmente mas ao usar desta forma no Firebird 2.5 o resultado é um número estranho, algo do tipo 8,91238232867462E-313.
Alguém já passou por isso e tem a solução?

Utilizo para a conexão o IBO 4.5.
Quando olha diretamente na tabela o campo esta salvo certo. Somente na hora de exibir que mostra errado.

Não pode ser algo com o Charsets ou com o Collation?
Ou o componente TRichEdit que não suporta?

Desde já agradeço qualquer ajuda.

Armando Filho

Armando Filho

Curtidas 0

Respostas

Leonardo Xavier

Leonardo Xavier

09/12/2010

Você ja tentou utilizar outro componente de texto?
GOSTEI 0
Armando Filho

Armando Filho

09/12/2010

Ainda não tentei - utilizei o RichEdit que acompanha o Delphi 7 e RichEdit da biblioteca JEDI mas ambos não resolveram o meu problema.
Que tipo de componente aconselhas eu usar para campos Blob?
Obrigado
GOSTEI 0
Cristiano Pimenta

Cristiano Pimenta

09/12/2010

Opa e ai Tenta usar o dbmemo, ou o memo mesmo.      
GOSTEI 0
Cristiano Pimenta

Cristiano Pimenta

09/12/2010

ha e em vez de asString tente asBlob
GOSTEI 0
Armando Filho

Armando Filho

09/12/2010

Já fiz todos estes testes e mostra a mesma coisa.
DBMemo, DBRichEdit, Memo, RichEdit
até os da biblioteca JEDI não mostram correto - até a propriedade PlainText foi modificada na tentativa.
GOSTEI 0
Armando Filho

Armando Filho

09/12/2010

Qual versão do Firebird vocês usam?
ou não é Firebird que vocês usam?

GOSTEI 0
Armando Filho

Armando Filho

09/12/2010

Uma outra pergunta.
Qual componente vocês usam para mostra um campo Blob?
Agradeço qualquer dica.
GOSTEI 0
Wilson Junior

Wilson Junior

09/12/2010

Veja como TDBMemo faz e tente tirar fazer igual.
procedure TDBMemo.UpdateData(Sender: TObject);
begin
  FDataLink.Field.Text := Text;
end;



procedure TDBMemo.LoadMemo;
begin
  if not FMemoLoaded and Assigned(FDataLink.Field) and FDataLink.Field.IsBlob then
  begin
    try
      Lines.Text := FDataLink.Field.AsString;
      FMemoLoaded := True;
    except
      { Memo too large }
      on E:EInvalidOperation do
        Lines.Text := Format('(%s)', [E.Message]);
    end;
    EditingChange(Self);
  end;
end;


Espero ter colaborado.
GOSTEI 0
Armando Filho

Armando Filho

09/12/2010

Olá Wilson obrigado por postar.
Onde uso estes procedimentos?
É algum evento do TDBMemo?

GOSTEI 0
Wilson Junior

Wilson Junior

09/12/2010

De um "Ctrl + Clique do mouse" em cima do nome TDBMemo do seu código fonte que ele irá lhe apontar para a declaração do componente e o mesmo terá estas rotinas que postei.

Espero ter colaborado.
GOSTEI 0
Armando Filho

Armando Filho

09/12/2010

Wilson achei os procedimentos mas não sei o que mexer
GOSTEI 0
Armando Filho

Armando Filho

09/12/2010

Solução...
Mudei de Blob para Varchar 2000

Obrigado a todos pelos posts.

GOSTEI 0
POSTAR