Вниз
Скачать: CL | DM;

Как повесить обработчик на открытие/закрытие DataSet a у компонен   Найти похожие ветки 

 
Aleksandr.   (2005-01-18 12:55) [0]

Моему компоненту требуется при открытии заданного ему датасета заполнить некоторые данные с него, а при закрытии эти данные сбросить. Я сначала пошел по простому пути - при присваивании свойства DataSet его обработчики AfterOpen, AfterClose сохраняются, а ему назначаются свои внутренние, в теле которых выполняются и его обработчики. Но потом убедился, что последствия этого самые неприятные - в DT на форму кладу экземпляр TDataSet, назначаешь ему обработчики, кладу свой компонент, назначаю его DataSet вышеуказанный - и у того пропадают обработчики. Как можно по-умному сделать это отслеживание активности DataSet"a?


 
Юрий Зотов ©   (2005-01-18 13:02) [1]

> Aleksandr.   (18.01.05 12:55)

> Но потом убедился, что последствия этого самые неприятные

Очевидно. Есть железное правило - компонент не имеет права использовать события, доступные юзеру. Причину и последствия Вы уже видели.

> Как можно по-умному сделать это отслеживание активности
> DataSet"a?

Через внутренний объект TDataLink. Посмотрите, как это сделано, например, у TDBEdit.


 
Aleksandr.   (2005-01-18 13:22) [2]

Понял. Даже не знал этого правила...
Млин, есть в Инете статьи по использованию TDataLink? Что-то я сути в DBEdit не улавливаю...


 
Юрий Зотов ©   (2005-01-18 13:35) [3]

constructor TDBEdit.Create(AOwner: TComponent);
begin
 ...
 FDataLink := TFieldDataLink.Create;
 FDataLink.Control := Self;
 FDataLink.OnDataChange := DataChange;       // 1
 FDataLink.OnEditingChange := EditingChange; // 2
 FDataLink.OnUpdateData := UpdateData;       // 3
 FDataLink.OnActiveChange := ActiveChange;   // 4
end;


1..4 - вот это и есть те самые обработчики, которых Вам не хватало. Подробности см. в коде TDBEdit.


 
Aleksandr.   (2005-01-18 13:36) [4]

Такие сложности ради того, чтобы поиметь RecNo и RecordCount с TDataSet...



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.022 c
8-1118165933
Charly22
2005-06-07 21:38
2005.10.30
Как быстро очистить Canvas?


3-1127212198
mrAld
2005-09-20 14:29
2005.10.30
Модификация полей в наборе данных ADO


2-1128744800
Киря
2005-10-08 08:13
2005.10.30
Проблема с запросом


1-1128582273
Aleksey
2005-10-06 11:04
2005.10.30
Использование CreatePen


14-1128760068
Buss
2005-10-08 12:27
2005.10.30
Фраза




   Наверх