Buscar imagem no BD

Delphi

14/09/2009

Tenho um aplicativo composto por formulários com foto, rodando em rede. Quando quando faço uma pesquisa a partir do servidor consigo trazer para o formulário a foto correspondente, porém quando faço de outra estação nào consigo exibir a foto. Qual o caminho deve ser colocado no código para resolver esse problema?

Estou usando esse caminho:

fot:=´C:\caminho\foto\´+edtMatricula.Text+´.bmp´;
Foto.Picture.LoadFromFile(fot);

Aguardo essa ajuda. Obrigado


Fdamds

Fdamds

Curtidas 0

Respostas

Builder

Builder

14/09/2009

Teria que mapear a unidade do servidor onde estão as fotos, por exemplo:

No windows, mapear a letra S para representar o C: do servidor e o código ficaria mais ou menos assim :

fot:=´C:\caminho\foto\´+edtMatricula.Text+´.bmp´;

if not fileexists(fot) then
fot:=´S:\caminho\foto\´+edtMatricula.Text+´.bmp´;

Tenta buscar a foto no C: (local) e caso ela não exista busca no S: (servidor)


Porém, a solução ideal é gravar as fotos (com tamanho padronizado) no próprio banco de dados. No passado guardar imagens poderia inflar demais o BD, mas hoje com a configuração das máquinas isto ficou trivial (aguentam o tranco com folga).

O fato de ter que compartilhar o diretório de fotos (ou qualquer outro) do servidor fica uma brecha para problemas de segurança (arquivos deletados, renomeados, sobrescritos, etc.) além de causar problemas se quiser fazer acesso via web ou imprimir fotos em relatórios.


GOSTEI 0
Fdamds

Fdamds

14/09/2009

Obrigado builder,

Sou iniciante em programação.

Como ficaria o código no caso das fotos estarem no banco de dados interbase?


GOSTEI 0
Builder

Builder

14/09/2009

Eu escrevi uma rotina para ler e gravar imagens baseado neste post:

http://forum.devmedia.com.br/viewtopic.php?t=65822&start=0&postdays=0&postorder=asc&highlight=

Dependendo da versão do delphi, do firebird e do componente de acesso que estiver utilizando, pode ser a solução que precisa.


GOSTEI 0
Pestana_

Pestana_

14/09/2009

Boa tarde builder!

Aproveitando o tópico gostaria de fazer uma pergunta. Houvi dizer que tem gente que mapeia a unidade do servidor em tempo de execução utiliza a foto depois desfaz o mapeamento deixando como estava antes. O que você diria sobre esta técnica? é seguro fazer isso?

O fato de ter que compartilhar o diretório de fotos (ou qualquer outro) do servidor fica uma brecha para problemas de segurança (arquivos deletados, renomeados, sobrescritos, etc.) além de causar problemas se quiser fazer acesso via web ou imprimir fotos em relatórios.


essa é a razão porque eu não compartilho nada!


Obrigado!


GOSTEI 0
Builder

Builder

14/09/2009

Pestana, poderia usar o Delphi (função WinExec ou similar) para executar o seguinte comando DOS:

NET USE S: \\SERVIDOR\DIRETORIOCOMPARTILHADO /USER:CONVIDADO SENHA /YES

(A senha é opcional - se foi definida alguma para o convidado)
( O YES no final é para forçar o mapeamento - se tiver algum anterior, será sobrescrito).

Carregue a imagem e depois execute outro comando DOS:

NET USE S: /DELETE

Esta solução pode ser problemática em versões diferentes do Windows além de ter algum delay (tempo espera) maior para carregar a imagem.


GOSTEI 0
Pestana_

Pestana_

14/09/2009

Pestana, poderia usar o Delphi (função WinExec ou similar) para executar o seguinte comando DOS: NET USE S: \\SERVIDOR\DIRETORIOCOMPARTILHADO /USER:CONVIDADO SENHA /YES (A senha é opcional - se foi definida alguma para o convidado) ( O YES no final é para forçar o mapeamento - se tiver algum anterior, será sobrescrito). Carregue a imagem e depois execute outro comando DOS: NET USE S: /DELETE Esta solução pode ser problemática em versões diferentes do Windows além de ter algum delay (tempo espera) maior para carregar a imagem.


builder, obrigado responder!!!

...Esta solução pode ser problemática em versões diferentes do Windows...
seria por questões de segurança?


GOSTEI 0
Builder

Builder

14/09/2009

A cautela de executar comandos pelo Delphi seria mais por questões de compatibilidade (estou presumindo) do tipo:

Funcionou muito bem no XP Professinal
No Windows XP Home Edition ...
No Windows Vista ...
No Windows Seven ...
No Windows 2003 ...
No Windows XXX 64 bits ...

Se mudar a sintaxe/comando no sistema operacional o código no Delphi irá falhar (ou o WinExec tem problemas no sistema XYZ). E as questões de segurança ainda pesam bastante, afinal, o usuário faz cada coisa que chega a dar um arrepio na espinha, além de que alguns vírus/worms infectam compartilhamentos, etc.

Se a solução fosse local (só no servidor), executar estes comandos externos teriam resultados muito mais previsíveis (ex.: executar programa externo para fazer backup utilizando o gbak do firebird).

Dependendo da urgência, pode-se valer daquela velha máxima: Vamos fazer com o que temos e depois procuramos a solução ideal.


GOSTEI 0
Pestana_

Pestana_

14/09/2009

...o usuário faz cada coisa que chega a dar um arrepio na espinha...
:lol:


blz, entendi o que você quiz dizer, muito obrigado!


GOSTEI 0
POSTAR