Como inserir imagens no sistema sem gravar no Banco de Dados
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!
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
Curtidas 0
Respostas
Ramms
28/09/2006
Simples amigo, informe o caminho da img no seu hd num campo varchar, awe é só buscar no dataset e lançar num component TImage
GOSTEI 0
Tekmicro
28/09/2006
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!
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!
GOSTEI 0
Paullsoftware
28/09/2006
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:
agora no formulario de cadastro coloque um botão e TImage, dê um duplo click no botão e insira o código abaixo:
Para que a imagem seja atualizada ao navegar pelos registros faça:
espero ter ajudado...
nos próximos dias estarei publicando um artigo sobre esse recurso para ajudar a galera! :wink:
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:
GOSTEI 0
Tekmicro
28/09/2006
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.
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.
GOSTEI 0
Mazzi
28/09/2006
se ainda nao conseguiu, me dá um toque pois eu tenho uns exemplos prontos,
cvlw
abraços ++
cvlw
abraços ++
GOSTEI 0
Paullsoftware
28/09/2006
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:
GOSTEI 0
Mazzi
28/09/2006
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...
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...
GOSTEI 0