====== 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;