Buscar imagem no BD
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
Estou usando esse caminho:
fot:=´C:\caminho\foto\´+edtMatricula.Text+´.bmp´;
Foto.Picture.LoadFromFile(fot);
Aguardo essa ajuda. Obrigado
Fdamds
Curtidas 0
Respostas
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.
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
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?
Sou iniciante em programação.
Como ficaria o código no caso das fotos estarem no banco de dados interbase?
GOSTEI 0
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.
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_
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?
essa é a razão porque eu não compartilho nada!
Obrigado!
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
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.
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_
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
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.
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_
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