Imagem no tiOPF

18 views
Skip to first unread message

edregis

unread,
May 11, 2009, 4:55:09 PM5/11/09
to tiOPF.br
Salve pessoal!

Alguém aqui salva Imagem (bmp, jpeg, etc) no banco utilizando o tiOPF?
Como declaram a propriedade no BOM? Como um Stream?
Procurei nos exemplos do site do tiOPF, e tambem no forum
internacional, mas não obtive sucesso.
Se alguem puder ajudar, eu agradeço e muito, porque tá meio confuso...

Até mais,

Edelson.

Diogo Augusto Pereira

unread,
May 11, 2009, 8:30:34 PM5/11/09
to tiop...@googlegroups.com
Olá,

Tu podes declarar a propriedade como TBitmap (ou outra classe gráfica) e carregá-la usando Stream.

Primeiro carrega o valor do banco para um stream:
      AssignFieldAsStream('Campo', pStream);

E depois seta a propriedade:
      Propriedade.LoadFromStream(pStream);


Diogo Augusto Pereira

2009/5/11 edregis <edr...@gmail.com>

edregis

unread,
May 12, 2009, 8:46:01 AM5/12/09
to tiOPF.br
Valew Diogo, vou fazer um teste aqui, e depois posto o resultado...

Edelson.


On 11 maio, 21:30, Diogo Augusto Pereira <diogoa...@gmail.com> wrote:
> Olá,
>
> Tu podes declarar a propriedade como TBitmap (ou outra classe gráfica) e
> carregá-la usando Stream.
>
> Primeiro carrega o valor do banco para um stream:
>       AssignFieldAsStream('Campo', pStream);
>
> E depois seta a propriedade:
>       Propriedade.LoadFromStream(pStream);
>
> Diogo Augusto Pereira
>
> 2009/5/11 edregis <edre...@gmail.com>

edregis

unread,
May 12, 2009, 9:29:37 AM5/12/09
to tiOPF.br
Diogo, só mais uma dúvida...
Você implementa isso no próprio BOM? E convertre para stream através
de Get e Set da propriedade?
E como AutoMapping funciona? Ou tem que ser HardCoded?

Grato,

Edelson.


On 11 maio, 21:30, Diogo Augusto Pereira <diogoa...@gmail.com> wrote:
> Olá,
>
> Tu podes declarar a propriedade como TBitmap (ou outra classe gráfica) e
> carregá-la usando Stream.
>
> Primeiro carrega o valor do banco para um stream:
>       AssignFieldAsStream('Campo', pStream);
>
> E depois seta a propriedade:
>       Propriedade.LoadFromStream(pStream);
>
> Diogo Augusto Pereira
>
> 2009/5/11 edregis <edre...@gmail.com>

Diogo Augusto Pereira

unread,
May 12, 2009, 1:54:01 PM5/12/09
to tiop...@googlegroups.com
Quando precisei fazer isso foi no modo HardCoded.

E a implementação foi feita nos métodos de mapeamento.

Diogo

-----Mensagem original-----
De: tiop...@googlegroups.com [mailto:tiop...@googlegroups.com] Em nome de
edregis
Enviada em: terça-feira, 12 de maio de 2009 10:30
Para: tiOPF.br
Assunto: Re: Imagem no tiOPF

edregis

unread,
May 12, 2009, 3:29:48 PM5/12/09
to tiOPF.br
Era onde eu estava tentando implementar.
Mas esta dando um acess violation na hora salvar a imagem no banco.
No meu create estou fazendo:

procedure TVisImagem_Create.SetupParams;
var
lData: TImagem;
stream: TStream;
begin
lData := Visited as TImagem;
lData.OID.AssignToTIQuery('OID', Query);
Query.ParamAsInteger['Foto_Id'] := lData.FotoId;
Query.ParamAsString['Foto_Descricao'] := lData.FotoDescricao;

stream := TStream.Create; // criando minha stream
lData.FotoImagem.SaveToStream(stream); // atribuindo o conteúdo da
minha propriedade FotoImagem para a stream
Query.AssignParamFromStream('Foto_Imagem', stream); // jogando a
stream para o parametro Foto_Imagem, que é o campo da minha tabela
end;

só que dá Acess Violation...
estou usando SqlServer, e o meu campo está como Image, que é tipo o
Blob
se eu tento gravar somente os outros campos que são varchar e integer
ele vai numa boa...

esse tiOPF é bem complicadinho... tem muitos recursos, mas até o cara
entender como funciona demora...
já tentei o help dele, os demos, a lista internacional... mas não tem
nada exemplificando o que eu quero fazer.




On 12 maio, 14:54, "Diogo Augusto Pereira" <diogoa...@gmail.com>
wrote:

Diogo Augusto Pereira

unread,
May 12, 2009, 9:06:57 PM5/12/09
to tiop...@googlegroups.com
TStream não é uma classe abstrata?

Tente fazer dessa forma:

  Stream:= TMemoryStream.Create;
  try
    lData.FotoImagem.SaveToStream(Stream);
    Query.Params.SetValueAsStream('FotoImagem', Stream);
  finally
    Stream.Free;
  end;

É meio complicado mesmo, o tiOPF tem muitos recursos e N formas de usar...

2009/5/12 edregis <edr...@gmail.com>

edregis

unread,
May 13, 2009, 9:20:12 AM5/13/09
to tiOPF.br
É verdade, eu já vi muitos exemplos implementados de maneiras
diferente, mas que fazem a mesma coisa.

Seguinte, está dando erro nessa linha que voce sugeriu:
Query.Params.SetValueAsStream('FotoImagem', Stream);
Na minha Query não existe a propriedade Params, e consequentemente não
consigo acessar o método SetValueAsStream
Eu dei uma olhada na unit tiQuery, e vi que essa propriedade não
existe na classe TtiQuery
Como voce faz para usa-la?

Edelson.


On 12 maio, 22:06, Diogo Augusto Pereira <diogoa...@gmail.com> wrote:
> TStream não é uma classe abstrata?
>
> Tente fazer dessa forma:
>
>   Stream:= TMemoryStream.Create;
>   try
>     lData.FotoImagem.SaveToStream(Stream);
>     Query.Params.SetValueAsStream('FotoImagem', Stream);
>   finally
>     Stream.Free;
>   end;
>
> É meio complicado mesmo, o tiOPF tem muitos recursos e N formas de usar...
>
> 2009/5/12 edregis <edre...@gmail.com>

Diogo Augusto Pereira

unread,
May 13, 2009, 8:19:57 PM5/13/09
to tiop...@googlegroups.com
Ah desculpe, o correto é:
QueryParams.SetValueAsStream('FotoImagem', Stream);

Isso no método SetupParams. E herdei a classe de TVisDBAutoGenUpdate.

2009/5/13 edregis <edr...@gmail.com>

edregis

unread,
Jun 1, 2009, 8:52:43 AM6/1/09
to tiOPF.br
Obrigado Diogo.

Consegui fazer funcionar.
Estou usando a property no BOM como TMemoryStream mesmo, depois é só
converter para Jpeg.
Consegui, via Hard Coded, fazer incluir e recuperar o registro, mas to
apanhando para fazer pesquisa, update e delete.
Já implementei direitinho os Visitors, só que não estou conseguindo
"chama-los"... inclusive enviei um outro post aqui no grupo sobre
isso...

Abraços,

Edelson.


On 13 maio, 21:19, Diogo Augusto Pereira <diogoa...@gmail.com> wrote:
> Ah desculpe, o correto é:
> QueryParams.SetValueAsStream('FotoImagem', Stream);
>
> Isso no método SetupParams. E herdei a classe de TVisDBAutoGenUpdate.
>
> 2009/5/13 edregis <edre...@gmail.com>
Reply all
Reply to author
Forward
0 new messages