Шаг 24.
Использование OLE-документов в приложениях. Хранение OLE-объектов в базах данных. Использование временного файла

    На этом шаге мы рассмотрим простейший способ хранения OLE-объектов в базе данных.

    Задача храпения OLE-объектов в базах данных встречается па практике довольно часто. Некоторые СУБД (такие как Microsoft Access, Microsoft SQL Server, Microsoft Desktop Engine) обладают специально предназначенными для этого типами полей. Отметим, однако, что далеко не все СУБД обладают такими типами данных. Тем не менее хранить OLE-объекты можно практически в любой базе данных, поскольку для этой цели могут быть использованы любые BLOB- и МЕМО-поля баз данных.

    Основная идея приложения, сохраняющего содержимое OLE-коитейиера в базе данных, заключается в том, что объект, находящийся в компоненте TOleContainer, записывается в файл или память, а затем помещается в BLOB-поле. Начиная с этого шага мы рассмотрим несколько способов реализации такого приложения.

    Создадим простейший пример такого приложения. С этой целью поместим па форму вновь созданного приложения компонент TPanel со свойством Align, равным alClient, а на него - компоненты TOleContainer, TDBNavigator, ТТаble, TDataSource и четыре кнопки с надписями New Object, Save, Show и Clear.

    Создадим копию таблицы biolife.db из набора демонстрационных примеров, свяжем с ней компонент ТТаble и создадим для него набор объектов TFields. Свяжем компонент TDataSource с компонентом ТТаble, а компонент TDBNavigator - с компонентом TDataSource.

    Изменим обработчики событий:

procedure TForm1.Button2Click(Sender: TObject);
//Save
begin
  //Если контейнер не пуст...
  if OleContainer1.OleObjectInterface <> nil then
  begin
    //...то сохранить его содержимое в файле,
    OleContainer1.SaveToFile('aaa.dat');
    Table1.Edit;
    //а затем поместить это содержимое в поле Graphic
    // таблицы.
    Table1Graphic.LoadFromFile('aaa.dat');
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
//Show
begin
  //Сохранить содержимое поля в файле.
  Table1Graphic.SaveToFile('aaa.dat');
  // Разместить сохраненное содержимое в контейнере.
  OleContainer1.LoadFromFile('aaa.dat');
end;

procedure TForm1.Button1Click(Sender: TObject);
//New Object
begin
  // Задать содержимое контейнера.
  OleContainer1.InsertObjectDialog;
end;

procedure TForm1.Button4Click(Sender: TObject);
//Clear
begin
   //Удаление объекта из контейнера.
   OleContainer1.DestroyObject;
end;
Текст этого приложения cо всеми дополнительными файлами можно взять здесь (418 Кб).

    Теперь надо разместить в OLE-коитейиере какую-нибудь информацию (например, картинку). При щелчке на кнопке Save его содержимое сохраняется сначала в файле aaa.dat, а затем в BLOB-поле таблицы, а при щелчке на кнопке Show OLE-объект из BLOB-поля отображается в OLE-коптейиере:


Рис.1. Пример работы приложения

    Кнопка Clear используется для очистки содержимого контейнера.

    На следующем шаге мы рассмотрим еще один способ размещения OLE-объектов в базах данных.




Предыдущий шаг Содержание Следующий шаг