GARANTIR DESCONTO

Fórum Como inserir imagens no sistema sem gravar no Banco de Dados #330260

28/09/2006

0

Olá pessoal!

Estou precisando saber se há possibilidades de inserir imagens no sistema feito no Delphi 7 mas sem gravar no Banco de Dados, evitando o carregamento de imagens no mesmo.

Estive vendo a algum tempo atrás sobre este assunto e possibilidade, onde teríamos que criar uma basta com as imagens junto com o projeto, e fazer através de código a ligação (caminho) entre o campo para receber a imagem com o arquivo de imagem, mas, não encontrei mais onde vi estas informações.

Se alguem puder passar esta dica, agradeceria imensamente!

Abraços a todos!


Tekmicro

Tekmicro

Responder

Posts

28/09/2006

Ramms

Simples amigo, informe o caminho da img no seu hd num campo varchar, awe é só buscar no dataset e lançar num component TImage


Responder

Gostei + 0

28/09/2006

Tekmicro

Obrigado amigo!

Mas, se não for pedir muito, teria como passar estes procedimentos, isto é, quais os passos que deve ser dados para obter com sucesso esta opção?

Exemplo:

Tenho a tabela Clientes, nesta tabela devo criar um novo campo tipo varchar relacionado com a imagem, porque já existe atualmente um campo tipo Blob criado. Devo deletar este campo e criar o outro?

É justamente nestes detalhes que gostaria se possível passar os procedimentos até chegar no caminho para localizar a imagem, e um outro detalhe, ao salvar os dados cadastrados no formulário Clientes, a imagem não estará salva, correto, porque ela encontra-se numa pasta junto do diretório do sistema ou do BD, apenas quando acessar este formulário é que a imagem seria licalizada em tempo de execução e mostrada?

Como seria o processo?

Agradeço imensamente pela atenção e gentileza!


Responder

Gostei + 0

29/09/2006

Paullsoftware

aqui vai os passo básicos que fiz, estou preparando um artigo e vou postar aqui no fórum em breve...

para que o exemplo funcione e necessario ter um campo na tabela que vai armazenar o endereço do arquivo de imagem.

crie a procedure abaixo:
Procedure CopiaFoto(Origem, Destino: string;Barra:TGauge);
var
  FromF,ToF: file of byte;
  Buffer: array[0..4096] of char;
  NumRead: Integer;
  FileLength: LongInt;
  NewPath: string;
begin
  // Antes de copiar, verifica se já existe o diretório
  // Caso o diretório não exista, o mesmo vai ser criado
  NewPath := ExtractFilePath(Destino);
  if not DirectoryExists(NewPath) then
  begin
    CreateDir(NewPath);
  end;
  // Copia o arquivo
  // Abre o arquivo de origem e cria o arquivo destino
  AssignFile(FromF, Origem);
  Reset(FromF);
  AssignFile(ToF, Destino);
  ReWrite(ToF);
  FileLength := FileSize(FromF);
  with Barra do
  begin
    Progress := 0;
    MinValue := 0;
    MaxValue := FileLength;
    while FileLength > 0 do
    begin
      BlockRead(FromF, Buffer[0], SizeOf(Buffer), NumRead);
      FileLength := FileLength - NumRead;
      BlockWrite(ToF, Buffer[0], NumRead);
      AddProgress(NumRead);
    end;
    CloseFile(FromF);
    CloseFile(ToF);
  end;
end; (* CopiaFoto *)


agora no formulario de cadastro coloque um botão e TImage, dê um duplo click no botão e insira o código abaixo:

procedure TFrmCadClientes.btnAbrirFotoClick(Sender: TObject);
var
 PathBmp : string;
begin
PathBmp := ExtractFileDir(ParamStr(0))+´\fotos\´;
if dsClientes.DataSet.Active then
if not dsClientes.DataSet.IsEmpty then
//Requer ExtDlgs na uses
with TOpenPictureDialog.Create(Self) do
  begin
     Filter := ´Arquivos de Imagem|*.bmp;*.jpg;´;
     InitialDir := ExtractFilePath(ParamStr(0));
     DefaultExt := ´.jpg´;
     Title      := ´CroLan - Localizar Foto´;
     if Execute then
     if FileName <> ´´ then
     if FileExists(FileName) then
       begin
         PathBmp := PathBmp+ExtractFileName(FileName);
         Gauge1.Visible := True;
         //Executa a procedure CopiaFoto(Origen, Destino, Barra);
         CopiaFoto(pChar(FileName),pChar(PathBmp),Gauge1);
         Gauge1.Visible := False;
         dsClientes.DataSet.Edit;
         dsClientes.DataSet.FieldByName(´FOTO´).AsString := PathBmp;
         Image1.Picture.LoadFromFile(PathBmp);
         Image1.Visible := True;
       end;
  end;
end;(* BtnAbrirFoto *)

Para que a imagem seja atualizada ao navegar pelos registros faça:
procedure TFrmCadClientes.dsClientesDataChange(Sender: TObject; Field: TField);
var
FileName : string;
begin
  FileName := dsClientes.DataSet.FieldByName(´FOTO´).AsString;
  if FileExists(FileName) then
   begin
    Image1.Visible := True;
    Image1.Picture.LoadFromFile(FileName);
   end
  else
    Image1.Visible := False;
end;


espero ter ajudado...

nos próximos dias estarei publicando um artigo sobre esse recurso para ajudar a galera! :wink:


Responder

Gostei + 0

29/09/2006

Tekmicro

Caro colega, agradeço imensamente pela colaboração e atenção.

Com certeza a sua publicação será de grande utilidade para todos que buscam obter da melhor maneira possivel, informações para facilitar seus trabalhos.

Infelizmente ainda falta muita coisa para auxiliar-nos no dia-a-dia. Vou sitar um exemplo:

A elaboração de um Frente de Caixa com a inclusão ECF, TEF etc. utilizando BD local que poderia ser por arquivo .tx etc. São coisas que necessitamos imensamente e não encontramos em nenhum lugar.

O que ocorre é de muitas repetições sobre um determinado assunto. Se um comenta sobre IntraWeb, todos os lugares postam a mesma coisa, esquecendo que existem outros fatores predominantes e que faz muita falta ter um material de apoio como tutoriais etc.

A sua iniciativa em aprofundar este assunto é muito importante, e não deixe apenas permanecer neste tópico, explore outros como por exemplo o sitado acima, e a comunidade delphiana agradece.

Um grande abraço.


Responder

Gostei + 0

21/11/2006

Mazzi

se ainda nao conseguiu, me dá um toque pois eu tenho uns exemplos prontos,

cvlw

abraços ++


Responder

Gostei + 0

21/11/2006

Paullsoftware

se ainda nao conseguiu, me dá um toque pois eu tenho uns exemplos prontos, cvlw abraços ++


você bem que poderia publicar aqui pra ajudar a todos que tiveram a mesma dúvida que o [b:2f1a424fc1]tekmicro[/b:2f1a424fc1]... :wink:


Responder

Gostei + 0

21/11/2006

Mazzi

Claro, que sim, vamos ajudar a comunidade...
Vou dar um exemplo aqui, pode parecer meio tosco, mais funciona muito bem nas minhas aplicações... vamos lá

1- Insira um componete TDBedit, ou qq um que prefira para usar como o caminho (path) da sua figura, ou foto... , e conecte-o devidamente com o DataSource da sua Tabela ...

Lembre-se de colocar no seu tipo de campo, um Varchar(x), sendo x bem grande pois, há clientes que costumam digitar, por ex: ´c:\Programa\Fotos\Mariana Juaquina Pereira da Silva Queiroz de Albuquerque Gomes.BMP´... ai judia.... neh?!!, então coloque um varchar com numero de caracteres razoavelmente bom....

2-Insira um OpenPicture (palheta Dialogs);

3-Insira um Botao, com um caption por ex: ´Buscar Figura´, ou algo parecido, e vc pode colocar uma ´lupinha´, parece bobeira mas, ´frescurinhas´ a parte, os usuarios memorizam mais fácil...

5-Insira, claro um TImage (pode ser da palheta Aditional)...

6- No botao que ´Buscar Figura´, que vc criou, insira o código:

[color=green:b5a25621d6]procedure TfrmCliente.btbuscaClick(Sender: TObject);
begin
OpenPicture.Execute;
dbfoto.Text:= OpenPicture.FileName;
Image.Picture.LoadFromFile(dbfoto.Text);
DesligaBotoes(Self);
end;[/color:b5a25621d6]

// Note o codigo, é somente para exemplo, vc deve entende-lo e adequar a sua necessidade, ok?:)


7-Para auxiliar, no tratamento de erros crie rotinas ou mais um botao de ´ATUALIZAR foto´, com o seguinte codigo:


[color=green:b5a25621d6]begin
if dbfoto.Text =´´ then
begin
Image.Picture.LoadFromFile(´c:\Fotos\SemFoto.bmp´[/color:b5a25621d6]);
exit;
end;
try
Image.Picture.LoadFromFile(dbfoto.Text);
except
Image.Picture.LoadFromFile([color=red:b5a25621d6]´c:\Fotos\SemFoto.bmp´[/color:b5a25621d6]);
exit;
end;
end;[/color]


**NOTE QUE EU CRIEI UM BITMAP, ´SEMFOTO.BMP´, que ficará Default do Image, assim se o sistema não encontrar um caminho válido, ele mostra uma figurinha que menciona ao usuario que não tem foto cadastrada**

E se vc for tratar um evento de ´Excluir Foto´, então é só usar:

[color=green:b5a25621d6]procedure TfrmCliente.btexcluiClick(Sender: TObject);
begin
dbFoto.Text:=´c:\Comercial\Fotos\SemFoto.bmp´;
Image.Picture.LoadFromFile(dbFoto.Text);
end;[/color:b5a25621d6]

**mais uma vez usando o Bitmap SemFoto.BMP**, isso deixa a aplicação ,mais transparente ao usuario;

Ai, todo o gerenciamento para o banco será somente o conteudo do TDBedit que vc inseriu, e só vai salvar o caminho o que é muito mais leve para o banco de dados; e assim vc pode ter muito mais fotos;

// Vale lembrar que se vc for salvar em outro computador na rede, use o caminho completo com o HOST, ex:
\\SERVIDOR\C\FOTOS\FOTO01.BMP


sacou?

qq coisa estamos ai...


Responder

Gostei + 0

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

Aceitar