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
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
Curtir tópico
+ 0
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]
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:
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.
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:
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:
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
Clique aqui para fazer login e interagir na Comunidade :)
Inserção de url
Descrição
Url
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.
Aceitar