Установите свойства объекта управления данными следующим образом. Свойство Caption определите как “OLE объекты”, свойство DatabaseName установите как имя файла базы данных C: \WORK\DB.MDB и укажите в качестве источника данных (свойство RecordSource) имя таблицы OBJ. Затем установите свойства меток, текстовых окон, контейнера OLE и командной кнопки:
Label1.Caption=Идентификатор
Label2.Caption=Описание
Text1.DataSource=Data1
Text1.DataField=Id
Text2.DataSource=Data1
Text2.DataField=Desc
OLE1.DataSource=Data1
OLE1.DataField=Obj
Command1.Caption=Добавить
Запустите проект. Если ваша базе данных не пуста и в ней есть какие-либо записи с OLE-объектами (в данном случае с помощью MS Access созданы две записи с математическим уравнением и рисунком), вы увидите, что в OLE-контейнере отобразится содержимое поля Obj первой записи (рис. 8.5).
Рис. 8.5.
Внедренные объекты можно редактировать. Нажатие правой кнопки мыши на OLE-контейнере приведет к появлению всплывающего меню с двумя пунктами: “Изменить” и “Открыть”. Выбор первого пункта позволит вам редактировать содержимое OLE-контейнера прямо в вашей экранной форме, в то время как выбор второго — приведет к запуску приложения-сервера и загрузке в него содержимого OLE-контейнера (рис. 8.6). В данном случае это будет редактор формул, входящий в поставку текстового процессора MS Word. После внесения необходимых изменений закройте приложение-сервер и убедитесь, что результаты редактирования отображены в базе данных.
Рис. 8.6.
Таким образом мы создали приложение, которое позволяет не только просматривать, но и редактировать OLE-объекты, хранящиеся в базе данных. Это могут быть совсем разные объекты: математические уравнения, рисунки, текстовые документы, таблицы, диаграммы и др.
В нашем приложении осталась незадействована командная кнопка “Добавить”. Очевидно, что она должна быть предназначена для добавления новых записей в базу данных. Добавим в процедуру обработки события нажатия этой кнопки код, который позволит нам добавлять пустую запись в конец набора записей:
Private Sub Command1_Click()
Data1.Recordset.AddNew
OLE1.InsertObjDlg
End Sub.
Метод InsertObjDlg OLE-контейнера отображает на экране диалоговое окно выбора типа объекта (рис. 8.7). Отметив кнопку-переключатель Create New (Создать новый), вы можете вставить новый объект в базу данных, выбрав требуемый тип из списка зарегистрированных в системе объектов OLE. Выбор кнопки-переключателя Create from File (Создать из файла) позволит вам вставить в базу данных уже существующий на вашем жестком диске OLE-объект (рис. 8.8). При этом вы можете установить связь между файлом-оригиналом и добавленным в базу данных объектом, отметив контрольный индикатор Link (Установить связь).
Рис. 8.7.
Рис. 8.8.
Теперь с помощью нашего приложения вы можете не только просматривать и редактировать OLE-объекты в базе данных, но и добавлять новые, предварительно выбрав его тип. Однако в базах данных хранятся, как правило, объекты одного типа. Для создания объекта требуемого типа можно использовать метод CreateEmbed объекта OLE-контейнер. Метод имеет следующий синтаксис:
object.CreateEmbed sourcedoc, class.
Объектное выражение object определяет имя объекта OLE-контейнера. Первый аргумент — sourcedoc является обязательным и определяет имя файла документа, используемого как шаблон для внедряемого объекта. Если вы не определяете этот файл, то необходимо задать этот аргумент в виде пустой строки Второй аргумент — class не обязателен и определяет класс внедряемого объекта. Этот аргумент игнорируется, если определен параметр sourcedoc.
Когда вы создаете новый внедренный OLE-объект при помощи метода CreateEmbed, приложение-сервер, определяемое именем класса — class, должно быть корректно зарегистрировано в вашей системе. Посмотреть классы объектов можно выбрав в окне свойств OLE-контейнера свойство Class и нажав справа кнопку с тремя точками. Появится окно со списком всех зарегистрированных классов (рис. 8.9).
Рис. 8.9.
Свойство Class объекта OLE-контейнер определяет имя класса внедряемого объекта следующим образом:
application.objecttype.version
objecttype.version