07/02/2006

Gravação de Imagem em BD

Há meses tento colocar opção para se cadastrar imagens de clientes no meu sistema.
Após várias análises cheguei à conclusão que a melhor opção é gravar no banco de dados apenas o path onde o arquivo da imagem está, principalmente em virtude da performance.
Pergunto: como eu poderia fazer isso? Minha maior dúvida está em relação à questão da rede.
Por exemplo:
No cadastro do cliente 1, no campo ´Foto´, gravo C:\MeuPrograma\Imagens\Cli01.jpg. No cadastro de cliente coloco um componente image e quando o registro é acessado, capto a imagem e mostro no image. Até aqui tudo certo. Mas quando esse registro for acessado por uma estação de rede, o arquivo não vai mais estar em C:\... e sim em \\Servidor\C:\... Mesma coisa acontece se a imagem for inserida através da estação. Aí o path gravado ficaria \\Servidor\C:\MeuPrograma\Imagens\Cli01.jpg. Aí o problema ocorreria quando o acesso ao registro fosse no servidor.

Alguém pode me ajudar?

Delphi 7 Firebird 1.5

Obrigado.


Armindo

Respostas

07/02/2006

Martins

Pq vc não usa um OpenPictureDialog para pegar a imagem e o caminho dela?

Opd = OpenPictureDialog.

Opd.Execute;
...
Tabela.FieldByName(´C_Foto´).AsString := Opd.FileName;
...

Image1.Picture.LoadFromFile(Tabela.FieldByName(´C_Foto´).AsString;
...



Responder Citar

07/02/2006

Armindo

Pq vc não usa um OpenPictureDialog para pegar a imagem e o caminho dela? Opd = OpenPictureDialog.
Opd.Execute;
...
Tabela.FieldByName(´C_Foto´).AsString := Opd.FileName;
...

Image1.Picture.LoadFromFile(Tabela.FieldByName(´C_Foto´).AsString;
...


Obrigado pela resposa, mas acho que você não entendeu minha dúvida.
Seguinte:
Para gravar o path tá beleza. Meu problema é qdo vou mostrar a imagem no Timage.
Vamos a um exemplo prático:
o Valor gravado em Tabela.FieldByName(´C_Foto´).AsString é C:\MeuPrograma\Imagens\Image01.jpg. Para mostrar a imagem, executo a seguinte rotina no evento on DataChange do DataSource:
Image1.Picture.LoadFromFile(Tabela.FieldByName(´C_Foto´).AsString;
O usuário estando no servidor, vai funcionar beleza, mas se o usuário estiver utilizando o prg numa estação, o path C:\MeuPrograma\Imagens\ não vai existir, pois essa pasta é do servidor, entendeu?

Obrigado.


Responder Citar

07/02/2006

Martins

Entendido

C:\MeuPrograma\Imagens\Image01.jpg.
passaria a ser
\\Servidor\C:\MeuPrograma\Imagens\Image01.jpg.


As imagens são gravadas apartir do servidor, das estações, não existe um local onde essas imagens sejam armazenadas por padrão?


Responder Citar

07/02/2006

Aroldo Zanela

Colega,

Acredito que você tenha escolhido a pior forma de lidar com ´fotos´, pois o armazenamento no banco é a melhor forma de se garantir a integridade.
Além disto, existem componentes especializados para o manuseio de imagens como o EDBImage que nos foi apresentado pela colega Lucania Salvatore e pode ser baixado gratuitamente do [url=http://cc.borland.com/Item.aspx?id=22742]link[/url].
Entretanto, no seu caso, acho que a forma de resolver mais rapidamente e criar um arquivo INI para apontar o local onde estão armazenadas.[/url]


Responder Citar

07/02/2006

Armindo

[quote:c5d19b34f2=´Aroldo Zanela´]Colega,

Acredito que você tenha escolhido a pior forma de lidar com ´fotos´, pois o armazenamento no banco é a melhor forma de se garantir a integridade.
Além disto, existem componentes especializados para o manuseio de imagens como o EDBImage que nos foi apresentado pela colega Lucania Salvatore e pode ser baixado gratuitamente do [url=http://cc.borland.com/Item.aspx?id=22742]link[/url].
Entretanto, no seu caso, acho que a forma de resolver mais rapidamente e criar um arquivo INI para apontar o local onde estão armazenadas.[/url][/quote:c5d19b34f2]

Testei uma rotina para armazenar no BD, mas fica muito lento.


Responder Citar

08/02/2006

Renato.pavan

Tente gravar no banco so o nome do arquivo Cli01.jpg, ai vc cria um arquivo ini CaminhoImagens, e nesse parametro vc coloca o path completo da imagem, depois no delphi vc carrega esse path para uma variavel na inicializaçao do seu sistema e trabalha com esta varialvel + o nome do arquivo gravado no bd.

Talvez isso possa resolver seu problema.

Renato.


Responder Citar