В этом примере показано, как получить доступ к файлам изображений в базе данных.
Добавьте в форму компонент TListBox, компонент TImage и компонент TTable. Разработанный основной интерфейс показан на рисунке 1.
Рис. 1. Главный интерфейс
В этой системе необходимо разработать новую базу данных Image.db на основе Paradox 7. На рис. 2 показана завершенная база данных Image.db.
Рис. 2. Разработанная база данных
Чтобы облегчить тестирование программы, база данных Image.db сохраняется по пути, по которому находится пример программы.
Установите для свойства TableName компонента TTable значение Image.db, а для свойства Active — значение True.
В начале работы программы она сначала определит, есть ли запись в базе данных Image.db. Если запись не существует, выполните следующий код, чтобы добавить файл «bird.bmp» в базу данных Image.db:
процедура TForm1.FormCreate(Отправитель: TObject);
вар
мем: TMemoryStream;
начинать
если Table1.Eof и Table1.Bof, то
начинать
с Таблицей1 сделать
начинать
Вставлять;
FieldByName('Имя').AsString:='Птица';
mem:=TMemoryStream.Create();
mem.LoadFromFile('bird.bmp');
TBlobField(FieldByName('Данные')).LoadFromStream(mem);
Почта;
конец;
конец;
конец;
Затем таким же образом последовательно добавьте файлы изображений «sample.wav», «leaf.wav» и «lotus» в базу данных Image.db.
Наконец, добавьте имя файла, хранящегося в базе данных Image.db, в компонент TListBox формы с помощью следующего кода:
с Таблицей1 сделать
начинать
Первый;
пока не Eof сделать
начинать
ListBox1.Items.Add(FieldByName('Name').AsString);
Следующий;
конец;
конец;
Если во время работы программы пользователь выбирает файл изображения в компоненте TListBox формы, программа будет использовать метод First компонента TTable, чтобы установить первую запись в таблице данных в качестве текущей записи, а затем пройти базу данных через цикл Record. Если содержимое поля «Имя» в определенной записи совпадает с выбранным пользователем, то информация об изображении в поле «Данные» в записи считывается, и изображение отображается в компоненте TImage в форме. Код выглядит следующим образом:
процедура TForm1.ListBox1Click(Отправитель: TObject);
вар
мем: TStream;
bmp:TBitmap;
начинать
с Таблицей1 сделать
начинать
Первый;
пока не Eof сделать
начинать
если FieldByName('Имя').AsString=ListBox1.Items[ListBox1.ItemIndex] тогда
перерыв;
Следующий;
конец;
bmp:=TBitmap.Create;
mem:=CreateBlobStream(FieldByName('Data'),bmRead);
мем.Позиция:=0;
bmp.LoadFromStream(мем);
self.Image1.Picture.Assign(bmp);
bmp.Бесплатно;
память.Бесплатно;
конец;
конец;
Код программы следующий:
блок Unit1;
интерфейс
использует
Windows, сообщения, SysUtils, варианты, классы, графика, элементы управления, формы,
Диалоги, StdCtrls, DB, DBTables, mmsystem, ExtCtrls;
тип
ТФорм1 = класс (ТФорма)
Список1: TListBox;
Таблица1: Таблица TT;
Изображение1: TImage;
процедура FormCreate (Отправитель: TObject);
процедура ListBox1Click (Отправитель: TObject);
частный
{Частные заявления}
общественный
{Публичные заявления}
конец;
вар
Форма1: ТФорм1;
выполнение
{$R *.dfm}
процедура TForm1.FormCreate(Отправитель: TObject);
вар
мем: TMemoryStream;
начинать
если Table1.Eof и Table1.Bof, то
начинать
с Таблицей1 сделать
начинать
Вставлять;
FieldByName('Имя').AsString:='Птица';
mem:=TMemoryStream.Create();
mem.LoadFromFile('bird.bmp');
TBlobField(FieldByName('Данные')).LoadFromStream(mem);
Почта;
Вставлять;
FieldByName('Имя').AsString:='Образец';
mem:=TMemoryStream.Create();
mem.LoadFromFile('sample.bmp');
TBlobField(FieldByName('Данные')).LoadFromStream(mem);
Почта;
Вставлять;
FieldByName('Имя').AsString:='лист';
mem:=TMemoryStream.Create();
mem.LoadFromFile('leaf.bmp');
TBlobField(FieldByName('Данные')).LoadFromStream(mem);
Почта;
Вставлять;
FieldByName('Name').AsString:='Lotus';
mem:=TMemoryStream.Create();
mem.LoadFromFile('Lotus.bmp');
TBlobField(FieldByName('Данные')).LoadFromStream(mem);
Почта;
память.Бесплатно;
конец;
конец;
с Таблицей1 сделать
начинать
Первый;
пока не Eof сделать
начинать
ListBox1.Items.Add(FieldByName('Name').AsString);
Следующий;
конец;
конец;
конец;
процедура TForm1.ListBox1Click(Отправитель: TObject);
вар
мем: TStream;
bmp:TBitmap;
начинать
с Таблицей1 сделать
начинать
Первый;
пока не Eof сделать
начинать
если FieldByName('Name').AsString=ListBox1.Items[ListBox1.ItemIndex] тогда
перерыв;
Следующий;
конец;
bmp:=TBitmap.Create;
mem:=CreateBlobStream(FieldByName('Data'),bmRead);
мем.Позиция:=0;
bmp.LoadFromStream(мем);
self.Image1.Picture.Assign(bmp);
bmp.Бесплатно;
память.Бесплатно;
конец;
конец;
конец.
Сохраните файл, а затем нажмите клавишу F9, чтобы запустить программу. Начальный экран программы показан на рисунке 3.
После выбора элемента в компоненте TListBox отобразится соответствующий файл изображения, как показано на рисунке 4.
Рисунок 3. Начальный экран запущенной программы.