Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
ВнизЗачем придумали DataSource? Найти похожие ветки
← →
StriderMan © (2006-11-17 10:49) [0]Я конечно понимаю где и как он используется в Delphi, но мне кажется это лишняя прослойка между DataSet и контролами. Объясните глубокую мысль разработчиков VCL.
← →
Плохиш © (2006-11-17 10:51) [1]
> StriderMan © (17.11.06 10:49)
Эта прослойка позволяет унифицировать связи различных DBAware-компонентов с различными источниками данных.
← →
StriderMan © (2006-11-17 10:53) [2]
> Плохиш © (17.11.06 10:51) [1]
в TDataSet и так все есть что нужно, ИМХО.
← →
ЮЮ © (2006-11-17 11:05) [3]TDataSet.DisableControls не общается с контролами, а с DataSiurce. Иначе ему пришлось бы общаться с TControl, а тому знать о существовании TDataSet. А так с DataSet-ом (через DataSource) знакомятся только DB-Aware компоненты.
← →
Игорь Шевченко © (2006-11-17 11:12) [4]В Delphi придумано много лишнего. Не обращай внимания
← →
StriderMan © (2006-11-17 11:32) [5]
> Иначе ему пришлось бы общаться с TControl, а тому знать о существовании TDataSet
зачем TControl"у знать о DataSet? о нем могли бы знать TDBXxx-контролы.
> TDataSet.DisableControls не общается с контролами, а с DataSiurce.
какая разница, знает о контролах DataSet или DataSource?
> Игорь Шевченко © (17.11.06 11:12) [4]
Вы и это серьезно? т.е. сабж тоже вызывает у вас сомнения в необходимости?
← →
Игорь Шевченко © (2006-11-17 11:48) [6]StriderMan © (17.11.06 11:32) [5]
У меня не вызывает
← →
Anatoly Podgoretsky © (2006-11-17 12:00) [7]> StriderMan (17.11.2006 11:32:05) [5]
Так ты еще и DB Aware компоненты предлагаешь переписать :-)
← →
StriderMan © (2006-11-17 12:29) [8]
> Anatoly Podgoretsky © (17.11.06 12:00) [7]
> Так ты еще и DB Aware компоненты предлагаешь переписать :-)
теперь-то че переписывать... сделали как сделали...
все же не вижу насущной необходимости
← →
ЮЮ © (2006-11-17 12:39) [9]
> зачем TControl"у знать о DataSet? о нем могли бы знать TDBXxx-
> контролы.
какая разница, знает о контролах DataSet или DataSource?
Вот и я о том же. А почему они о нем знают. Потому что у них есть DataSource. И они реагирует на его поведение (достаточно простое) так или иначе. А если бы у них был DataSet, то он должен был оповешать их. А их это кого - любых наследников TControl. Т.е. TControl должен был знать о TDataSet и о его сообщениях.
← →
Anatoly Podgoretsky © (2006-11-17 12:57) [10]> StriderMan (17.11.2006 12:29:08) [8]
А ведь с DisableControls был только первый попавший пример.
← →
StriderMan © (2006-11-17 13:10) [11]насчет DisableControls:
procedure TDataSet.DisableControls;
begin
if FDisableCount = 0 then
begin
FDisableState := FState;
FEnableEvent := deDataSetChange;
end;
Inc(FDisableCount);
end;
как видно, никто никого не оповещает, а только флажок возводится.
а в EnableControls уже генерится событие DataEvent:procedure TDataSet.EnableControls;
begin
if FDisableCount <> 0 then
begin
Dec(FDisableCount);
if FDisableCount = 0 then
begin
if FDisableState <> FState then DataEvent(deUpdateState, 0);
if (FDisableState <> dsInactive) and (FState <> dsInactive) then
DataEvent(FEnableEvent, 0);
end;
end;
end;
и вDataEvent
кстати, все операции совершаются только с TField, и только в случае флажка NotifyDataSources идет обращение к DataSource.
> оповешать их. А их это кого - любых наследников TControl. Т.е. TControl должен был знать о TDataSet
как видно, напрямую TControl"ы не оповещають и не надо. только через флажок или через TField.
← →
ЮЮ © (2006-11-17 13:24) [12]как видно, никто никого не оповещает, а только флажок возводится.
Если оповещать некого, то какая разница кого? :)procedure TDataSet.DataEvent(Event: TDataEvent; Info: Longint);
...
begin
NotifyDataSources := not (ControlsDisabled or (State = dsBlockRead));
case Event of
deFieldChange:
begin
if TField(Info).FieldKind in [fkData, fkInternalCalc] then
SetModified(True);
UpdateCalcFields;
end;
deFieldListChange:
FieldList.Updated := False;
dePropertyChange:
FieldDefs.Updated := False;
deCheckBrowseMode:
CheckNestedBrowseMode;
deDataSetChange, deDataSetScroll:
NotifyDetails;
deLayoutChange:
begin
FieldList.Updated := False;
if ControlsDisabled then
FEnableEvent := deLayoutChange;
end;
deUpdateState:
if ControlsDisabled then
begin
Event := deDisabledStateChange;
Info := Integer(State <> dsInactive);
NotifyDataSources := True;
end;
end;
if NotifyDataSources then
begin
for I := 0 to FDataSources.Count - 1 do
TDataSource(FDataSources[I]).DataEvent(Event, Info);
if FDesigner <> nil then FDesigner.DataEvent(Event, Info);
end;
end;
Т.е. в выделенном месте потребовалось бы
TControl(F...Controls[I]).DataEvent(Event, Info);
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.045 c