GARANTIR DESCONTO

Fórum Abrir uma imagem localizada em uma pasta no servidor #375561

02/10/2009

0

Tenho um aplicativo que possui um formulário com a foto do cliente.

Sem compartilhar a pasta onde estão localizadas as fotos, como seria o código para abri-la em outro cumputador na rede.


Fdamds

Fdamds

Responder

Posts

03/10/2009

Afarias

vc teria q usar um sistema cliente/servidor. sua aplicação seria cliente e vc teria q construir um servidor para fornecer as fotos (usando Sockets por exemplo) -- ou -- usar um servidor padrão como ftp, http, ssh, etc.

um servidor de banco de dados tb funcionaria, desde q o SGBD permita que vc crie uma função para dinamicamente carregar o arquivo e transmití-lo como resposta a um comando SQL de sua aplicação.


T+


Responder

Gostei + 0

03/10/2009

Fdamds

Obrigado Afarias,


Então como seria o código para gravar a foto no banco e trazê-la para o formulário no computador cliente?


Responder

Gostei + 0

03/10/2009

Afarias

|Então como seria o código para gravar a foto no banco e trazê-la para o
|formulário no computador cliente?

Eu não disse para gravar a imagem no banco, eu disse para construir uma função (o q pode não ser exatamente uma tarefa simples) que carrega-se o arquivo do disco e transmitisse usando o protocolo do banco.

Entretanto, gravar a imagem no banco de dados em lugar do disco tb é uma opção (q tem seu lado positivo e negativo)

Como gravar e recuperar uma imagem de um banco de dados pode depender do banco de dados e componentes de conexão q vc usa. Se tiver interesse dê mais detalhes e se eu puder passarei um exemplo.

Basicamente vc cria um campo tipo BLOB no banco de dados, e usa funções como LoadFromStream/LoadFromFile e SaveToStream/SaveToFile para carregar/salvar a imagem para o campo.

T+


Responder

Gostei + 0

04/10/2009

Fdamds

Obrigado Afarias pela disposição em ajudar.

Meu aplicativo foi desenvolvido para realizar controle escolar. Dentre os diversos formulários, existe um que realiza o cadastro de alunos, inclusive salvando a foto.

Como eu disse, da maneira como programei, ele grava e recupera a foto tranquilamente, quando a aplicação é executada no computador servidor. Porém se é executado de uma estação é dada a informaçào que a foto não foi localizada, isto porque ela se encontra em diretorio na unidade C:.

Meu aplicativo está conectado a um banco Interbase. E utilizo para a conexão o componente Interbase, da paleta do próprio delphi.

Gostaria que você me enviasse um exemplo, se possível com o passo-a-passo, desde a criação do campo blob no banco interbase, até o código para gravar e abrir a foto desejada.

Mais uma vez, obrigado pela atenção!


Responder

Gostei + 0

04/10/2009

Adilsond

voce pode compartilhar o diretório onde encontram-se as fotos e no seu aplicativo colocar o caminho como

\\Computador\NomeDoCompartilhamento


Responder

Gostei + 0

04/10/2009

Afarias

|Gostaria que você me enviasse um exemplo, se possível com o passo-a-
|passo, desde a criação do campo blob no banco interbase, até o código para
|gravar e abrir a foto desejada.

criar o campo blob é simples, ex:

create table teste (
codigo integer not null,
[b:53440f086b]foto blob sub_type 0[/b:53440f086b]
);

ou

alter table teste [b:53440f086b]add foto blob sub_type 0[/b:53440f086b];


***


gravar uma imagem para o campo ou parâmetro de um insert/update tb é simples, ex:

if OpenDialog1.Execute then
  TBlobField(IBQuery1.FieldByName(´FOTO´)).LoadFromFile(OpenDialog1.FileName);


no caso de parâmetros, é semelhante:

if OpenDialog1.Execute then
  IBQuery1.ParamByName(´P_FOTO´).LoadFromFile(OpenDialog1.FileName, ftBlob);



***


Carregar a imagem do banco e mostrar para o usuário é simples mais requer uma pequena atenção. Primeiro, pra simplificar seu código é importante que vc permita apenas 1 tipo de imagem (bmp ou jpg são boas opções).

Se optar por imagens BMP então vc não tem q fazer nada. Use um DBImage associado ao seu campo foto da Query e pronto, ele vai renderizar a imagem para vc. Entretanto um DBImage suporta apenas BMP... Se vc optar por um outro tipo de imagem como JPG ou PNG (por causa da compressão) vc não poderá usar um DBImage.

Neste caso, vc deve usar um componente como TImage e renderizar a imagem manualmente. Segue um código exemplo:

procedure TForm1.ShowImage;
var
  stm: TStream;
  jpg: TJPEGImage;
begin
  stm := TMemoryStream.Create;
  try
    TBlobField(IBQuery1.FieldByName(´FOTO´)).SaveToStream(stm);
    stm.Position := 0;
    jpg := TJPEGImage.Create;
    try
      jpg.LoadFromStream(stm);
      Image1.Picture.Assign(jpg);
    finally
      jpg.Free;
    end;
  finally
    stm.Free;
  end;
end;


Espero q isto ajude.


T+


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar