====== Firebird ======
===== Tipos =====
* **BLOB SUB_TYPE 0** - Este é o tipo BLOB genérico para o armazenamento de qualquer tipo de dados, incluindo texto.
* **BLOB SUB_TYPE 1 (BLOB SUB_TYPE TEXT)** - Sub-tipo mais especializado para o armazenamento de texto puro.
===== 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;