Este exemplo demonstra como acessar arquivos de imagem no banco de dados.
Adicione um componente TListBox, um componente TImage e um componente TTable ao formulário. A interface principal projetada é mostrada na Figura 1.
Figura 1 Interface principal
Neste sistema, um novo banco de dados Image.db baseado no Paradox 7 precisa ser projetado. A Figura 2 mostra o banco de dados Image.db completo.
Figura 2 O banco de dados projetado
Para facilitar o teste do programa, o banco de dados Image.db é armazenado no caminho onde o programa exemplo está localizado.
Defina a propriedade TableName do componente TTable como Image.db e a propriedade Active como True.
No início da execução do programa, ele primeiro determinará se há um registro no banco de dados Image.db. Se não existir nenhum registro, execute o seguinte código para adicionar o arquivo "bird.bmp" ao banco de dados Image.db:
procedimento TForm1.FormCreate(Remetente: TObject);
var
mem:TMemoryStream;
começar
se Tabela1.Eof e Tabela1.Bof então
começar
com Tabela1 faça
começar
Inserir;
FieldByName('Nome').AsString:='Pássaro';
mem:=TMemoryStream.Create();
mem.LoadFromFile('bird.bmp');
TBlobField(FieldByName('Dados')).LoadFromStream(mem);
Publicar;
fim;
fim;
fim;
Em seguida, adicione os arquivos de imagem "sample.wav", "leaf.wav" e "lotus" ao banco de dados Image.db sequencialmente da mesma maneira.
Por fim, adicione o nome do arquivo armazenado no banco de dados Image.db ao componente TListBox do formulário através do seguinte código:
com Tabela1 faça
começar
Primeiro;
enquanto não Eof faz
começar
ListBox1.Items.Add(FieldByName('Nome').AsString);
Próximo;
fim;
fim;
Durante a execução do programa, se o usuário selecionar um arquivo de imagem no componente TListBox do formulário, o programa usará o método First do componente TTable para definir o primeiro registro na tabela de dados como o registro atual e, em seguida, percorrerá o banco de dados através de um loop. Se o conteúdo do campo Nome em um determinado registro for igual à seleção do usuário, então as informações da imagem no campo Dados do registro são lidas e a imagem é exibida no componente TImage do formulário. O código é o seguinte:
procedimento TForm1.ListBox1Click(Remetente: TObject);
var
mem:TStream;
bmp:TBitmap;
começar
com Tabela1 faça
começar
Primeiro;
enquanto não Eof faz
começar
se FieldByName('Nome').AsString=ListBox1.Items[ListBox1.ItemIndex] então
quebrar;
Próximo;
fim;
bmp:=TBitmap.Create;
mem:=CreateBlobStream(FieldByName('Dados'),bmRead);
mem.Posição:=0;
bmp.LoadFromStream(mem);
self.Image1.Picture.Assign(bmp);
bmp.Free;
mem.Livre;
fim;
fim;
O código do programa é o seguinte:
unidade Unidade1;
interface
usa
Windows, Mensagens, SysUtils, Variantes, Classes, Gráficos, Controles, Formulários,
Diálogos, StdCtrls, DB, DBTables, mmsystem, ExtCtrls;
tipo
TForm1 = classe(TForm)
ListBox1: TListBox;
Tabela1: TTabela;
Imagem1: TImage;
procedimento FormCreate(Remetente: TObject);
procedimento ListBox1Click(Remetente: TObject);
privado
{Declarações privadas}
público
{Declarações públicas}
fim;
var
Formulário1: TForm1;
implementação
{$R *.dfm}
procedimento TForm1.FormCreate(Remetente: TObject);
var
mem:TMemoryStream;
começar
se Tabela1.Eof e Tabela1.Bof então
começar
com Tabela1 faça
começar
Inserir;
FieldByName('Nome').AsString:='Pássaro';
mem:=TMemoryStream.Create();
mem.LoadFromFile('bird.bmp');
TBlobField(FieldByName('Dados')).LoadFromStream(mem);
Publicar;
Inserir;
FieldByName('Nome').AsString:='Amostra';
mem:=TMemoryStream.Create();
mem.LoadFromFile('amostra.bmp');
TBlobField(FieldByName('Dados')).LoadFromStream(mem);
Publicar;
Inserir;
FieldByName('Nome').AsString:='folha';
mem:=TMemoryStream.Create();
mem.LoadFromFile('leaf.bmp');
TBlobField(FieldByName('Dados')).LoadFromStream(mem);
Publicar;
Inserir;
FieldByName('Nome').AsString:='Lotus';
mem:=TMemoryStream.Create();
mem.LoadFromFile('Lotus.bmp');
TBlobField(FieldByName('Dados')).LoadFromStream(mem);
Publicar;
mem.Livre;
fim;
fim;
com Tabela1 faça
começar
Primeiro;
enquanto não Eof faz
começar
ListBox1.Items.Add(FieldByName('Nome').AsString);
Próximo;
fim;
fim;
fim;
procedimento TForm1.ListBox1Click(Remetente: TObject);
var
mem:TStream;
bmp:TBitmap;
começar
com Tabela1 faça
começar
Primeiro;
enquanto não Eof faz
começar
se FieldByName('Nome').AsString=ListBox1.Items[ListBox1.ItemIndex] então
quebrar;
Próximo;
fim;
bmp:=TBitmap.Create;
mem:=CreateBlobStream(FieldByName('Dados'),bmRead);
mem.Posição:=0;
bmp.LoadFromStream(mem);
self.Image1.Picture.Assign(bmp);
bmp.Free;
mem.Livre;
fim;
fim;
fim.
Salve o arquivo e pressione a tecla F9 para executar o programa. A tela inicial do programa é mostrada na Figura 3.
Após selecionar um item no componente TListBox, será exibido o arquivo de imagem correspondente, conforme mostrado na Figura 4.
Figura 3 Tela inicial do programa em execução