![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Свойство TDataSet в компоненте [D6, Win2k]
Darlock © (2002-12-03 18:31:00)Написал я свой компонент, одно из published свойств имеет тип TDataSet - так вот когда я бросаю компонент на форму и присваиваю ему это свойство (выбрав из списка) - все хорошо, но стоит мне только удалить выбранный компонент (типа TQuery) как мой компонент начинайт заливаться ошибками. Подскажите плз, как быть?
Darlock (2002-12-03 19:05:00) [1]Спасибо огромное, завтра проверю.
Юрий Федоров (2002-12-03 18:50:00) [2]Посмотри TComponent.FreeNotification
По нему обниливай ссылку на Dataset(если разрушен он), а в коде
везде проверяй Dataset на nil.
Вроде так
Юрий Зотов (2002-12-03 18:49:00) [3]type
TMyComp = class(...)
private
FDataSet: TDataSet;
procedure SetDataSet(const Value: TDataSet);
protected
procedure Notification
(AComponent: TComponent; Operation: TOperation); override;
published
property DataSet: TDataSet read FTDataSet write SetTDataSet;
end;
procedure TMyComp.Notification
(AComponent: TComponent; Operation: TOperation);
begin
inherited;
if (Operation = opRemove) and (AComponent = FDataSet) then
DataSet := nil
end;
procedure TMyComp.SetDataSet(const Value: TDataSet);
begin
if FDataSet <> Value then
begin
if FDataSet <> nil then RemoveFreeNotification(FDataSet);
FDataSet := Value;
if FDataSet <> nil then FreeNotification(FDataSet)
end
end;
Этот стандартный код автоматически очищает ссылку на компонент при его удалении, даже если он лежит на другой форме или модуле данных. В Вашем коде остается только проверять FDataSet на nil при обращении к нему.