GARANTIR DESCONTO

Fórum Ler campo Blob no Firebird 2.5 #392128

09/12/2010

0

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

Responder

Posts

09/12/2010

Leonardo Xavier

Você ja tentou utilizar outro componente de texto?
Responder

Gostei + 0

09/12/2010

Armando Filho

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
Responder

Gostei + 0

09/12/2010

Cristiano Pimenta

Opa e ai Tenta usar o dbmemo, ou o memo mesmo.      
Responder

Gostei + 0

09/12/2010

Cristiano Pimenta

ha e em vez de asString tente asBlob
Responder

Gostei + 0

10/12/2010

Armando Filho

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

Gostei + 0

10/12/2010

Armando Filho

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

Responder

Gostei + 0

10/12/2010

Armando Filho

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

Gostei + 0

13/12/2010

Wilson Junior

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

Gostei + 0

13/12/2010

Armando Filho

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

Responder

Gostei + 0

13/12/2010

Wilson Junior

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

Gostei + 0

13/12/2010

Armando Filho

Wilson achei os procedimentos mas não sei o que mexer
Responder

Gostei + 0

14/12/2010

Armando Filho

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

Obrigado a todos pelos posts.

Responder

Gostei + 0

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

Aceitar