fotos no banco de dados

Delphi

31/07/2004

eu testei algumas dicas publicadas mas as que tentam gravar jpeg no bd não dão certo alguém já fez funcionar?
faz tempo que tento.
bmp da certo mas o tamanho é o problema...


Crcam

Crcam

Curtidas 0

Respostas

Lucas Silva

Lucas Silva

31/07/2004

Colega,
Isso deixa o banco muito pesado...
Pense duas vezes antes de fazer isto!


GOSTEI 0
Marcelo.c

Marcelo.c

31/07/2004

Há uma discussão sobre o assunto neste [url=http://delphiforum.icft.com.br/forum/viewtopic.php?t=47439&highlight=fotos]tópico[/url].


GOSTEI 0
Bon Jovi

Bon Jovi

31/07/2004

Guardar em diretório não é uma solução ruim, mas isso é arriscado qto a integridade. Como garantir que as fotos num diretório estarão com integridade referencial em relação a tabela no banco? Garantir integridade de dados via programa é meio q voltar aos tempos de soluções Clipper.

Qto a ficar pesado, somente se for usado dados normais e BLOBS no mesmo banco de dados aí realmente fica uma solução ruim. Usando um bom SGDB, que permita relacionamento entre base de dados diferentes, basta ter uma base pra guardar tabelas de fotos e outra pra tabelas de dados normais. Tipo:
BancoNormal..TAB_FOTOS (Id_Foto[PK], Descricao)
BancoFotos..TAB_FOTOS_BLOB (Id_Foto[FK], ArquivoBlob).

Segue solução ilustrativa usando DBImage:

procedure TForm1.EscolheImagem(Imagem: TDBImage); 
var 
  oJPEG: TJPEGImage; 
  oDialogo: TOpenPictureDialog; 
  oPicture: TPicture; 
begin 
  if not Assigned(Imagem) then 
    Exit; 

  if (not Assigned(Imagem.DataSource)) or (Imagem.DataField = ´´) then 
    Exit; 

  if not Assigned(Imagem.DataSource.DataSet) then 
    Exit; 

  if not (Imagem.DataSource.DataSet.Active) then 
    Exit; 
      
  oDialogo := TOpenPictureDialog.Create(nil); 
  try 
    oDialogo.Options := [ofOverwritePrompt, ofHideReadOnly, ofEnableSizing]; 
    oDialogo.Filter := ´Imagens (*.jpg;*.jpeg;*.bmp)|*.jpg;*.jpeg;*.bmp´; 
    oPicture := TPicture.Create; 
    try 
      oJPEG := TJPEGImage.Create; 
      try 
        if oDialogo.Execute then 
        begin 
          oPicture.LoadFromFile(oDialogo.FileName); 
          oJPEG.Assign(oPicture.Graphic); 
          if not (Imagem.DataSource.DataSet.State in dsEditModes) then 
            Imagem.DataSource.DataSet.Edit; 
          Imagem.Picture.Graphic.Assign(oJPEG); 
        end; 
      finally 
        FreeAndNil(oJPEG); 
      end; 
    finally 
      FreeAndNil(oPicture); 
    end; 
  finally 
    FreeAndNil(oDialogo); 
  end; 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
  EscolheImagem(DBImage1); 
end;



GOSTEI 0
Aroldo Zanela

Aroldo Zanela

31/07/2004

Colega,

Você pode guardar qualquer tipo de dado num campo do tipo BLOB na maioria dos SGBDs. No caso do IB/FB não é diferente. Eu ratifico a sugestão do colega Bon Jovi e acrescento que, no caso do armazenamento num diretório, você perde na segurança adicional fornecida pela aplicação.


GOSTEI 0
POSTAR