Fórum Erro em recuperar imagem no Oracle #370173

02/05/2009

0

Pessoal

Estou com um problema em recuperar uma imagem no oracle e exibir em um TImage

Segue o codigo usado e o erro:
With DM.odsUsuarioOra do
begin
try
Active := true;
Open;
BlobStream := TBlobStream.Create(DM.odsUsuarioOra.Fieldbyname(´USIMAGEM´) as TBlobField, bmRead);[b:ba778ed59a] {O erro acontece aqui[/b:ba778ed59a]
Stream:= CreateBlobStream(DM.odsUsuarioOra.FieldByName(´USIMAGEM´),bmRead);
ImagemJPG := TJPEGImage.Create;
ImagemJPG.LoadFromStream(Stream);
Image.Picture.Assign(ImagemJPG);
FileStream := TFileStream.Create(´C:\TEMP\MEU_DOC.DOC´, fmCreate or fmOpenWrite);
FileStream.CopyFrom(BlobStream, 0);
ShowMessage(´Documento salvo em disco. Clique em [OK] para prosseguir ...´);
except
end;
FileStream.Free;
BlobStream.Free;
end;

[b:ba778ed59a]Ja fiz varias vezes a mesma rotina em outras versões do delphi e nunca deu esse erro
Estou usando o Delphi 2009[/b:ba778ed59a]
[b:ba778ed59a]Erro : ´Invalid class typecast´[/b:ba778ed59a]

Alguem pode me ajudar


Att


Marcos P. Marchette


Marcosmp

Marcosmp

Responder

Posts

03/05/2009

Discorpio

Boa tarde Marcosmp.

Analisando o seu código, creio eu que voce está pecando aqui:


[color=blue:12f1cfad2e]With DM.odsUsuarioOra do[/color:12f1cfad2e]
begin
try
Active := true;
Open;
BlobStream := TBlobStream.Create([color=blue:12f1cfad2e]DM.odsUsuarioOra[/color:12f1cfad2e].Fieldbyname(´USIMAGEM´) as TBlobField, bmRead); {O erro acontece aqui
Stream:= CreateBlobStream([color=blue:12f1cfad2e]DM.odsUsuarioOra[/color:12f1cfad2e].FieldByName(´USIMAGEM´),bmRead);
ImagemJPG := TJPEGImage.Create;
ImagemJPG.LoadFromStream(Stream);
Image.Picture.Assign(ImagemJPG);
FileStream := TFileStream.Create(´C:\TEMP\MEU_DOC.DOC´, fmCreate or fmOpenWrite);
FileStream.CopyFrom(BlobStream, 0);
ShowMessage(´Documento salvo em disco. Clique em [OK] para prosseguir ...´);
except
end;
FileStream.Free;
BlobStream.Free;
end;
[/code]


Responder

Gostei + 0

03/05/2009

Discorpio

Olá, sou eu de novo.

Me perdoe, cliquei no botão errado,

vejamos o seu código:

[color=blue:f81f08a3dd]With DM.odsUsuarioOra do[/color:f81f08a3dd] begin try Active := true; Open; BlobStream := TBlobStream.Create([color=blue:f81f08a3dd]DM.odsUsuarioOra[/color:f81f08a3dd].Fieldbyname(´USIMAGEM´) as TBlobField, bmRead); {O erro acontece aqui Stream:= CreateBlobStream([color=blue:f81f08a3dd]DM.odsUsuarioOra[/color:f81f08a3dd].FieldByName(´USIMAGEM´),bmRead); ImagemJPG := TJPEGImage.Create; ImagemJPG.LoadFromStream(Stream); Image.Picture.Assign(ImagemJPG); FileStream := TFileStream.Create(´C:\TEMP\MEU_DOC.DOC´, fmCreate or fmOpenWrite); FileStream.CopyFrom(BlobStream, 0); ShowMessage(´Documento salvo em disco. Clique em [OK] para prosseguir ...´); except end; FileStream.Free; BlobStream.Free; end;


Quando voce utiliza a instrução With DM.odsUsuarioOra, voce pode utilizar o seus métodos dentro do bloco sem precisar repeti-la.

A meu ver voce pode codificar assim sem problemas.

  With DM.odsUsuarioOra do 
  try 
     Active := true; 
     Open; 
     BlobStream := TBlobStream.Create(Fieldbyname(´USIMAGEM´) as TBlobField, bmRead); {O erro acontece aqui 
     Stream:= CreateBlobStream(FieldByName(´USIMAGEM´),bmRead); 
    ImagemJPG := TJPEGImage.Create; 
    ImagemJPG.LoadFromStream(Stream); 
    Image.Picture.Assign(ImagemJPG); 
    FileStream := TFileStream.Create(´C:\TEMP\MEU_DOC.DOC´, fmCreate or fmOpenWrite); 
    FileStream.CopyFrom(BlobStream, 0); 
    ShowMessage(´Documento salvo em disco. Clique em [OK] para prosseguir ...´); 
  finally 
    FileStream.Free; 
    BlobStream.Free; 
  end; 


Isto não quer dizer que resolverá o problema, porque o erro reportado ´Invalid TypeCast´ significa que voce está tentando fazer uma conversão de entre tipos incompatíveis de classes, ou seja uma classe não descende da outra e nem de um possível ancestral.

Isto acontece quando tentamos passar algum parâmetro para função.

Se o erro está acontecendo aqui:

    BlobStream := TBlobStream.Create(Fieldbyname(´USIMAGEM´) as TBlobField, bmRead); {O erro acontece aqui 


Repare que voce coloca um espaço entre Fieldbyname(´USIMAGEM´) e ´asTBlobField´, quando voce deverá escrever é um ponto, pois ´asTBlobField´ é um também um método de Fieldbyname, assim:

    BlobStream := TBlobStream.Create(Fieldbyname(´USIMAGEM´).asTBlobField, bmRead); {O erro acontece aqui 



Responder

Gostei + 0

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

Aceitar