Array
(
)

Gravação de Imagem em BD

Armindo
   - 07 fev 2006

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.


Martins
   - 07 fev 2006

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

Opd = OpenPictureDialog.

#Código


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

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



Armindo
   - 07 fev 2006


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

Opd = OpenPictureDialog.

#Código


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.


Martins
   - 07 fev 2006

Entendido


Citação:
C:\MeuPrograma\Imagens\Image01.jpg.
passaria a ser

Citação:
\\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?


Aroldo Zanela
   - 07 fev 2006

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]


Armindo
   - 07 fev 2006


Citação:
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]


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


Renato.pavan
   - 08 fev 2006

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.