Главная » Delphi » Delphi 2006 – Программное удаление объектов ЕСО

0

Удаление объекта ЕСО требует больших усилий, нежели его создание. Необходимо каким-то способом определить, какой конкретно элемент подлежит удалению.

Для отслеживания элемента, выбранного в таблице «Звезды», воспользуемся уже знакомым компонентом CurrencyManagerHandle, но в данном случае обратимся к нему программно. Поместим на форму новую кнопку и назовем ее Удалить звезду. Добавим в проект компонент CurrencyManagerHandle и назовем его cmhStar. Его свойство RootHandle настроим на дескриптор ehStar. Таким образом мы получим доступ к экземплярам класса Star. В свойстве BindingContext выберем таблицу DataGridl. Значение свойства RootHandle объекта ehPlanet по умолчанию рянио rhRoot (ссылка на корневой дескриптор). Заменим его на значение cmhStar. В свойстве Expression введем строку self .planets. Она содержит выражение OCL, описывающее список объектов ЕСО, доступных через текущий дескриптор ehPlanet. В результате этот дескриптор поставит в программу не все без исключения экземпляры класса Planet, а лишь связанные с текущим объектом, выбранным в таблице «Звезды».

Перед ликвидацией объекта необходимо проверить его тип. Объект, связанный с текущей строкой таблицы DataGricH, должен быть представителем класса Star. В проверке типа поможет свойство Element компонента cmhStar. Оно имеет тип Element и определяет программный интерфейс доступа к выбранному элементу. С помощью метода AsObject интерфейса Element проверим тип текущего объекта, доступного через дескриптор cmhStar:

procedure TWinForm.Button3_Click(sender: System.Object; e: System. EventArgs) ;

begin

if cmhStar.Element.AsObject is Star then begin

end;

end;

Протестированный таким образом интерфейс описывает существующий экземпляр класса Star. Надо создать его локальную копию, интерфейс lObject1 которой позволит напрямую манипулировать содержимым объектного пространства и удалить нужный экземпляр.

procedure TWinForm. Button3__Click (sender: System.Object; e: System. EventArgs) ;

// определяем локальный элемент:

var SelStar: Star;

begin

if cmhStar. Element .AsObject is Star then begin

// готовим локальный объект // для доступа к пространству EcoSpace SelStar := Star( cmhStar.Element.AsObject ); end;

end;

Локальный объект SelStar создан на базе объекта, выделенного в таблице «Звезды» и доступного через дескриптор cmhStar. Задействуем интерфейс lObject объекта SelStar — он поставляется методом AslObject. Вызовем метод Delete для уничтожения выделенного в таблице объекта:

Интерфейс lObject присущ всем объектам ЕСО. Он предназначен для доступа к внутренней структуре объекта в пространстве EcoSpace.

if cmhStar.Element.AsObject is Star then begin

SelStar := Star( cmhStar.Element.AsObject );

SelStar.AsIObject.Delete;

Разместим на форме кнопку Добавить планету. Никаких стандартных действий ЕСО в Инспекторе объектов для нее задавать не требуется. Подготовим

end;

Корпорация Borland рекомендует применять для удаления объектов ЕСО метод Delete, а не методы Destroy или Dispose. Объект ЕСО может находиться в одном из множества состояний, среди которых не только стандартные состояния «существует в памяти» и «удален из памяти», но и ряд более специфи- чиских. В частности, имеется состояние «полностью удален»: в него объект переводится вызовом метода Delete. При этом физически объект остается в объектном пространстве, так как он может быть связан с собственной копией в базе данных, которая тоже требует корректного удаления. Поэтому реальное удаление объектов из пространства EcoSpace вместе со всеми их копиями выполняет в подходящее время исполнительная система ЕСО. Программе достаточно перевести объект ЕСО в состояние «полностью удален» с вызовом его метода Delete.

Бобровский С. И. Технологии Delphi 2006. Новые возможности. — СПб.: Питер, 2006. — 288 е.: ил.

По теме:

  • Комментарии