quarta-feira, 14 de março de 2007

Armazenando imagens, sons e vídeos em bancos de dados

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.

Dúvidas/Sugestões favor entrar em contato.
Comentem aí pessoal.

E-mail: markuvinicius@uol.com.br
msn : marku@gabtransportes.com.br

Até a próxima pessoal.
Marku Vinícius
Clique aqui para ler o Artigo original

Nenhum comentário:

Neobux