Tabela de conteúdos

Firebird

Tipos

Segmento

Apesar de ser confundido com o tamanho do campo, na verdade o segmento (identificado como length) é o tamanho dos blocos em que a informação é gravada no banco de dados e posteriormente, o tamanho do buffer de leitura de um campo blob. Por padrão, quando se cria um campo blob o segmento vem como 80bytes, isso pelo fato dos monitores antigos apresentarem 80bytes por vez.

Tamanho máximo para armazenamento

De acordo com os manuais do Firebird, o tamanho máximo de um arquivo blob é definido de acordo com o Page Size do banco de dados, seguindo esta regra:

Page Size Tamanho máximo do blob
1Kb 64Mb
2Kb 512Mb
4Kb 4Gb
8Kb 32Gb
16Kb 256Gb

Delphi

ADO

Lendo Blobs Binarios

procedure LendoConteudoBlobADO(CaminhoParaSalvar : String);
var
  Stm : TStream;
  fl  : TFileStream;
begin
  Stm := TStream.Create;
 
  fl := TFileStream.Create(CaminhoParaSalvar, fmCreate);
 
  ADOTable1.Open;
  ADOTable1.Edit; //ABRIR EM MODO DE EDIÇÃO OBRIGATORIAMENTE
 
  Stm := ADOTable1.CreateBlobStream(ADOTable1.FieldByName('campo_blob'), bmReadWrite);
  fl.CopyFrom(stm,Stm.Size);
 
  ADOTable1.Cancel;
 
  Stm.Free;
  fl.Free;
 
end;

Gravando Blobs Binarios

procedure GravandoBinarioNoBanco(CaminhoDoArquivo : String);
var
  Stm: TStream;
  fl : TFileStream;
begin
  Stm := TStream.Create;
  fl := TFileStream.Create(CaminhoDoArquivo, fmOpenRead);
 
  ADOTable1.Open;
  ADOTable1.Append;
 
  Stm := ADOTable1.CreateBlobStream(ADOTable1.FieldByName('campo_blob'), bmReadWrite);
  stm.CopyFrom(fl,fl.Size);
 
  Stm.Free;
 
  ADOTable1.Post;
 
  fl.Free;
end;