Um dos recursos mais interessantes nos bancos de dados atuais é a  possibilidade de armazenar recursos multimídia juntamente com outras  informações. Dessa forma, é possível criar registros com informações mais ricas  sobre um determinado assunto. Por exemplo, pode-se armazenar informações sobre  um funcionário juntamente com a sua própria foto. No Paradox, por exemplo,  existe um tipo de campo destinado especialmente para esse fim.
 
No entanto, as possibilidades vão muito além do que o simples armazenamento  de imagens. É possível armazenar sons, filmes ou qualquer tipo de arquivo,  usando o "obscuro" campo BLOB (Binary Large Object), que permite que qualquer  arquivo seja "embutido" no banco de dados. Na verdade, o conteúdo do arquivo não  é armazenado no registro em si, mas num arquivo separado que é manipulado  internamente pelo banco de dados.
 
Trabalhar com esse tipo de campo no Delphi é muito simples, mas não tão óbvio  à primeira vista. A manipulação de campos BLOB, diferentemente dos campos  comuns, não deve ser feita diretamente, mas sim por meio do objeto TBlobField,  descendente do TField, que disponibiliza recursos especiais para esse fim. Para  isso, você deve sempre se referir ao campo BLOB no código como sendo um  TBlobField, utilizando typecasting.
 
Vamos supor que você tenha um arquivo de som MyWave.wav que será armazenado  no campo "SOM" da tabela "MyTable". Para carregar o conteúdo do arquivo no campo  SOM, basta fazer assim:
 
TBlobField(MyTable.FieldByName('SOM')).LoadFromFile('MeuWave.wav');
 
Neste exemplo, você usou o recurso de typecasting para manipular o campo como  sendo um objeto TBlobField, carregando o arquivo através do método LoadFromFile  que existe nesse objeto. Fácil, não é?
 
Se você quiser salvar o conteúdo do campo "SOM" no arquivo "MyWaveCopy.wav",  basta fazer assim:
 
TBlobField(MyTable.FieldByName('SOM')).SaveToFile('MyWaveCopy.60wav');
 
Para remover o conteúdo do campo "SOM" (limpá-lo), você também deve usar um  método apropriado:
 
TBlobField(MyTable.FieldByName('SOM')).Clear;
 
Para saber se o campo SOM possui algum conteúdo, use a propriedade  IsNull:
 
with MyTable do
 
  if not  TBlobField(FieldByName('SOM')).IsNull  then
 
  TBlobField(FieldByName('SOM')).SaveToFile('MyWaveCopy.wav');
 
A maneira mais simples de utilizar o conteúdo de um campo BLOB já armazenado  é primeiro gravá-lo novamente em um arquivo em disco, usando o método  SaveToFile, e depois manipulá-lo normalmente. No caso de um conteúdo em formato  wave, por exemplo, você deve primeiro gravá-lo num arquivo .wav, e então  reproduzí-lo através do TMediaPlayer ou pela função SndPlaySound.
 
Usando os mesmos métodos, você também pode armazenar e manipular filmes AVI,  apresentações, documentos, enfim, o que a sua imaginação mandar. Mas tenha em  mente que o armazenamento de arquivos de som ou outros tipos vai aumentar  consideravelmente o tamanho do seu banco de dados, por isso esse recurso deve  ser utilizado com cuidado. Uma boa medida para reduzir esse problema é compactar  o arquivo antes de armazená-lo. Para utilizá-lo depois, basta gerar o arquivo  novamente em disco e descompactá-lo. Para saber quanto um campo BLOB está  ocupando num registro do seu arquivo, em bytes, use a propriedade BlobSize:
 
TBlobField(MyTable.FieldByName('SOM')).BlobSize;
 
Obs: Para armazenar imagens ou texto em formato RichText (RTF), use os tipos  GRAPHIC e FORMATED MEMO do Paradox, que são destinados a esses tipos de dados. O  Delphi também possui objetos para a manipulação desses campos: TGraphicField e  TMemoField, ambos descendentes do TBlobField.