Fórum Gravar caminho da imagem em banco de dados #592981
05/05/2018
0
Pessoal, vejam meu cod:
procedure TForm1.fotoClick(Sender: TObject); var jpg : tjpegimage; begin if OpenPictureDialog1.Execute then jpg := tjpegimage.Create; jpg.LoadFromFile(OpenPictureDialog1.FileName); clipboard.Assign(jpg); foto.pastefromclipboard; jpg.Free; end;
Esse código salva uma imagem jpeg no banco, porem, eu testei 4 imagens e o banco deu salto no tamanho de 300k pra quase 5MB. ou seja, se continuar salvando imagens nele, logo chega a 1GB, o que é inviável.
Eu ja vi por aqui no fórum, mas não consegui implementar, um esquema que faça: trocar o nome da imagem, salva-la em um diretório especifico e salvar só o caminho dela, assim toda vez que buscar a imagem, ele puxe ela pelo caminho, assim o banco fica leve. (ou se for muito complicado tudo isso, dede que salve só o caminho da imagem, já está de bom tamanho).
Então, se alguém por aqui puder me dar umas dicas, vou ficar muito agradecido, só falta isso pra eu concluir meu projetinho.
Abraços a todos.
Deuzenildo Nascimento
Curtir tópico
+ 0Post mais votado
14/05/2018
algo assim:
// obtém o nome do arquivo
strArquivo := ExtractFileName( OpenPictureDialog1.FileName );
// gera o nome da nova pasta, que será criada dentro da pasta do executável
strPasta := IncludeTrailingPathDelimiter( ExtractFilePath( Application.ExeName ) ) + 'IMG' + format('%.8d', [tabela.Recno] );
// compõe o nome do completo do arquivo (pasta + arquivo)
strNovoArquivo := IncludeTrailingPathDelimiter( strPasta ) + strArquivo;
// tenta copiar o arquivo origem para a pasta determinada
if CopyFile( PAnsiChar(OpenPictureDialog1.FileName), PAnsiChar(strNovoArquivo), True ) then
tabela.ArquivoImg.AsString := strNovoArquivo; // se a cópia foi efetivada, grava o caminho no registro
esta é a idéia.
P.S.: deve ter algum erro de sintaxe. fiz direto no fórum (estou sem Delphi no momento).
Emerson Nascimento
Gostei + 1
Mais Posts
05/05/2018
Emerson Nascimento
Gostei + 0
05/05/2018
Deuzenildo Nascimento
Gostei + 0
07/05/2018
Deuzenildo Nascimento
Gostei + 0
10/05/2018
Deuzenildo Nascimento
Gostei + 0
14/05/2018
Deuzenildo Nascimento
Gostei + 0
14/05/2018
Raimundo Pereira
Suatabele.fielbyname('CaminhoIMG').asstring:=timage1.filename;
Gostei + 0
15/05/2018
Deuzenildo Nascimento
[dcc32 Error] Unit1.pas(52): E2003 Undeclared identifier: 'filename'
Gostei + 0
15/05/2018
Deuzenildo Nascimento
procedure TForm1.Button1Click(Sender: TObject);
var caminho : string;
begin
if OpenPictureDialog1.Execute then
begin
dbedit1.Clear;
caminho := OpenPictureDialog1.FileName;
image1.Picture.LoadFromFile(caminho);
if SavePictureDialog1.Execute then
begin
Image1.Picture.SaveToFile(SavePictureDialog1.FileName);
adotable1.FieldByName('caminhoIM').AsString:=Image1.filename);
end;
end;
end;
// Ele busca uma imagen de um diretorio, salva ela em outro, e a ideia é a salvar o caminho dela no banco, pra toda vez que buscar pelo registro no banco, ele mostre a tal imagem.
Gostei + 0
16/05/2018
Raimundo Pereira
Antes de tudo adicione em uses >>> jpeg
private
{ Private declarations }
// Procedure Responsável de realizar abertura de uma Jpeg e desenhar no form.
Procedure OpenIMGLOCAL;
// Procedure Responsável de realizar cópia e salvar o caminho da cópia no BD.
Procedure SaveIMG_Table;
//Função responsável de realizar a captura da extensão da imagem carregada.
Function Captura_extenssion:string;
public
procedure TFP.OpenIMGLOCAL; begin opd:=TOpenDialog.Create(nil); if opd.Execute then begin Caminho_Origem := opd.FileName; Image1.Picture.LoadFromFile(Caminho_Origem); Image1.Stretch:=true; Image1.Proportional:=true; end;
procedure TFP.SaveIMG_Table;
begin
spd:=TSaveDialog.Create(nil);
if spd.Execute then
begin
Caminho_Destino:=spd.FileName+'.'+Captura_extenssion;
Image1.Picture.SaveToFile(Caminho_Destino);
cdsTemp.open;
cdsTemp.Insert;
cdsTemp.FieldByName('caminhoIM').AsString:=Caminho_Destino;
cdsTemp.Post;
end;
end;
//Chamando a procedure no clip de um button
procedure TFP.BTN_AbrirClick(Sender: TObject); begin OpenIMGLOCAL; end;
//Chamando a procedure no clip de um button
procedure TFP.BTN_SalvarClick(Sender: TObject);
begin
SaveIMG_Table ;
end;
Gostei + 1
16/05/2018
Raimundo Pereira
var FP: TFP; var Caminho_Origem : string; var Caminho_Destino : string; var opd:TOpenDialog; var spd:TSaveDialog;
Troque
cdsTemp.open;
cdsTemp.Insert;
cdsTemp.FieldByName('caminhoIM').AsString:=Caminho_Destino;
cdsTemp.Post;
Por
adotable1.open;
adotable1.Insert;
adotable1.FieldByName('caminhoIM').AsString:=Caminho_Destino;
adotable1.Post;
Gostei + 1
16/05/2018
Raimundo Pereira
function TFP.Captura_extenssion: string;
var Caminho_:String;
begin
//
Caminho_ := Caminho_Origem;
Result := Copy(Caminho_ , Pos('.', Caminho_) + 1, Length(Caminho_));
end;Gostei + 0
01/06/2018
Deuzenildo Nascimento
Agradeço as contribuições..
Gostei + 0
01/06/2018
Raimundo Pereira
sac@p2tecnico.com.br
Gostei + 0
04/06/2018
Jerson Boer
Para copiar os arquivos entre as pastas, eu uso a seguinte função, que usa a própria API (uses Winapi.Windows) do Windows:
CopyFile(PChar(ArqOrigem), PChar(ArqDestino), true);
Ao copiar, sempre procuro renomear o arquivo pra algo que dificulte a identificação de sua origem se alguém fizer o acesso direto à pasta, você pode fazer isso com uma junção de valores de data + hora + minuto + segundo + alguma chave de registro que seja única.
Uma outra dica, eu não costumo gravar o caminho todo do local onde este arquivo está, se você for copiar sempre pra uma mesma pasta seria interessante você ter esse endereço do caminho em uma tabela de configuração do sistema, que vai ser carregado sempre que você iniciar o sistema e gravar no registro somente o nome que ele recebeu, pode ser jpeg/bmp/png/rar, etc, qualquer tipo de arquivo e quando você for abrir ou extrair esse arquivo você executa o [Caminhodaconfiguração] + [nomedoarquivo]..
Qual a vantagem no uso da forma descrita? Se você por alguma razão precisar mudar estes arquivos de lugar, criar uma nova pasta em outra estrutura, lascou-se se você fixou o caminho, diferente de mudar somente na configuração você vai ter que fazer um script atualizando todos.
Veja se ficou claro e qualquer coisa retorna
Gostei + 0
04/06/2018
Deuzenildo Nascimento
eu consegui copiar a imagem para um diretório e com a possibilidade do usuário mudar o nome da imagem, no caso, o nome da imagem será o nome da pessoa, pois é um cadastro de pessoas, mas precisa da foto, pois será usado futuramente, então não precisamos esconder a pasta ou o nome do arquivo, por hora somente uma pessoa vai usar.
Mas vou tentando aqui, o pessoal tem ajudado com as dicas..
Valeu...
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)